12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- :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
|