Talk:Virtual machine

Microsoft Visual Basic
Removed "Actually Visual Basic a widely used programming environment uses as well a virtual machine."

VB does not use a virtual machine. It compiles to p-code, which is not the same thing. The p-code is specific to intel hardware and the windows operating system, so it doesn't qualify as a virtual machine. --Dmerrill

There was an old plan by Microsoft to port Visual Basic to Alpha CPU (Windows NT for Alpha). They plan to use Visual Basic p-code on Alpha CPU.

Is this Microsoft P-code related to UCSD P-Code?

Is this Microsoft P-code related to virtual machine?

Visual Basic FAQ

CLR
Does the CLR count as a virtual machine? The CLR is certainly not Intel/Windows specific. kibibu 07:41, 18 October 2005 (UTC)
 * I would say so, in the same way the JVM for java is a virtual machine. Daedae 15:40, 10 October 2006 (UTC)

Additional information we might use somehow: and . Permission to use the second reference directly is under Public_Domain_Resources/Foldoc_license --Hannes Hirzel

SCUMMVM
Is SCUMMVM really a virtual machine? I was under the impression that it was just an emulator.


 * The article suggests that emulators can be considered as virtual machines. Dysprosia 07:45, 21 Apr 2004 (UTC)


 * Which article, Dysprosia? Thanks! Stbey 08:18, 21 Apr 2004 (UTC)


 * This one :) Dysprosia 08:22, 21 Apr 2004 (UTC)


 * Sorry, I still don't get it! Do you mean this page, Talk:Virtual_machine? Or SCUMMVM? That page doesn't exist yet. And where does 'it' affirm explicitly that emulators of neural networks can be considered virtual machines? Thanks! Stbey 08:32, 21 Apr 2004 (UTC)


 * The article, Virtual machine. I don't know about neural networks. Dysprosia 08:40, 21 Apr 2004 (UTC)


 * SCUMMVM is not related to neural networks--it is an opensource emulator/interpreter that executes the proprietary bytecode used by older LucasArts computer games. -- Bovineone 16:04, 10 May 2007 (UTC)

Neural networks
Question: What do you think: Can a connectionist model, i.e., a neural network, used to solve some specialized task (e.g. pattern matching, such as optical character recognition, voice or face recognition, etc.), running as an emulation on a digital computer, be considered to be a "virtual machine" as well?

Stbey 08:37, 21 Apr 2004 (UTC)


 * Found an answer. See under ftp://archive.cis.ohio-state.edu/pub/neuroprose the two files bessiere.innc90.ps.Z . . . . . . Oct 8  1991     31k bessiere.nerves.ps.Z . . . . . . Oct  8  1991    272k, "A Virtual Machine Model For Artificial Neural Network Programming". Stbey 07:19, 22 Apr 2004 (UTC)

List of virtual machines
It would be nice if we annotate all of them and perhaps split the list into two or three groups. A suggestion is to take the distinction in the article mentioned above Hirzel 14:57, 18 Jun 2005 (UTC)
 * Emulation of the underlying raw hardware
 * Emulation of a non-native system

An alternative is to format it into a sortable table, and include the type of licence (proprietary, freeware, GPL, etc) for each product. See also my edit on Category talk:Free virtualization software. --Nick4mony (talk) 01:03, 4 May 2011 (UTC)

Good reference source
A good reference on the topic, recently published, is Smith and Nair's book Virtual Machines: Versatile Platforms for Systems and Processes (ISBN:1558609105), which mentions the dichotomy in the article. However, it calls them process VMs (things that host applications, like the Java Virtual Machine), and system VMs (things that host operation systems, like VMware).

Perhaps this page should be refactored to take this text into account. Currently, it is one of the major works (excluding papers) on the topic.

--EngineerScotty 03:26, 10 October 2005 (UTC)

Parallel Virtual Machine
The text says "PVM has become the de facto standard for distributed computing world-wide", however I think MPI (particulary MPICH) is far more common. The fact that MPI is not mentioned at all is rather suspicious. PVM has not been officially updated since 1993 and is largely considered to be discontinued. -- Bovineone 18:57, 15 February 2006 (UTC)
 * I've renamed the section to be "machine aggregation" and improved NPOV by discussing both PVM and MPI. -- Bovineone 03:31, 13 April 2006 (UTC)

So what is Xen then?
Hi there. Xen is listed as an Operating system virtualization. However, it is also mentioned in Hypervisor. More generally, the hypervisor article largely applies to what are here called "Operating system virtual machines". What's the difference if any? Thanks. PizzaMargherita 13:39, 16 March 2006 (UTC)


 * The difference, in my opinion, is that several of the entries on hardware virtualization (VMWare, VirtualPC) are referring to things that essentially run on top of another full machine (hardware+OS). Xen in particular runs directly on the hardware and thus has to have a separate OS installed on it to actually run anything.  that is,  app | guest os | vmware | host os | hardware   versus app | OS | xen | hardware.   Daedae 19:46, 1 May 2006 (UTC)

Redundant definitions?
The article has a section on the "Original meaning", which it says is "much better referred to by using the terms virtualization and virtual servers." Then it gives a separate, distinct definition, the "Hardware virtual machine", which it describes as emulation, paravirtualization, OS-level virtualization, etc. Aren't these the same thing? Wmahan. 22:16, 31 May 2006 (UTC)
 * I agree, I don't see any difference between those two. -- Bovineone 23:00, 31 May 2006 (UTC)
 * On the other hand, it announces "Software virtualization can be done in four major ways:", but offers only 3 entries in the list which immediately follows. --Jerome Potts 04:20, 11 November 2006 (UTC)

Bochs?
Doesn't (for example) Bochs qualify as a VM even though it's classed as an emulator? Where do you draw the line? --Thejaka 08:29, 28 July 2006 (UTC)

Bytecode execution techniques?
This and virtual machine both don't explain any techniques used to execute bytecode. I've sketched some basic thoughts out on a blog entry of mine at KernelTrap; but I don't know how current day ones operate, if there's generally optimization, if instruction ordering counts, etc.

This interests me because I am curious as to how interpreters work. I could imagine something like Python tokenizing the language directly; whereas CIL is a virtual machine target with a specific definition and is compiled to from an abstract, possibly unrelated language. In the case of Python it would be possible to emit machine-like instructions such as ADD, SUB, MUL, MOV, etc and optimize them; but would that be helpful? Could you optimize any further than directly tokenizing a language?

IBM VM/CMS
I think the old IBM virtual machine system was called VM. CMS was a simple single user OS you could run on the virtual machine, but OS's such as DOS (no relation to MSDOS), MVS, and UNIX were also run on these virtual machines. Any IBM old-timers out there to confirm this?


 * I'm not an IBM old-timer, but I know a fair amount about this, and have fixed all this (and created an article for VM, which was an interesting system). I left out this line:

This also enabled IBM to upgrade the hardware, install a new version of the CMS VM, and thereby allow user programs to take advantage of the new hardware without being rewritten.
 * ...because I'm not sure if it's true. My impression is that that the basic 360 architecture is what the user code sees, and it hasn't really changed. I don't think VM emulates the fine details (the kind an OS would notice) of an older IBM mainframe on the newer ones, though, which is kind of what this text implies. Noel 14:23, 9 Sep 2003 (EDT)


 * You're right, that's what it implies, and it's incorrect. What made hardware swapouts work was the continuous upgrade path from the S/360s on up to today's machines, not some magical layer in CMS (or in CP, as noted correctly below).  RossPatterson 23:14, 11 November 2006 (UTC)


 * IBM's VM was made up of several components primarily, CP - the control program, and CMS, a single user environment (CMS in of itself is a full blown operating system, though eventually it became tied to running under CP and could not run natively).


 * CP is really the component that provides the virtual machine environment. While there is some emulation of CPU instructions, for the most part CP did not "emulate" the instruction set. CP's primary areas of emulation were the I/O environment, and simulating privileged CPU instructions. Current versions of VM rely on hardware virtualization support to assist in the processing of privilaged instructions. For the most part, as long as the "external state" of the guest system doesn't change, the hardware virtualization support handles processing the guests instructions at native speed. It is only when the state of the guest system changes in areas that require simulation (such as certain I/O instructions, page faults at the virtual machine level, etc.) or when the guest "ends its timeslice" does CP get involved. —Preceding unsigned comment added by 65.102.209.174 (talk) 05:57, 18 January 2006


 * As far as I remember the 'principles of operation' there was not much emulation/simulation but mostly translation of virtual addresses into real addresses, interceptions of I/O or privileged calls and responses and provision to the caller after checking the caller'r rights and privileges. That's a reason to make the CP so fast, so small (some 100 kByte?) Yes, you are right, CP scheduled the queues... Wish, modern PCs would have these capabilities :-)) -wofa07,2.208.185.85 (talk) 01:35, 17 June 2012 (UTC)


 * The architecture has changes since the S/360, and you cannot run anything that uses the 360/architecture under VM. System/370 Extended Architecture (XA) dropped all the the 360 I/O instructions and added a new I/O architecture with new instructions; CP doesn't simulate the old instructions. Shmuel (Seymour J.) Metz Username:Chatul (talk) 19:56, 1 November 2011 (UTC)


 * You can run on VM any OS which is able to run on IBM mainframe hardware. So, no Unix (for example, you cannot IBM's AIX), except Linux, which has been ported to such HW. --Jerome Potts 05:27, 11 November 2006 (UTC)


 * You can certainly run Unix under VM. IX/370 is no longer supported, but z/OS is. There's also a Solaris port. BTW, neither *bsd nor Linux have Unix certifications. Shmuel (Seymour J.) Metz Username:Chatul (talk) 19:56, 1 November 2011 (UTC)

Isn't VM for IBM OS/390 the one that can be used to run Linux on a mainframe? And wasn't it this VM (according to an article on - I think it was - Slashdot) that they got 30,000 Linux's running at the same time, on a single mainframe? And isn't this the ideal solution for web hosting, minimizing administration costs and yet offering a separate Linux host with its own root password to each client? Stbey 08:51, 21 Apr 2004 (UTC)
 * VM and OS/390 are two separate IBM mainframe OSes. The one which can run Linux as a guest OS is VM. Incidentally, you can also run OS/390 as a guest on VM, but not the other way around. Yes, you can run many many Linuces on a VM, depending on how big and powerful a computer you're running VM on. --Jerome Potts 05:27, 11 November 2006 (UTC)
 * According to IBM AIX (operating system), you can not only run AIX/370 under VM, this is the only way to run it. Notinasnaid 15:23, 20 November 2006 (UTC)
 * Except you have a good old AIX/400 hardware, do you? -wofa07,2.208.185.85 (talk) 01:35, 17 June 2012 (UTC)

If I may put my 2cts in here: Yes, CP/CMS changed dramatically in the early 70s when IBM recognized that more than 160 expected systems were sold. Especially developers preferred CP-xx. Thus, IBM accepted inside concurrency, and inside competition between MVS and VM development. MVS always was the bigger, more powerful section due to big money behind. See Melinda Varian to this theme. But VM was a concept more flexible, and evolved then as a first stage of open software (source code was provided and open to changes). When I entered the VM/370 theater in 1978, we played around with TCP/IP (then ARPANET), first stages of the BITNET, services for people like LISTSERV, TRICKLE. We played around with UNIX ports based on ASCII, graphic editors/icons like XEROX, compiler-generators like CDL2. IBM helped with new hardware like the 4361, 4381, 9370, etc, including hardware instructions to support CP. New CP Versions were proofed in a VM environment, new VMs were proofed similar (RSCS, GCS, VTAM/VSAM, TCP/IP, etc). We had some Problems in the UNIX environment since we had to re-invent the wheel due to ASCII vs EBCDIC but finally it worked. With evolving VM/370, IBM managed to intercept 360, 370, and VM supervisor calls by hardware to give it to CP (see Principles of Operation). Especially, the Control Register (CR) was designed to hold back downward compatibility. Even the simple CMS evolved into a multitasking system with features like IUCV (a generic interrupt system) for server purposes. Scripting languages like EXEC2, and the more powerful language REXX simplified the writing of server software. Since the CP is simply managing real hardware calls, every OS is possible. As mentioned above, mostly I/O calls are intercepted by CP. When we played with UNIX most problems arose due to terminals based on 3270 streams which are incompatible to simple ASCII-terminals anyway. I'm sure that works like ours have helped IBM to establish their modern Z/VM family. Sorry, to be so historical but I could not resist here... wofa07, 2.208.185.85 (talk) 01:35, 17 June 2012 (UTC) 2.208.185.85 (talk) 00:55, 17 June 2012 (UTC)

Correct Definition??
"In computer science, a virtual machine is software that creates a virtualized environment between the computer platform so that the end user can operate software."

--This sentence does not make sense. Between the computer platform and what exactly??

--You are right, the definition didn't make a lot of sense. The whole "definitions" section was quite confused and imprecise. I have re-written it to be in line with the scientific literature, and have attempted to define the terms clearly. Someone who knows PVM and MPI better than me should check that their description is correct.

I removed Plan 9 (has nothing to do with this) and gCore (which is *hardware*, just the opposite of virtualization). Heiser 06:44, 21 October 2007 (UTC)

Virtual machine and portability
Comments above assert that an (application) virtual machine must be platform independent, and that, for this reason, the environment for executing Visual Basic p-code (for example) would not count as a virtual machine. I do not think this is accurate; such environments have been considered virtual machines for decades. The fact that a given virtual machine is localized in a particular hardware or software environment does not reduce its 'virtualness' (though it can certainly make it less interesting). Most interpreter-based systems, and in particular p-code systems and state machines, can be regarded as defining (application) virtual machines. Platform-independence is of course an important aspect of such systems. But their salient characteristic is reliance on an abstraction layer that hides or encapsulates implementation details. One can define such a layer, and implement its behavior, in either portable or non-portable ways.

The progenitor of virtual machine environments, IBM's CP/CMS, was of course hardware-specific, as are any x86 virtualization efforts; but that's a different topic. Trevor Hanson 06:05, 21 November 2006 (UTC)


 * Hmm, depends on. If you can build an machine without any I/O, there is a good chance to build it without any annoying stories about portability. In fact, I/O is mainly hardware, mainly difficult to emulate, to be virtualized. When I programmed the Pascal Microengine (hardware built P-Code), I found a lot of difficulties to catch its registers. Lots of trial-and-errors were needed, but finally I got it. From my feeling, the real I/O is the point to catch a VM. Programming a VM/370 was easy, when you worked with an IBM's standard like 3780, etc... To build your own device, was then a challenge. Finally, I think, that IBM did make a good job then, helped us, helped the community, and the community helped us, like we tried to help the community. Other times perhaps. In fact, I probed some virtual P-Code machines (even on /370) and CDC6600). It worked good on all machines (not so good on the CDC6600 due to lacking fastness) but the I/O is really weak.

I looked into the Source (port from Waterloo to IBM, CP/M, CDC, DEC, Microengine) to port this whole or part of stuff. In fact, you are basically right: P-Code is a virtual machine but from my experiences leaks P-Code from real devices. These were too virtual. Nonetheless, Niklas Wirth defined his machine very good, very small, and I learned to build a compiler-compiler based on his books in the 70ths... Was quite right nice then... 46.115.35.3 (talk) 11:12, 20 April 2013 (UTC)

VMs and interpreters
I just reverted a change that removed this text: The application is run on the computer using an interpreter or Just In Time compilation with User:Hackwrench's comment "A virtual machine is fundamentally different from an interpreter." However, the cited example (Java VM) is implemented with an interpreter, as have been many other VMs such as Smalltalk and p-code platforms.

This is of course a different use of the term virtual machine from the one most typically used today (hence the label "application virtual machine"). However, for decades the term has been applied to abstracted platforms like those just mentioned. I think that this issue isn't fully addressed in the current article text; but the topic should probably be discussed here before removing text. Trevor Hanson 19:01, 5 February 2007 (UTC)

That's just it. Using the Dragon books as a guide, the definition of interpreted in a technical sense is different from what it is as used in a colloquial sense and Java is interpreted only in the colloquial sense. Having that line there only serves to confuse people regardless of what your personal take on what "interpreted" means. The use of the term "interpreted" is inaccurate at p-code as well. Furthermore, the article at interpreter doesn't address the duality. Hackwrench 03:06, 6 February 2007 (UTC)

See the replies to http://pinderkent.blogsavy.com/archives/48 Hackwrench 03:16, 6 February 2007 (UTC)

VMWare workstion on fedora Core 6
I tried to install VMWare workstion on fedora Core 6, It cannot open because there is a xen file missing how do I correct this problem —The preceding unsigned comment was added by 66.176.27.91 (talk • contribs).
 * Wikipedia is not suitable for asking technical support questions. -- Bovineone 16:06, 10 May 2007 (UTC)

Uses
Perhaps a section (in layman's terms) explaining what VM's are for and perhaps a paragraph or two given a simpler explanation as the article is rather technical. 89.240.13.111 18:51, 3 July 2007 (UTC)

--Better now? Heiser 06:45, 21 October 2007 (UTC)

ARM
I just undid the change someone did (they replaced the TrustZone reference with one to Jazelle). Jazelle provides support for executing Java bytecode, which is a form of language support, not VM support. TrustZone provides a (very limited) form of system virtuzliation (only a single VM). -- Heiser (talk) 23:04, 30 January 2008 (UTC)

Microsoft Hyper-V
I think the page should be updated with references to Microsoft Hyper-V technology shipped with Windows Server 2008. 213.203.130.231 (talk) 08:46, 10 April 2008 (UTC)

Two separate meanings
As usual with compsci vs. market, the article covers two different - but overlapping - topics. I've never ever heard in compsci that "machine" should refer to "computer environment", but instead to "processor", "CPU". Now we have a classic computer confusion, one real academic meaning, well defined and practical, and a fuzzy market meaning covering anything that entails at least partial replacement of some bytes of code here and there before executing the executable... Now, if accepting the marketroid fuzzification as "virtual machines", what is it in a normal jump address relocation performed at ELF loading, that makes the ELF-loader not being a "virtual machine"? If accepting non-academic definitions on this-or-that compsci concept, then we'll end up in a situation when "virtual machine, anything is a virtual machine"; not very helpful!

Now, my compsci whining aside, the article should be parted into virtual machine, and environment virtualization in the long run. We should try to find and document the original definition, and reflect around deviant meanings and market buzz "meanings", in order to treat the topic more concizely. In the List of virtual machine software the subsection OS-level virtualization software does absolutely not belong. The subsection is good and fine, but should be elsewhere to not cause confusion. It might occur that the two meanings are so intertwined that the article can't be split into two, but either way, the contents become more clarified.  Said: Rursus   ☻   06:30, 6 May 2008 (UTC)

And the current definition is incorrect and malfunct, because of what I said in next-to-prev para.  Said: Rursus   ☻   07:42, 6 May 2008 (UTC)

Does a VM have to interact with the Platform
Could a VM application let me run a virtual OS but not to just interact with the real mode os to let someone use older programs they find easier find easier to use but to morelike let yu experiment with that OS without making changes to the real OS apps and create a more closed circle program? Melab-1 (talk) 18:48, 10 August 2008 (UTC)


 * I am not sure of your meaning. Do you mean, 1. that you wish to use real-mode in any or all environments, or 2. that you wonder if a virtual machine can handle real-mode apps? - KitchM (talk) 21:13, 26 July 2011 (UTC)

Registers versus stack?
What's the difference between a register-based VM and a stack-based VM? —Preceding unsigned comment added by 70.247.165.213 (talk) 20:39, 30 August 2008 (UTC)

A register-based VM emulates a register machine. A stack-based VM emulates a stack machine. --68.0.124.33 (talk) 14:21, 2 September 2008 (UTC)

There's a bit more to it. Real machines these days are all register machines, so, by implication, all VMs virtualising real processors (system VMs) are register VMs. Process VMs (like JVM) frequently are stack machines as this maps more naturally to programming languages. heiser (talk) 00:10, 3 September 2008 (UTC)

Definition
Despite being better than the previous attempt, the present definition still appears to make no sense...

In computer science, a virtual machine (VM) is a software implementation of a machine (computer) that executes programs like a real machine.

Appears to reduce to a tautologous truism:

''...a...machine is... a[n]... implementation of a machine... that executes programs like a... machine.''

Since I have no idea what a VM actually is I am unable to make sense of the sentence and rewrite it. Anyone clarify?

Jubilee♫ clipman 17:33, 21 December 2008 (UTC)


 * This would be self-referential (still not a tautology) if it was trying to define machine, but it doesn't, it defines virtual machine, and specifically what makes a machine virtual. The above definition makes perfect sense, is well-accepted in the scientific literature and goes back about 40 years.

Additional:

Current use includes virtual machines which have no direct correspondence to any real hardware

Don't follow that... Does it mean they are not run on hardware or do not relate to particular hardware? Is real hardware opposed virtual hardware, actual hardware or, indeed, fake hardware; or is this just a very loose sentence?


 * Yes, real hardware (machine) as opposed to virtual hardware (machine). Not sure what's hard to understand there, unless you have a general problem understanding the term virtual.

Also: A program written in Java receives services from the Java Runtime Environment(JRE) software by issuing commands from which the expected result is returned by the Java software

Which software returns the expected result? Two are referenced: A program written in Java and Java Runtime Environment. And why expected? Surely no program returns unexpected results?

I suspect my real problem is that I do not follow the meanings of the terms machine, virtual and real. These obviously have some significant and particular meaning in technospeak that needs to be clarified prior to defining virtual machine...


 * Since you seem to have problems with the concept of virtualization, you may check the virtualization page, which this article references. heiser (talk) 22:04, 21 December 2008 (UTC)

Jubilee♫ clipman 17:54, 21 December 2008 (UTC)


 * It is understood that there is a problem with the current definition. In computing, the use of the word "virtual" most usually means "pretend" or "artificial".  There is most certainly a difference between virtualizing something in a hardware context or a software context.  In other words, computer virtualization may take place within the hardware layer or some software layer.  Also, a computer machine is the hardware and software combination we call a computer.  In this context, "the computer" is "the machine".  Making a virtual machine is creating a sort of sub-set of the machine, and therefore making an artificial version or copy of it.  The artificial or virtual machine may do actual work, however.  So, the bottom line is that we pretend to have separate operating systems in such a manner that the actual ones do not realize they are not the only one. - KitchM (talk) 21:08, 26 July 2011 (UTC)

Known attack site?
One of the links listed at the bottom of the article leads to what Firefox declared as a "known attack site." The google safe browsing diagnostic lists it as having found malicious software on the site, even within the last 90 days.

I would recommend whoever is editing this article to remove the link or replace it with another link. It would be rather unfortunate for an unsuspecting user to stumble upon the site only to get some malware in their machine.--NWalterstorf (talk) 22:52, 21 June 2009 (UTC)
 * Done, the site had no releveant info, just the download of a few outdated Virtual Machines, clearly not appropriate for the article. SF007 (talk) 00:46, 22 June 2009 (UTC)

Dispelling Security Concerns
I am not good or bad with computers, a 'user' of PC's for around 15 years. To me it appears that the number of concurrent processes running in 'my' machine has increased over that time, and my knowledge of each diluted to a point that the thought of installing .NET Framework (required by some interesting GNU software) gives me security concerns.

I am unable to comprehend this article in this context, might it be worth including a paragraph for interested PC users? 79.76.132.104 (talk) 10:05, 7 August 2009 (UTC)
 * You should read the simple wikipedia article on it. Simple wikipedia is designed to give the same information as wikipedia, but with simpler language. It is good for overly technical articles, ESL, or those new to a topic.

http://simple.wikipedia.org/wiki/Virtualization
 * Sort of, but not exactly. The "simple" version is to use more basic English language words, but this subject has few of those, and the article given is no more simple than anything else.  It is just better written.  Further, the issue of security is not one that is handled in this article.  It has no relevance to the subject.  It is sort of like comparing trucks to cars, and then questioning the brand of tires. - KitchM (talk) 20:50, 26 July 2011 (UTC)

Breaking out of vm
Quoted from the top: ...limited to the resources and abstractions provided by the virtual machine—it cannot break out of its virtual world. Should it be perhaps noted that however due to security flaws, it is known that you can break out of some vm situations?

86.44.145.170 (talk) 23:57, 28 August 2010 (UTC)


 * Perhaps the issue that the article is attempting to address is the definitive or ultimate or ideal application. It is not about security or flaws in application.  There are always exceptions. - KitchM (talk) 20:53, 26 July 2011 (UTC)

Can I say "Holy Crap"?
That is a wicked cool concept. I never imagined such a thing. —Preceding unsigned comment added by 72.187.199.192 (talk) 19:13, 20 November 2010 (UTC)

Add OCaml to "List of virtual machine software"?
Subj — Preceding unsigned comment added by 178.95.136.216 (talk) 06:14, 3 June 2011 (UTC)

Discussion of what Virtual Machines used as servers.
It would be nice to include a discussion of virtual machines used as servers. It seems that this is increasingly prevalent, with the purpose being, primarily, scalability of resources.

History of VMs
Sadly I did not find any information about the history of Virtual Machines. My superficial knowledge says it started with IBM mainframes, but I have no detailed info or sources for this. Anyone who knows more - please insert it in the article. --Bernd.Brincken (talk) 23:22, 16 January 2013 (UTC)

Register vs. stack-based
We currently have Category:Register-based virtual machines and Category:Stack-based virtual machines, but the difference is not explained in the article. -- Beland (talk) 06:12, 5 July 2013 (UTC)

Virtual machine vs. emulator.
I updated the definition in the lead - the prior version seemed to suggest that a VM was just software, although later the article mentions hardware virtualization. The original definition seems to be thinking of .net or Java. The difference between a VM and an emulator should be mentioned somewhere, perhaps in the lead, if anyone can figure it out. Peter Flass (talk) 14:33, 18 July 2014 (UTC)

Split into separate pages for systems and process?
Currently the page (669062937) is a mash of two separate concepts, system virtual machine (OS virtualization etc.) and process virtual machine (JVM etc.), which have very little to do with each other (one is OSes, one is Compilers). It’s clearer to split them into separate pages, such as Sytem virtual machine and Process virtual machine.

Concretely, this arose because I wanted to learn about register-based vs. stack-based virtual machines, which is a common topic on this talk page (and write about them, and include history of things like p-Code, JVM, Dis virtual machine, etc.). However, discussion of process virtual machines (including process virtual machine implementation) is largely buried in discussions of hypervisors and hardware emulation, and thus hard to read and hard to edit.

There’s a clear seam in the page – “definitions” contains parallel sections, and “techniques” is almost exclusively for systems, with process VMs being buried in “Emulation of a non-native system”. Thus I split the page by this seam.

Some overview page is useful for disambiguation, but as it currently stands it’s hard to use.

WDYT? —Nils von Barth (nbarth) (talk) 17:29, 28 June 2015 (UTC)


 * IMHO, leaving the Virtual machine article as-is might be better than and moving its content to the System virtual machine‎ and Process virtual machine articles.  The way Virtual machine article describes those two concepts is rather understandable to the readers, so it should be better to leave them together –  that way, readers can grasp both concepts rather well without the need to shuffle through three articles. &mdash; Dsimic (talk &#124; contribs) 17:38, 28 June 2015 (UTC)


 * Thanks Dragan!
 * There are very few connections between the two concepts beyond the basic idea of abstraction from hardware and both being called "virtual machine". Someone interested in virtualization and cloud computing and hypervisors vs. someone interested in JVMs and p-Code and Android's Dalvik virtual machine have very different concerns, and I don't see much cause for flipping between multiple articles -- figure out what sense of "virtual machine" you want, and read that page. These could be addressed as separate sections on one page, but then it's a long; per WP:SUMMARY they work better as separate pages.
 * The lede/definition section does distinguish the concepts, but the details are then mashed together, almost exclusively Systems.
 * —Nils von Barth (nbarth) (talk) 17:48, 28 June 2015 (UTC)


 * You're welcome. :) I understand your concerns about the distinction between those two concepts and associated readability of everything in the same article.  Though, I still find it readable as-is, especially because there isn't too much content in the article.  Perhaps we should hear more opinions from other editors, if you agree. &mdash; Dsimic (talk &#124; contribs) 17:59, 28 June 2015 (UTC)


 * Agreed, this merits wider discussion; I've put RFCs at talk pages for WP Computing and WP Computer science (anywhere else welcome!).
 * Your point about not much content is well-taken; I started to add a "History" section, but found that it would have been a mix of hardware/systems topics like IBM M44/44X, IBM CP-40 and compiler topics like O-code machine, P-code machine, Smalltalk, Self, Strongtalk, HotSpot, so my proposal was partly due to anticipating more divergence as content grew ;)
 * —Nils von Barth (nbarth) (talk) 19:23, 28 June 2015 (UTC)


 * Thanks. I'd suggest that you go ahead and add the "History" section into the current article layout, describing the historical facts about both concepts.  With that available, we'll be able to judge even better whether splitting the article is the way to go. &mdash; Dsimic (talk &#124; contribs) 19:33, 28 June 2015 (UTC)


 * I never heard the term "process virtual machine" before seeing it here. It seems like a misnomer, a fancy way of describing something akin to the UCSD P-System  If it's standard terminology I think the articles should be split with both containing a paragraph describng the distinction and pointing to the other article. Peter Flass (talk) 19:45, 28 June 2015 (UTC)


 * That's a very good point. "Process virtual machine" seems to be used for a completely different purpose, here's a quote from this source:
 * This is a tutorial that introduces the Process Virtual Machine library to Java developers. [...] With this library you can build executable process graphs.  The key features of this library are: create executable processes that are based on a diagram structure, runtime behaviour of the nodes can be provided as Activity implementations, etc.
 * See this source as well, and that's the type of descriptions returned by Google searches. Thoughts? &mdash; Dsimic (talk &#124; contribs) 20:05, 28 June 2015 (UTC)

I've written an initial history (Virtual machine: History) in 669095454; WDYT? (I'm more familiar with the p-code/JVM style than the hypervisor style, as is probably clear; largely consolidating existing information.) Good point about naming; the traditional name for this "abstract machine" (process virtual machine) is p-code machine, which has an existing article; perhaps this should be used? One the one hand, "p-code machine" seems old-fashioned (as the article content shows), OTOH "process virtual machine" perhaps has specific connotations in cloud computing? —Nils von Barth (nbarth) (talk) 21:11, 28 June 2015 (UTC)


 * The problem is that we seem to have no references backing the intended meaning of "process virtual machine". &mdash; Dsimic (talk &#124; contribs) 21:15, 28 June 2015 (UTC)


 * Point taken; "process virtual machine" is from the POV of hardware/OSes, and is not really appropriate for JVM etc. The top Google books hit for "process virtual machine" calls what we're talking about a High-level language VM (HLL VM), and explicitly contrasts it with a process VM, calling the Pascal VMs, the Java VM, and the CLI examples of HLL VMs:
 * "These high-level language VMs (HLL VMs) are similar to the process VMs described earlier. However, they are focused on minimizing hardware-specific and OS-specific features because these would compromise platform-independence."
 * Virtual Machines: Versatile Platforms for Systems and Processes, p. 15
 * There is a pretty authoritive article "The Reincarnation of Virtual Machines", August 31, 2004, by Mendel Rosenblum of Stanford University and VMware discussing exactly this problem, and using the term "high-level language virtual machines":
 * "The term virtual machine initially described a 1960s operating system concept: a software abstraction with the looks of a computer system's hardware (real machine). Forty years later, the term encompasses a large range of abstractions—for example, Java virtual machines that don't match an existing real machine. Despite the variations, in all definitions the virtual machine is a target for a programmer or compilation system. In other words, software is written to run on the virtual machine."
 * "Three examples of these virtualization layers include hardware-level virtualization, operating system–level virtualization, and high-level language virtual machines."
 * ...so maybe this is a better name, with a (cited) explanation of distinction?
 * —Nils von Barth (nbarth) (talk) 22:06, 28 June 2015 (UTC)
 * —Nils von Barth (nbarth) (talk) 22:06, 28 June 2015 (UTC)


 * Sorry for my delayed response. By having a look at page 13 in Virtual Machines: Versatile Platforms for Systems and Processes, it can be concluded that a process virtual machine should be described in a somewhat different way –  while our article (currently) focuses on JVM-style VMs and describes them as process virtual machines, the book focuses on a lower-level approach of executing real instructions sets different from the hosts's one.  As you've noted, high-level language virtual machines (HLL VMs) would be what the article currently focuses on.  Based on this and the other reference you've provided, I'd say that we should improve the clarity of descriptions in the article, introducing the HLL VMs where appropriate, while I'd still prefer everything to stay within the same article. &mdash; Dsimic (talk &#124; contribs) 15:54, 1 July 2015 (UTC)


 * I'm here because of this annoucement. Apologies that I haven't read the above discussion. It seems like Process virtual machine is a synonym for Application virtualization so there is no need for a split here; just edit to reduce overlap with Application virtualization. ~Kvng (talk) 15:58, 1 July 2015 (UTC)


 * Hello! Based on the references listed above, application virtualization is a subset of process virtual machines, as they also include high-level language virtual machines such as the Java virtual machine. &mdash; Dsimic (talk &#124; contribs) 16:25, 1 July 2015 (UTC)


 * That seems wrong. Application visualization technologies such as the one by Citrix, really are a kind of virtualization, but do not use any JVM/CLR-style "process" virtual machine technology. —Ruud 08:02, 2 July 2015 (UTC)


 * Sure thing, but the reference doesn't present application virtualization and process virtual machines as the same thing, instead it's only putting them into the same basket with a "process virtual machines" label on it. &mdash; Dsimic (talk &#124; contribs) 08:11, 2 July 2015 (UTC)


 * Oh, I see now. The article Nils was looking for at the start of this thread (and referred to as "process virtual machine"), and which I call Virtual machine (runtime system) below, the book calls "High-level language virtual machines". What the books calls "Process virtual machines" includes those, but also things like FX!32 and possibly XenApp/App-V. —Ruud 08:40, 2 July 2015 (UTC)

Comment (Apologies for not yet having read all of the discussion above.) I think there are two problems at the moment: Two possible solutions would be: —Ruud 08:02, 2 July 2015 (UTC)
 * 1) We do no have an article exclusively about "process" virtual machines/virtual machines in the runtime system sense of the word. This is a topic on which that has been a sufficient amount of research that a dedicated article is certainly warranted.
 * 2) The current article is terribly written, goes into too much detail for an overview article (do we really need to mention Kernel SamePage Merging here?) and has a significant amount of overlap with the articles on Virtualization and Hypervisor.
 * 1) Create a new article Virtual machine (runtime system), which is unambiguously about "process" virtual machines and discusses topics like stack- vs. register-based approaches and technical aspects like tracing just-in-time compilation. Then this article could be trimmed down significantly, turning it either into a disambiguation page or a short overview, directing readers to either Virtual machine (runtime system) or Virtualization/Hypervisor. If this article where to be turned into a disambiguation page, then that would also give people an incentive to fix all those ambiguous links in other articles than now point to Virtual machine, to point to either Virtual machine (runtime system) or Hypervisor instead. On the other hand, there is a continuum from p-code interpreters, to JIT JVMs, to emulators using dynamic recompilation, to paravirtualized or hardware-assisted hypervisors, which makes it somewhat difficult to draw a hard line between the two subjects.
 * 2) Do nearly the same as above, but name the article about the runtime system techbology Virtual machine and use a hatnote to direct readers to Virtualization.


 * As you've noted above, it's somewhat hard to draw a line between the two subjects, and that's why I find it better to have everything within the same article. Sure thing, the article layout could be much better. &mdash; Dsimic (talk &#124; contribs) 08:16, 2 July 2015 (UTC)


 * What do you mean by everything? There is simply too much material to discuss everything (including some of the more technical aspects mentioned above) in one article. If by everything you mean "superficially mention the various kinds of things that have been called a 'virtual machine'" then that would be doable. But such an article is going to look a lot different from what's here currently. —Ruud 08:25, 2 July 2015 (UTC)


 * I apologize for using such an imprecise word. IMHO, the article should semi-briefly describe various approaches that create virtual machines of different kinds, something similar to what's described in the first chapter of Virtual Machines: Versatile Platforms for Systems and Processes. &mdash; Dsimic (talk &#124; contribs) 08:31, 2 July 2015 (UTC)


 * Okay. If Nils wants to create a new article High-level language virtual machine/Virtual machine (runtime system), I would support that. If you want to see this article give an overview over various kinds of virtual machines, I think that would be good as well. I don't think the two are mutually exclusive in any way. —Ruud 08:48, 2 July 2015 (UTC)


 * Thanks for thoughtful discussion, and apologies for delayed response.
 * Per Ruud's suggestion, writing Virtual machine (runtime system), putting a hatnote, and copying appropriate information (about JVM etc.) to it seems consensus, as that's a discrete enough topic, and VM is the standard term, ambiguously enough (linking to p-code, as Peter Flass notes).
 * After that I'll see about what info is duplicated and suggest edits (discussing with Dsimic) to provide sufficient overview/context on main page w/o getting into too many weeds; as Ruud notes (and Kvng does about app virtualization).
 * Sounds good?
 * —Nils von Barth (nbarth) (talk) 04:55, 6 July 2015 (UTC)


 * No worries about the delayed response. Sounds good to me, though IMHO "High-level language virtual machine" might be slightly better as the new article title. &mdash; Dsimic (talk &#124; contribs) 11:38, 6 July 2015 (UTC)

First process virtual machine
It appears that the guidance system of the Apollo spacecraft Lunar Module has a byte code interpreter. Would this move the date of first VM a little bit back?

Hardware virtualization disaster recovery
Hi.

Do we really need the "Hardware virtualization disaster recovery" section? It looks like overkill for this article that is supposed to provide an overview only.

Best regards, Codename Lisa (talk) 08:13, 4 September 2016 (UTC)

"Process virtual machines"
Back in 2015, "mistakenly deleted" the contents of the "Process virtual machines" section in this edit; I guess they didn't know how to revert their edit, so they just left an apology. The remaining empty-except-for-the-apology section was presumably deleted in a later edit.

That section is pointed to by pages such as Java Virtual Machine, and possibly by other pages, so I put it back.

Whether that's the right solution is another matter; see the discussion in "Talk:Virtual machine". Guy Harris (talk) 19:23, 21 November 2017 (UTC)


 * It's also linked to by Process virtual machine, which is, in turn, linked from several pages, including .NET Framework and Android (operating system). Guy Harris (talk) 19:33, 21 November 2017 (UTC)


 * The same concept is also discussed by bytecode and p-code machine; they just happened to be used before people started calling the "machines" for which those were the instruction set "virtual machines".


 * Perhaps we should figure out what to do with bytecode and p-code machine - merge them? - and then merge the "Process virtual machines" section into one of those pages, redirect process virtual machine there, and give this page a hatnote directing there. Guy Harris (talk) 21:45, 21 November 2017 (UTC)