-
-
Notifications
You must be signed in to change notification settings - Fork 485
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add new glossary terms. #748
Conversation
Referring to a Proxy or AppVM can be referring to a Standalone or TemplatebasedVM. Adding TemplateBased{ProxyVM,AppVM} is less ambiguous. Adding terms for anon-whonix and sys-whonix will help avoid confusion when referring to those VMs in documentation etc.
Interesting. This is the first time I've seen the terms "TemplateBasedAppVM" and "TemplateBasedProxyVM." They make sense as terms, but I'm somewhat loathe to set the precedent of coining new terms in the glossary without prior use simply because they make sense. (We wouldn't want to coin the Cartesian product of all of our logically compatible terms just because they make sense.) In practice, it's reasonable to assume that "AppVM" and "ProxyVM" denote TemplateBasedVMs unless otherwise specified.
Those are names of particular VMs, not terms for types of VMs. The fact that they're created by default with those names makes it easy to confuse the two, but we must be careful not to. Notice that we don't have entries for |
TemplateBasedAppVM and TemplateBasedProxyVM are being used in Whonix wiki.
Similar for TemplateBasedAppVMs. It's Perhaps we'll just add a space in between such as...
...? The reason for this pull request, I think is, to avoid inventing multiple notations / terms for the very same thing, having these spread without any "official best notation" to reference and thereby avoiding any confusion from that. |
Yes, I see what you mean. Maybe mention |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
To add confusion, terminology changed with R4.0. With R<=3.x, there were NetVMs and ProxyVMs which were distinct from AppVMs. Now sys-net, sys-firewall, sys-whonix (and any VPN qubes) are AppVMs with appropriate property set (provides_network
). Same with HVMs, this is also a property (virt_mode
).
TemplateVM
, AppVM
, StandaloneVM
, DisposableVM
and previously (< R4.0): NetVM
, ProxyVM
, HVM
, TemplateHVM
, are technical terms, because they are identifiers of qube type as understood by qubesd, qubes-manager and assorted tools. IOW "TemplateBasedSomethingVM" is confusing, since you cannot chose it when you create a qube. I think we have to be very precise with that.
Unfortunately the CamelCaseVM terminology was used liberally in the past, and it is not clear, what is a concept and what is actually configured. The fact that types changed in R4.0 is also confusing.
Instead of multiplying terms, can we just retain the actual types and maybe NetVM (there is actually a property netvm
) and ProxyVM (since it is widely used), with clear distinction, what applies to which (supported) Qubes release?
@@ -89,6 +89,10 @@ Application Virtual Machine. | |||
A [VM](#vm) that is intended for running software applications. | |||
Typically a TemplateBasedVM, but may be a StandaloneVM. Never a TemplateVM. | |||
|
|||
TemplateBasedAppVM | |||
------------------ | |||
Any [AppVM](#appvm) that depends on a TemplateVM for its root filesystem. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is tautology. There are no AppVMs that are not based on TemplateVMs, and in R4.0 anything that is based on TemplateVM is AppVM.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is tautology. There are no AppVMs that are not based on TemplateVMs,
Not according to the current official definition: "Application Virtual Machine. A VM that is intended for running software applications. Typically a TemplateBasedVM, but may be a StandaloneVM. Never a TemplateVM."
and in R4.0 anything that is based on TemplateVM is AppVM.
That's conflating AppVMs with TemplateBasedVMs. As the definition above shows, "AppVM" originally meant "VM for running applications" (hence the "App" part), regardless of whether it's standalone or based on a template. If this conflation was enforced in code beginning with 4.0, then that was a mistake.
@@ -105,6 +109,10 @@ Proxy Virtual Machine. | |||
A type of [VM](#vm) that proxies network access for other VMs. | |||
Typically, a ProxyVM sits between a NetVM and another VM (such as an AppVM or a TemplateVM) that requires network access. | |||
|
|||
TempalateBasedProxyVM | |||
--------------------- | |||
Any [ProxyVM](#proxyvm) that depends on a TemplateVM for its root filesystem. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same. Even in R3.x all ProxyVMs were based on TemplateVMs, and there are no ProxyVMs in R4.0.
The funny thing is, that was the case in <R4.0 with HVMs. Now we have properties: I'm not at all surprised people feel need for "TemplateBased". But now this is just called AppVM. And DispVMs have AppVMs as |
This is bad, because it conflates two distinct, important concepts:
Since it's important for security that users do not run programs in the wrong places in Qubes, the fact that "App" stands for "Application" is actually important. Conflating this with the concept of being based on a template implies that it's okay to treat every TemplateBasedVM like an AppVM and vice versa (i.e., run whatever programs you want there). It also leads to strange results. For example, it follows that all NetVMs are AppVMs in 4.0.
Is there no |
That's correct. Let me explain the implementation and reasons for it below.
It is perfectly fine to run applications in R4.0
As part of R4.0 the VM types were reduced, because that Cartesian product was both baroque and constraining.
They all were PV domains based on template, which was problematic for unikernel-based firewalls which might require HVM virt_mode. Again, there was no difference from template POV and as you may notice, that would all be perfectly served by ProxyVM, whose netvm property may also be nulled, with the side effect that any qube would appear as a choice for It is not possible to change qube type (only viable solution is to clone a VM to another type, which may be tricky). As mentioned, The comprehensive list of all R4.0 VM types is here: https://github.com/QubesOS/qubes-core-admin/blob/af7d54d3883505401ecf0a26567ae699877520e5/setup.py#L62-L66 and they are documented: https://dev.qubes-os.org/projects/core-admin/en/latest/qubes-vm/index.html#particular-vm-classes. All other CamelCaseVMs are not VM types, in that you cannot choose it as VM type in Qubes Manager when creating a VM. One paragraph about DispVMs. DispVMs are also "based on templates", like AppVMs they also have
To reiterate,
I'd like to make this distinction to avoid questions of "how do I choose FirewallVM in QubesManager". This double terminology is something we have to suffer at least until R3.2 EOL, which IIRC is end of March 2019. I understand TemplateBasedVMs as an invented term that lowers the learning curve in R3, but makes it hard to transition to R4. Especially when one tries to understand DispVM. Are they TemplateBased or not? If so, they surely must be based on TemplateVMs? Well, yes and no. Transitively yes, directly no. Their template is AppVM, which is also TemplateBased, now truly on TemplateVM. I hope I made that sufficiently understandable. If there is something not clear, please do ask. If you'd like to cut and edit for some explainer in qubes-doc, feel free. |
The problem with AppVM VM class is that its name is about function ("place where you run applications"), while technically its real meaning is "VM based on TemplateVM". In many cases this is the same, but not all the cases (as you pointed out). StandaloneVM is also "a place where you run applications". TemplateBasedVM would be slightly better, but then DispVM (which we should really name DisposableVM, see #2671) would be more confusing, because it would be a VM with a template being TemplateBasedVM... But I agree the AppVM name as it is now in R4.0 (and also in R3.x to some extend) is inaccurate. NetVM/ProxyVM case @woju described accurately - this is something technically gone in R4.0 (where it's just a |
Keeping those terms may lead to confusion. However, removing them will likely lead confusions. They might not be the "proper" technical terminology but its what users are comfortable using i.e. easily understood by less experienced users and more experienced alike. This almost seem like trying to fix something thats not broken IMHO. |
Either way, it will need to be explained. Either the explanation is that NetVMs and ProxyVMs (as previously defined) no longer exist in 4.0, or the explanation is that the definitions of the terms "NetVM" and "ProxyVM" have changed in 4.0. It's not obvious to me which option will be less confusing to people than the other. Either way, this is a major user-facing change that should have been announced concurrently with the 4.0 release, IMHO. Edit: Ok, to be fair, it looks like we explained it here, though the explanation could have been clearer and wasn't repeated in the 4.0 announcement. |
After thinking about it a bit more, it would probably be simpler just to keep one definition for each term (the old definition), and say that NetVMs and ProxyVMs no longer exist in 4.0. Otherwise, we'll have to make clarifications like, "ProxyVM... No, I mean ProxyVM in the old 3.x sense." Term reuse leads to trouble. |
Closing this for now due to the prolonged lack of activity. If you believe this is a mistake, or if anyone would like this PR to remain open, please leave a comment, and we'll be happy to reopen this. Thank you. |
See #748 and the glossary.
Referring to a Proxy or AppVM can be referring to a Standalone or TemplatebasedVM. Adding TemplateBased{ProxyVM,AppVM} is less ambiguous. Adding terms for
anon-whonix
andsys-whonix
will help avoid confusion when referring to those VMs in documentation etc.