Hi, Ulli! It is a great pleasure to see you here. I've followed your VMTN posts over the years with great interest. And, like many folks at VMware, I am a big fan of sanbarrow.com. The topi...
See more...
Hi, Ulli! It is a great pleasure to see you here. I've followed your VMTN posts over the years with great interest. And, like many folks at VMware, I am a big fan of sanbarrow.com. The topic you raise has been of personal interest to me for all my years at VMware, and even longer: I was a VMware customer before I was an employee. I've participated in many internal discussions on the subject, some sparked by your own posts, and some sparked by our training customers. I will share my thoughts on the subject here. For the benefit of other readers, let me explain the issue Ulli raises. VMware publishes no official, centralized table of all the parameters one may place in a .vmx file, which is the file that defines a virtual machine. VMware also does not provide some other kinds of interesting technical documentation. Some people outside VMware, such as Ulli, have maintained volunteer websites documenting what they have discovered and learned from others. It is reasonable to ask why VMware does not take on this job itself. Although you phrased your inquiry in the form of a question, Ulli, I realize that you want not answers but action. You want VMware to change its behavior. My response will probably not satisfy you, because I have come to the conclusion that VMware's stance is, in general, the least bad of all the alternatives. Furthermore, I can speak officially only on behalf of VMware's Customer Education program. Although I hope you'll find it interesting, this note must be considered one man's opinion, not a response on behalf of VMware as a whole. Like Microsoft and Oracle, VMware is a proprietary, closed-source software company. Every closed-source software product consists of two parts: implementation and interface. The difference between the two parts is ultimately related to the agreement between the software company and its customers. The interface of the software product is all those parts that are documented; on which the company will accept support incidents; and that the company can reasonably be expected not to change in a surprising way. An example of this last criterion: imagine that, in Office 2008 Service Pack 3, Microsoft quietly dropped support for Rich Text Format files. Everyone would be very angry. But if they renamed one of the run-time libraries that make up Office, that would at least be fair, although annoying to people who use those .DLLs in a creative way. What kinds of file Office opens is part of its interface, but what libraries compose it is part of its implementation. In a closed-source product, everything that isn't interface is implementation. In a pure open-source product like Emacs or the GNU C compiler, there is no distinction between interface and implementation, because all parts of the product can be inspected and modified by users. And, conversely, Richard Stallman has no obligation to help you if you encounter a problem. Closed-source companies must decide what parts of their products are implementation and which are interface. This is ultimately an economic decision. Marking a feature as interface is tantamount to making promises to customers, morally if not legally. The company must document the feature, accept support calls on it, and preserve its stability across at least point releases, and probably minor releases too. All the costs to fulfill those promises must ultimately be paid for either by customers or by stockholders. I have watched VMware's management of the contents of the .vmx file over the years, because our training customers ask us the same questions Ulli does. Here is what I have observed: for VMware, the .vmx file is interface, not implementation, except in opportunistically chosen cases. Our customers generally have the right to demand that they be able to use their VMware product to do what it's documented to do without editing any .vmx files. (In the case of VMware Player, that statement is trivially true, because creating or reconfiguring virtual machines is not among that product's documented features.) I did say "...except in opportunistically chosen cases." An example: when ESX Server 2.0 came out, the company found that the most rapid, cost-effective way to help customers who were running Terminal Services workloads in virtual machines, and still ship that product on time, was to ask them to add workload.TerminalServices = "TRUE" to their .vmx files. Later versions of the user interface made manually editing the .vmx file unnecessary, and ESX Server 2.5 made using any special flag at all for Terminal Services workloads unnecessary. But, for a while, workload.TerminalServices = "TRUE" graduated from implementation to interface. In general, though, the .vmx file is interface, not implementation. VMware may change the meaning of .vmx file parameters without notice between product version x.y.z and x.y.z+1, although that behavior would certainly be out of character (and it'd take me by surprise!). And VMware does not accept generally support cases concerning manual edits to .vmx files--unless, of course, they're intended to address a situation like that workload.TerminalServices = "TRUE" issue from the old days. Workstation, Player, Server, ESX Server, VirtualCenter, Fusion... all these products ship with helper binaries like vnetlib.exe. Some are documented, and some are not. The ones that are documented are the ones VMware has chosen to treat as interface. For example, on the ESX Server 3.5 box I have here, I can type man vmkfstools and get a nice Unix-style manual page on everything I can do with this command. But there are plenty of other vm* commands in /usr/bin that have no man pages. The lack of man pages is VMware's way of telling me I should not bet my business on the continued existence of this command from one release to the next. You might reasonably ask: "Why does there have to be such a sharp line between implementation and interface? Why not a third category? Why can't, for example, VMware publish documentation on, say, .vmx file contents or helper commands, with a disclaimer saying that this could change at any time? That way, people could use it for whatever purposes they liked, but they have been adequately warned that it could change." That's a good idea, but its costs have to be weighed against its benefits. Many customers would say, "What's the point of documentation I can't rely on for more than a point release at a time? I would rather see VMware spend its money on improving the documentation it already has! Or improving the products themselves! Or hurrying up and releasing a version of the products localized into my language, because I am tired of using my English dictionary with the product! Or...." These customers have a good point, and it applies particularly well to .vmx file contents. Every VMware product supports a somewhat different set of parameters, and each parameter has its own lifecycle of birth, usefulness, and then obsolescence (as with workload.TerminalServices). Accurately tracking them all would be doable, but far from free of cost. Other customers might say, "Never mind whatever disclaimers you and your lawyers compose! If I download the documentation from *.vmware.com, I expect to be able to rely on it." I'd find it hard to criticize a customer for this position. Anyway, thank you for indulging this very long post about my own personal opinion. To sum up: the current model can be annoying, not only for Ulli but also for VMware employees. (My own personal "pet peeve": keyboard.typematicMinDelay. My enhancement request to get that blessed as official is in the system.) But as long as VMware remains a closed-source company, it will have to divide its products between interface and implementation. And as long as some parts of VMware products are implementation, not interface, it'll be tough for VMware to spend resources on documenting those parts instead of better documenting the supported parts of the products.