89 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| :py:mod:`qubes.vm` -- Different Virtual Machine types
 | |
| =====================================================
 | |
| 
 | |
| Qubes is composed of several virtual machines that are interconnected in
 | |
| several ways. From now on they will be called „domains”, as they may not
 | |
| actually be true virtual machines -- we plan to support LXC containers for
 | |
| example. Because of Xen-only legacy of Qubes code, it is custom to refer to them
 | |
| in long/plural as ``domains`` and in short/singular as ``vm``.
 | |
| 
 | |
| 
 | |
| Domain object
 | |
| -------------
 | |
| 
 | |
| There are couple of programming objects that refer to domain. The main is the
 | |
| instance of :py:class:`qubes.vm.QubesVM`. This is the main „porcelain” object,
 | |
| which carries other objects and supplies convenience methods like
 | |
| :py:meth:`qubes.vm.qubesvm.QubesVM.start`. This class is actually divided in
 | |
| two, the :py:class:`qubes.vm.qubesvm.QubesVM` cares about Qubes-specific
 | |
| actions, that are more or less directly related to security model. It is
 | |
| intended to be easily auditable by non-expert programmers (ie. we don't use
 | |
| Python's magic there). The second class is its parent,
 | |
| :py:class:`qubes.vm.BaseVM`, which is concerned about technicalities like XML
 | |
| serialising/deserialising. It is of less concern to threat model auditors, but
 | |
| still relevant to overall security of the Qubes OS. It is written for
 | |
| programmers by programmers.
 | |
| 
 | |
| The second object is the XML node that refers to the domain. It can be accessed
 | |
| as :py:attr:`Qubes.vm.BaseVM.xml` attribute of the domain object. The third one
 | |
| is :py:attr:`Qubes.vm.qubesvm.QubesVM.libvirt_domain` object for directly
 | |
| interacting with libvirt. Those objects are intended to be used from core and/or
 | |
| plugins, but not directly by user or from qvm-tools. They are however public, so
 | |
| there are no restrictions.
 | |
| 
 | |
| 
 | |
| Domain classes
 | |
| --------------
 | |
| 
 | |
| There are several different types of VM, because not every Qubes domain is equal
 | |
| -- some of them perform specific functions, like NetVM; others have different
 | |
| life cycle, like DisposableVM. For that, different domains have different Python
 | |
| classes. They are all defined in this package, generally one class per module,
 | |
| but some modules contain private globals that serve this particular class.
 | |
| 
 | |
| 
 | |
| Package contents
 | |
| ----------------
 | |
| 
 | |
| Main public classes
 | |
| ^^^^^^^^^^^^^^^^^^^
 | |
| 
 | |
| .. autoclass:: qubes.vm.BaseVM
 | |
|    :members:
 | |
|    :show-inheritance:
 | |
| 
 | |
| Helper classes and functions
 | |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | |
| 
 | |
| .. autoclass:: qubes.features.Features
 | |
|    :members:
 | |
|    :show-inheritance:
 | |
| 
 | |
| .. autoclass:: qubes.vm.mix.net.NetVMMixin
 | |
|    :members:
 | |
|    :show-inheritance:
 | |
| 
 | |
| Particular VM classes
 | |
| ^^^^^^^^^^^^^^^^^^^^^
 | |
| 
 | |
| Main types:
 | |
| 
 | |
| .. toctree::
 | |
|    :maxdepth: 1
 | |
| 
 | |
|    qubesvm
 | |
|    appvm
 | |
|    templatevm
 | |
| 
 | |
| Special VM types:
 | |
| 
 | |
| .. toctree::
 | |
|    :maxdepth: 1
 | |
| 
 | |
|    dispvm
 | |
|    adminvm
 | |
| 
 | |
| .. standalonevm
 | |
| 
 | |
| .. vim: ts=3 sw=3 et
 | 
