summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@baserock.org>2012-10-26 16:25:44 +0000
committer <>2012-11-12 12:15:52 +0000
commit58ed4748338f9466599adfc8a9171280ed99e23f (patch)
tree02027d99ded4fb56a64aa9489ac2eb487e7858ab /doc
downloadVirtualBox-58ed4748338f9466599adfc8a9171280ed99e23f.tar.gz
Imported from /home/lorry/working-area/delta_VirtualBox/VirtualBox-4.2.4.tar.bz2.VirtualBox-4.2.4
Diffstat (limited to 'doc')
-rw-r--r--doc/License-gpl-2.0.html390
-rw-r--r--doc/License-gpl-2.0.rtf394
-rw-r--r--doc/License-gpl-2.0.txt379
-rw-r--r--doc/License-gpl-2.html353
-rw-r--r--doc/License-gpl-2.rtf356
-rw-r--r--doc/License-gpl-2.txt339
-rw-r--r--doc/ReadMe-OS2.txt149
-rw-r--r--doc/ReadMe-Solaris.txt51
-rw-r--r--doc/VBox-CodingGuidelines.cpp614
-rw-r--r--doc/VBox-MakefileGuidelines.cpp187
-rw-r--r--doc/VBox-doc.c185
-rw-r--r--doc/manual/Makefile.kmk751
-rw-r--r--doc/manual/common-formatcfg.xsl58
-rw-r--r--doc/manual/docbook-htmlhelp-formatcfg.xsl9
-rw-r--r--doc/manual/docbook2latex.xsl702
-rw-r--r--doc/manual/en_US/Makefile.kup0
-rw-r--r--doc/manual/en_US/SDKRef.xml4899
-rw-r--r--doc/manual/en_US/UserManual.xml77
-rw-r--r--doc/manual/en_US/images/clone-vm.pngbin0 -> 100972 bytes
-rw-r--r--doc/manual/en_US/images/create-vdi-1.pngbin0 -> 81293 bytes
-rw-r--r--doc/manual/en_US/images/create-vm-1.pngbin0 -> 78820 bytes
-rw-r--r--doc/manual/en_US/images/create-vm-2.pngbin0 -> 94345 bytes
-rw-r--r--doc/manual/en_US/images/ovf-import.pngbin0 -> 111985 bytes
-rw-r--r--doc/manual/en_US/images/seamless.pngbin0 -> 874877 bytes
-rw-r--r--doc/manual/en_US/images/snapshots-1.pngbin0 -> 152166 bytes
-rw-r--r--doc/manual/en_US/images/vbox-components.pngbin0 -> 183580 bytes
-rw-r--r--doc/manual/en_US/images/vbox-sdl.pngbin0 -> 955880 bytes
-rw-r--r--doc/manual/en_US/images/vboxlogo.pngbin0 -> 206625 bytes
-rw-r--r--doc/manual/en_US/images/virtual-disk-manager.pngbin0 -> 100098 bytes
-rw-r--r--doc/manual/en_US/images/virtual-disk-manager2.pngbin0 -> 115239 bytes
-rw-r--r--doc/manual/en_US/images/virtualbox-main-empty.pngbin0 -> 81467 bytes
-rw-r--r--doc/manual/en_US/images/virtualbox-main.pngbin0 -> 656931 bytes
-rw-r--r--doc/manual/en_US/images/vm-close.pngbin0 -> 24522 bytes
-rw-r--r--doc/manual/en_US/images/vm-hostkey.pngbin0 -> 33065 bytes
-rw-r--r--doc/manual/en_US/images/vm-settings-harddisk.pngbin0 -> 55406 bytes
-rw-r--r--doc/manual/en_US/images/vm-vista-running.pngbin0 -> 336122 bytes
-rw-r--r--doc/manual/en_US/user_AdvancedTopics.xml2404
-rw-r--r--doc/manual/en_US/user_BasicConcepts.xml1344
-rw-r--r--doc/manual/en_US/user_ChangeLog.xml22
-rw-r--r--doc/manual/en_US/user_Frontends.xml799
-rw-r--r--doc/manual/en_US/user_Glossary.xml496
-rw-r--r--doc/manual/en_US/user_GuestAdditions.xml1612
-rw-r--r--doc/manual/en_US/user_Installation.xml868
-rw-r--r--doc/manual/en_US/user_Introduction.xml1691
-rw-r--r--doc/manual/en_US/user_KnownIssues.xml305
-rw-r--r--doc/manual/en_US/user_Networking.xml873
-rw-r--r--doc/manual/en_US/user_PrivacyPolicy.xml60
-rw-r--r--doc/manual/en_US/user_Security.xml381
-rw-r--r--doc/manual/en_US/user_Storage.xml911
-rw-r--r--doc/manual/en_US/user_Technical.xml893
-rw-r--r--doc/manual/en_US/user_ThirdParty.xml2599
-rw-r--r--doc/manual/en_US/user_Troubleshooting.xml1441
-rw-r--r--doc/manual/en_US/user_VBoxManage.xml3578
-rw-r--r--doc/manual/en_US/user_VirtualBoxAPI.xml25
-rw-r--r--doc/manual/fr_FR/Makefile.kup0
-rw-r--r--doc/manual/fr_FR/SDKRef.xml4183
-rw-r--r--doc/manual/fr_FR/UserManual.xml77
-rw-r--r--doc/manual/fr_FR/images/clone-vm.pngbin0 -> 100972 bytes
-rw-r--r--doc/manual/fr_FR/images/create-vdi-1.pngbin0 -> 72077 bytes
-rw-r--r--doc/manual/fr_FR/images/create-vm-1.pngbin0 -> 53246 bytes
-rw-r--r--doc/manual/fr_FR/images/create-vm-2.pngbin0 -> 66660 bytes
-rw-r--r--doc/manual/fr_FR/images/ovf-import.pngbin0 -> 96228 bytes
-rw-r--r--doc/manual/fr_FR/images/seamless.pngbin0 -> 207487 bytes
-rw-r--r--doc/manual/fr_FR/images/snapshots-1.pngbin0 -> 108182 bytes
-rw-r--r--doc/manual/fr_FR/images/vbox-components.pngbin0 -> 183580 bytes
-rw-r--r--doc/manual/fr_FR/images/vbox-sdl.pngbin0 -> 955880 bytes
-rw-r--r--doc/manual/fr_FR/images/vboxlogo.pngbin0 -> 206625 bytes
-rw-r--r--doc/manual/fr_FR/images/virtual-disk-manager.pngbin0 -> 68575 bytes
-rw-r--r--doc/manual/fr_FR/images/virtual-disk-manager2.pngbin0 -> 73725 bytes
-rw-r--r--doc/manual/fr_FR/images/virtualbox-main-empty.pngbin0 -> 62920 bytes
-rw-r--r--doc/manual/fr_FR/images/virtualbox-main.pngbin0 -> 127820 bytes
-rw-r--r--doc/manual/fr_FR/images/vm-close.pngbin0 -> 22656 bytes
-rw-r--r--doc/manual/fr_FR/images/vm-hostkey.pngbin0 -> 59508 bytes
-rw-r--r--doc/manual/fr_FR/images/vm-settings-harddisk.pngbin0 -> 51037 bytes
-rw-r--r--doc/manual/fr_FR/images/vm-vista-running.pngbin0 -> 449452 bytes
-rw-r--r--doc/manual/fr_FR/user_AdvancedTopics.xml1761
-rw-r--r--doc/manual/fr_FR/user_BasicConcepts.xml1277
-rw-r--r--doc/manual/fr_FR/user_ChangeLog.xml22
-rw-r--r--doc/manual/fr_FR/user_Frontends.xml785
-rw-r--r--doc/manual/fr_FR/user_Glossary.xml496
-rw-r--r--doc/manual/fr_FR/user_GuestAdditions.xml1600
-rw-r--r--doc/manual/fr_FR/user_Installation.xml892
-rw-r--r--doc/manual/fr_FR/user_Introduction.xml1662
-rw-r--r--doc/manual/fr_FR/user_KnownIssues.xml252
-rw-r--r--doc/manual/fr_FR/user_Networking.xml797
-rw-r--r--doc/manual/fr_FR/user_PrivacyPolicy.xml60
-rw-r--r--doc/manual/fr_FR/user_Security.xml381
-rw-r--r--doc/manual/fr_FR/user_Storage.xml985
-rw-r--r--doc/manual/fr_FR/user_Technical.xml893
-rw-r--r--doc/manual/fr_FR/user_ThirdParty.xml2591
-rw-r--r--doc/manual/fr_FR/user_Troubleshooting.xml1314
-rw-r--r--doc/manual/fr_FR/user_VBoxManage.xml3381
-rw-r--r--doc/manual/fr_FR/user_VirtualBoxAPI.xml25
-rw-r--r--doc/manual/string.xsl1237
-rw-r--r--doc/manual/titlepage-htmlhelp.xml669
-rw-r--r--doc/manual/user_ChangeLogImpl.xml8784
-rw-r--r--doc/manual/xidl2docbook.xsl565
97 files changed, 64884 insertions, 0 deletions
diff --git a/doc/License-gpl-2.0.html b/doc/License-gpl-2.0.html
new file mode 100644
index 00000000..110052c4
--- /dev/null
+++ b/doc/License-gpl-2.0.html
@@ -0,0 +1,390 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<!-- Translation from RTF performed by UnRTF, version 0.20.1 -->
+<!-- document uses ANSI character set -->
+<!-- font table contains 8 fonts total -->
+<!-- creation date: -->
+<!-- revision date: -->
+<!-- last printed: -->
+<!-- comments: StarWriter -->
+</head>
+<body>Preliminary notes:<br>
+<br>
+1) The majority of code in the VirtualBox Open Source Edition (OSE) is<br>
+copyrighted by Oracle Corporation. This code is combined with third-party code<br>
+that was originally released under licenses which the Free Software Foundation<br>
+considers incompatible with the GPL, such as the Apache License 2.0, the OpenSSL<br>
+license, the Mozilla Public License (MPL) and the Slirp license. (Please see the<br>
+VirtualBox User Manual for a complete list of third-party code and their<br>
+licenses.) As a special exception to the terms and conditions of the GPL listed<br>
+below, Oracle gives you explicit permission to combine its GPL code contained in<br>
+VirtualBox OSE with third-party code under the aforementioned licenses. You may<br>
+copy and distribute such a combination provided that you adhere to the terms and<br>
+conditions of all of the GPL and the licenses of the third-party code; in<br>
+particular, you must include the source code of the entire combination insofar<br>
+as the GPL requires distribution of source code.<br>
+<br>
+2) The GPL listed below does not bind software which uses VirtualBox services by<br>
+merely linking to VirtualBox libraries so long as all VirtualBox interfaces used<br>
+by that software are multi-licensed. A VirtualBox interface is deemed<br>
+multi-licensed if it is declared in a VirtualBox header file that is licensed<br>
+under both the GPL version 2 (below) *and* the Common Development and<br>
+Distribution License Version 1.0 (CDDL), as it comes in the &quot;COPYING.CDDL&quot; file.<br>
+In other words, calling such a multi-licensed interface is merely considered<br>
+normal use of VirtualBox and does not turn the calling code into a derived work<br>
+of VirtualBox. In particular, this applies to code that wants to extend<br>
+VirtualBox by way of the Extension Pack mechanism declared in the ExtPack.h<br>
+header file.<br>
+<br>
+3) Whoever creates or distributes a derived work based on VirtualBox OSE is not<br>
+obligated to grant the above exceptions for such a version. The GPL allows for<br>
+releasing a modified version without the above exception; in addition, Oracle<br>
+hereby also allows you to release a modified version which carries forward these<br>
+exceptions.<br>
+<br>
+Oracle Corporation<br>
+<br>
+-------------------------------------------------------<br>
+<br>
+ GNU GENERAL PUBLIC LICENSE<br>
+ Version 2, June 1991<br>
+<br>
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,<br>
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA<br>
+ Everyone is permitted to copy and distribute verbatim copies<br>
+ of this license document, but changing it is not allowed.<br>
+<br>
+ Preamble<br>
+<br>
+ The licenses for most software are designed to take away your<br>
+freedom to share and change it. By contrast, the GNU General Public<br>
+License is intended to guarantee your freedom to share and change free<br>
+software--to make sure the software is free for all its users. This<br>
+General Public License applies to most of the Free Software<br>
+Foundation's software and to any other program whose authors commit to<br>
+using it. (Some other Free Software Foundation software is covered by<br>
+the GNU Lesser General Public License instead.) You can apply it to<br>
+your programs, too.<br>
+<br>
+ When we speak of free software, we are referring to freedom, not<br>
+price. Our General Public Licenses are designed to make sure that you<br>
+have the freedom to distribute copies of free software (and charge for<br>
+this service if you wish), that you receive source code or can get it<br>
+if you want it, that you can change the software or use pieces of it<br>
+in new free programs; and that you know you can do these things.<br>
+<br>
+ To protect your rights, we need to make restrictions that forbid<br>
+anyone to deny you these rights or to ask you to surrender the rights.<br>
+These restrictions translate to certain responsibilities for you if you<br>
+distribute copies of the software, or if you modify it.<br>
+<br>
+ For example, if you distribute copies of such a program, whether<br>
+gratis or for a fee, you must give the recipients all the rights that<br>
+you have. You must make sure that they, too, receive or can get the<br>
+source code. And you must show them these terms so they know their<br>
+rights.<br>
+<br>
+ We protect your rights with two steps: (1) copyright the software, and<br>
+(2) offer you this license which gives you legal permission to copy,<br>
+distribute and/or modify the software.<br>
+<br>
+ Also, for each author's protection and ours, we want to make certain<br>
+that everyone understands that there is no warranty for this free<br>
+software. If the software is modified by someone else and passed on, we<br>
+want its recipients to know that what they have is not the original, so<br>
+that any problems introduced by others will not reflect on the original<br>
+authors' reputations.<br>
+<br>
+ Finally, any free program is threatened constantly by software<br>
+patents. We wish to avoid the danger that redistributors of a free<br>
+program will individually obtain patent licenses, in effect making the<br>
+program proprietary. To prevent this, we have made it clear that any<br>
+patent must be licensed for everyone's free use or not licensed at all.<br>
+<br>
+ The precise terms and conditions for copying, distribution and<br>
+modification follow.<br>
+<br>
+ GNU GENERAL PUBLIC LICENSE<br>
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION<br>
+<br>
+ 0. This License applies to any program or other work which contains<br>
+a notice placed by the copyright holder saying it may be distributed<br>
+under the terms of this General Public License. The &quot;Program&quot;, below,<br>
+refers to any such program or work, and a &quot;work based on the Program&quot;<br>
+means either the Program or any derivative work under copyright law:<br>
+that is to say, a work containing the Program or a portion of it,<br>
+either verbatim or with modifications and/or translated into another<br>
+language. (Hereinafter, translation is included without limitation in<br>
+the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.<br>
+<br>
+Activities other than copying, distribution and modification are not<br>
+covered by this License; they are outside its scope. The act of<br>
+running the Program is not restricted, and the output from the Program<br>
+is covered only if its contents constitute a work based on the<br>
+Program (independent of having been made by running the Program).<br>
+Whether that is true depends on what the Program does.<br>
+<br>
+ 1. You may copy and distribute verbatim copies of the Program's<br>
+source code as you receive it, in any medium, provided that you<br>
+conspicuously and appropriately publish on each copy an appropriate<br>
+copyright notice and disclaimer of warranty; keep intact all the<br>
+notices that refer to this License and to the absence of any warranty;<br>
+and give any other recipients of the Program a copy of this License<br>
+along with the Program.<br>
+<br>
+You may charge a fee for the physical act of transferring a copy, and<br>
+you may at your option offer warranty protection in exchange for a fee.<br>
+<br>
+ 2. You may modify your copy or copies of the Program or any portion<br>
+of it, thus forming a work based on the Program, and copy and<br>
+distribute such modifications or work under the terms of Section 1<br>
+above, provided that you also meet all of these conditions:<br>
+<br>
+ a) You must cause the modified files to carry prominent notices<br>
+ stating that you changed the files and the date of any change.<br>
+<br>
+ b) You must cause any work that you distribute or publish, that in<br>
+ whole or in part contains or is derived from the Program or any<br>
+ part thereof, to be licensed as a whole at no charge to all third<br>
+ parties under the terms of this License.<br>
+<br>
+ c) If the modified program normally reads commands interactively<br>
+ when run, you must cause it, when started running for such<br>
+ interactive use in the most ordinary way, to print or display an<br>
+ announcement including an appropriate copyright notice and a<br>
+ notice that there is no warranty (or else, saying that you provide<br>
+ a warranty) and that users may redistribute the program under<br>
+ these conditions, and telling the user how to view a copy of this<br>
+ License. (Exception: if the Program itself is interactive but<br>
+ does not normally print such an announcement, your work based on<br>
+ the Program is not required to print an announcement.)<br>
+<br>
+These requirements apply to the modified work as a whole. If<br>
+identifiable sections of that work are not derived from the Program,<br>
+and can be reasonably considered independent and separate works in<br>
+themselves, then this License, and its terms, do not apply to those<br>
+sections when you distribute them as separate works. But when you<br>
+distribute the same sections as part of a whole which is a work based<br>
+on the Program, the distribution of the whole must be on the terms of<br>
+this License, whose permissions for other licensees extend to the<br>
+entire whole, and thus to each and every part regardless of who wrote it.<br>
+<br>
+Thus, it is not the intent of this section to claim rights or contest<br>
+your rights to work written entirely by you; rather, the intent is to<br>
+exercise the right to control the distribution of derivative or<br>
+collective works based on the Program.<br>
+<br>
+In addition, mere aggregation of another work not based on the Program<br>
+with the Program (or with a work based on the Program) on a volume of<br>
+a storage or distribution medium does not bring the other work under<br>
+the scope of this License.<br>
+<br>
+ 3. You may copy and distribute the Program (or a work based on it,<br>
+under Section 2) in object code or executable form under the terms of<br>
+Sections 1 and 2 above provided that you also do one of the following:<br>
+<br>
+ a) Accompany it with the complete corresponding machine-readable<br>
+ source code, which must be distributed under the terms of Sections<br>
+ 1 and 2 above on a medium customarily used for software interchange; or,<br>
+<br>
+ b) Accompany it with a written offer, valid for at least three<br>
+ years, to give any third party, for a charge no more than your<br>
+ cost of physically performing source distribution, a complete<br>
+ machine-readable copy of the corresponding source code, to be<br>
+ distributed under the terms of Sections 1 and 2 above on a medium<br>
+ customarily used for software interchange; or,<br>
+<br>
+ c) Accompany it with the information you received as to the offer<br>
+ to distribute corresponding source code. (This alternative is<br>
+ allowed only for noncommercial distribution and only if you<br>
+ received the program in object code or executable form with such<br>
+ an offer, in accord with Subsection b above.)<br>
+<br>
+The source code for a work means the preferred form of the work for<br>
+making modifications to it. For an executable work, complete source<br>
+code means all the source code for all modules it contains, plus any<br>
+associated interface definition files, plus the scripts used to<br>
+control compilation and installation of the executable. However, as a<br>
+special exception, the source code distributed need not include<br>
+anything that is normally distributed (in either source or binary<br>
+form) with the major components (compiler, kernel, and so on) of the<br>
+operating system on which the executable runs, unless that component<br>
+itself accompanies the executable.<br>
+<br>
+If distribution of executable or object code is made by offering<br>
+access to copy from a designated place, then offering equivalent<br>
+access to copy the source code from the same place counts as<br>
+distribution of the source code, even though third parties are not<br>
+compelled to copy the source along with the object code.<br>
+<br>
+ 4. You may not copy, modify, sublicense, or distribute the Program<br>
+except as expressly provided under this License. Any attempt<br>
+otherwise to copy, modify, sublicense or distribute the Program is<br>
+void, and will automatically terminate your rights under this License.<br>
+However, parties who have received copies, or rights, from you under<br>
+this License will not have their licenses terminated so long as such<br>
+parties remain in full compliance.<br>
+<br>
+ 5. You are not required to accept this License, since you have not<br>
+signed it. However, nothing else grants you permission to modify or<br>
+distribute the Program or its derivative works. These actions are<br>
+prohibited by law if you do not accept this License. Therefore, by<br>
+modifying or distributing the Program (or any work based on the<br>
+Program), you indicate your acceptance of this License to do so, and<br>
+all its terms and conditions for copying, distributing or modifying<br>
+the Program or works based on it.<br>
+<br>
+ 6. Each time you redistribute the Program (or any work based on the<br>
+Program), the recipient automatically receives a license from the<br>
+original licensor to copy, distribute or modify the Program subject to<br>
+these terms and conditions. You may not impose any further<br>
+restrictions on the recipients' exercise of the rights granted herein.<br>
+You are not responsible for enforcing compliance by third parties to<br>
+this License.<br>
+<br>
+ 7. If, as a consequence of a court judgment or allegation of patent<br>
+infringement or for any other reason (not limited to patent issues),<br>
+conditions are imposed on you (whether by court order, agreement or<br>
+otherwise) that contradict the conditions of this License, they do not<br>
+excuse you from the conditions of this License. If you cannot<br>
+distribute so as to satisfy simultaneously your obligations under this<br>
+License and any other pertinent obligations, then as a consequence you<br>
+may not distribute the Program at all. For example, if a patent<br>
+license would not permit royalty-free redistribution of the Program by<br>
+all those who receive copies directly or indirectly through you, then<br>
+the only way you could satisfy both it and this License would be to<br>
+refrain entirely from distribution of the Program.<br>
+<br>
+If any portion of this section is held invalid or unenforceable under<br>
+any particular circumstance, the balance of the section is intended to<br>
+apply and the section as a whole is intended to apply in other<br>
+circumstances.<br>
+<br>
+It is not the purpose of this section to induce you to infringe any<br>
+patents or other property right claims or to contest validity of any<br>
+such claims; this section has the sole purpose of protecting the<br>
+integrity of the free software distribution system, which is<br>
+implemented by public license practices. Many people have made<br>
+generous contributions to the wide range of software distributed<br>
+through that system in reliance on consistent application of that<br>
+system; it is up to the author/donor to decide if he or she is willing<br>
+to distribute software through any other system and a licensee cannot<br>
+impose that choice.<br>
+<br>
+This section is intended to make thoroughly clear what is believed to<br>
+be a consequence of the rest of this License.<br>
+<br>
+ 8. If the distribution and/or use of the Program is restricted in<br>
+certain countries either by patents or by copyrighted interfaces, the<br>
+original copyright holder who places the Program under this License<br>
+may add an explicit geographical distribution limitation excluding<br>
+those countries, so that distribution is permitted only in or among<br>
+countries not thus excluded. In such case, this License incorporates<br>
+the limitation as if written in the body of this License.<br>
+<br>
+ 9. The Free Software Foundation may publish revised and/or new versions<br>
+of the General Public License from time to time. Such new versions will<br>
+be similar in spirit to the present version, but may differ in detail to<br>
+address new problems or concerns.<br>
+<br>
+Each version is given a distinguishing version number. If the Program<br>
+specifies a version number of this License which applies to it and &quot;any<br>
+later version&quot;, you have the option of following the terms and conditions<br>
+either of that version or of any later version published by the Free<br>
+Software Foundation. If the Program does not specify a version number of<br>
+this License, you may choose any version ever published by the Free Software<br>
+Foundation.<br>
+<br>
+ 10. If you wish to incorporate parts of the Program into other free<br>
+programs whose distribution conditions are different, write to the author<br>
+to ask for permission. For software which is copyrighted by the Free<br>
+Software Foundation, write to the Free Software Foundation; we sometimes<br>
+make exceptions for this. Our decision will be guided by the two goals<br>
+of preserving the free status of all derivatives of our free software and<br>
+of promoting the sharing and reuse of software generally.<br>
+<br>
+ NO WARRANTY<br>
+<br>
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY<br>
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN<br>
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES<br>
+PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED<br>
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF<br>
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS<br>
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE<br>
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,<br>
+REPAIR OR CORRECTION.<br>
+<br>
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING<br>
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR<br>
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,<br>
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING<br>
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED<br>
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY<br>
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER<br>
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE<br>
+POSSIBILITY OF SUCH DAMAGES.<br>
+<br>
+ END OF TERMS AND CONDITIONS<br>
+<br>
+ How to Apply These Terms to Your New Programs<br>
+<br>
+ If you develop a new program, and you want it to be of the greatest<br>
+possible use to the public, the best way to achieve this is to make it<br>
+free software which everyone can redistribute and change under these terms.<br>
+<br>
+ To do so, attach the following notices to the program. It is safest<br>
+to attach them to the start of each source file to most effectively<br>
+convey the exclusion of warranty; and each file should have at least<br>
+the &quot;copyright&quot; line and a pointer to where the full notice is found.<br>
+<br>
+ &lt;one line to give the program's name and a brief idea of what it does.&gt;<br>
+ Copyright (C) &lt;year&gt; &lt;name of author&gt;<br>
+<br>
+ This program is free software; you can redistribute it and/or modify<br>
+ it under the terms of the GNU General Public License as published by<br>
+ the Free Software Foundation; either version 2 of the License, or<br>
+ (at your option) any later version.<br>
+<br>
+ This program is distributed in the hope that it will be useful,<br>
+ but WITHOUT ANY WARRANTY; without even the implied warranty of<br>
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the<br>
+ GNU General Public License for more details.<br>
+<br>
+ You should have received a copy of the GNU General Public License along<br>
+ with this program; if not, write to the Free Software Foundation, Inc.,<br>
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.<br>
+<br>
+Also add information on how to contact you by electronic and paper mail.<br>
+<br>
+If the program is interactive, make it output a short notice like this<br>
+when it starts in an interactive mode:<br>
+<br>
+ Gnomovision version 69, Copyright (C) year name of author<br>
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.<br>
+ This is free software, and you are welcome to redistribute it<br>
+ under certain conditions; type `show c' for details.<br>
+<br>
+The hypothetical commands `show w' and `show c' should show the appropriate<br>
+parts of the General Public License. Of course, the commands you use may<br>
+be called something other than `show w' and `show c'; they could even be<br>
+mouse-clicks or menu items--whatever suits your program.<br>
+<br>
+You should also get your employer (if you work as a programmer) or your<br>
+school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if<br>
+necessary. Here is a sample; alter the names:<br>
+<br>
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program<br>
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.<br>
+<br>
+ &lt;signature of Ty Coon&gt;, 1 April 1989<br>
+ Ty Coon, President of Vice<br>
+<br>
+This General Public License does not permit incorporating your program into<br>
+proprietary programs. If your program is a subroutine library, you may<br>
+consider it more useful to permit linking proprietary applications with the<br>
+library. If this is what you want to do, use the GNU Lesser General<br>
+Public License instead of this License.<br>
+</body>
+</html>
diff --git a/doc/License-gpl-2.0.rtf b/doc/License-gpl-2.0.rtf
new file mode 100644
index 00000000..800d6de1
--- /dev/null
+++ b/doc/License-gpl-2.0.rtf
@@ -0,0 +1,394 @@
+{\rtf1\ansi\deff1\adeflang1025
+{\fonttbl{\f0\froman\fprq2\fcharset128 Times New Roman;}{\f1\froman\fprq2\fcharset0 Times New Roman;}{\f2\fswiss\fprq2\fcharset0 Bitstream Vera Sans;}{\f3\fnil\fprq0\fcharset128 Palatino Linotype;}{\f4\froman\fprq2\fcharset0 Times New Roman;}{\f5\fswiss\fprq2\fcharset0 Arial;}{\f6\fmodern\fprq1\fcharset0 Bitstream Vera Sans Mono;}{\f7\fmodern\fprq1\fcharset0 Bitstream Vera Sans;}}
+{\colortbl;\red0\green0\blue0;\red128\green128\blue128;}
+{\stylesheet{\s1\rtlch\afs24\lang1081\ltrch\dbch\af2\langfe2052\hich\fs24\lang1031\loch\fs24\lang1031\snext1 Normal;}
+{\s2\sb240\sa120\keepn\rtlch\af5\afs28\lang1081\ltrch\dbch\af1\langfe2052\hich\f5\fs28\lang1031\loch\f5\fs28\lang1031\sbasedon1\snext3 Heading;}
+{\s3\sa120\rtlch\afs24\lang1081\ltrch\dbch\af2\langfe2052\hich\fs24\lang1031\loch\fs24\lang1031\sbasedon1\snext3 Body Text;}
+{\s4\sa120\rtlch\afs24\lang1081\ltrch\dbch\af2\langfe2052\hich\fs24\lang1031\loch\fs24\lang1031\sbasedon3\snext4 List;}
+{\s5\sb120\sa120\rtlch\afs24\lang1081\ai\ltrch\dbch\af2\langfe2052\hich\f3\fs24\lang1031\i\loch\f3\fs24\lang1031\i\sbasedon1\snext5 caption;}
+{\s6\rtlch\afs24\lang1081\ltrch\dbch\af2\langfe2052\hich\fs24\lang1031\loch\fs24\lang1031\sbasedon1\snext6 Index;}
+{\s7\sb120\sa120\rtlch\afs24\lang1081\ai\ltrch\dbch\af2\langfe2052\hich\fs24\lang1031\i\loch\fs24\lang1031\i\sbasedon1\snext7 caption;}
+{\s8\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031\sbasedon1\snext8 Preformatted Text;}
+}
+{\info{\creatim\yr0\mo0\dy0\hr0\min0}{\revtim\yr0\mo0\dy0\hr0\min0}{\printim\yr0\mo0\dy0\hr0\min0}{\comment StarWriter}{\vern3200}}\deftab709
+{\*\pgdsctbl
+{\pgdsc0\pgdscuse195\pgwsxn11906\pghsxn16838\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\pgdscnxt0 Standard;}}
+{\*\pgdscno0}\paperh16838\paperw11906\margl1134\margr1134\margt1134\margb1134\sectd\sbknone\pgwsxn11906\pghsxn16838\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\ftnbj\ftnstart1\ftnrstcont\ftnnar\aenddoc\aftnrstcont\aftnstart1\aftnnrlc
+\pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 {\*\bkmkstart __DdeLink__5_501511993}Preliminary notes:{\*\bkmkend }}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 1) The majority of code in the VirtualBox Open Source Edition (OSE) is}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 copyrighted by Oracle Corporation. This code is combined with third-party code}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 that was originally released under licenses which the Free Software Foundation}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 considers incompatible with the GPL, such as the Apache License 2.0, the OpenSSL}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 license, the Mozilla Public License (MPL) and the Slirp license. (Please see the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 VirtualBox User Manual for a complete list of third-party code and their}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 licenses.) As a special exception to the terms and conditions of the GPL listed}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 below, Oracle gives you explicit permission to combine its GPL code contained in}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 VirtualBox OSE with third-party code under the aforementioned licenses. You may}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 copy and distribute such a combination provided that you adhere to the terms and}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 conditions of all of the GPL and the licenses of the third-party code; in}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 particular, you must include the source code of the entire combination insofar}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 as the GPL requires distribution of source code.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 2) The GPL listed below does not bind software which uses VirtualBox services by}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 merely linking to VirtualBox libraries so long as all VirtualBox interfaces used}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 by that software are multi-licensed. A VirtualBox interface is deemed}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 multi-licensed if it is declared in a VirtualBox header file that is licensed}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 under both the GPL version 2 (below) *and* the Common Development and}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Distribution License Version 1.0 (CDDL), as it comes in the "COPYING.CDDL" file.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 In other words, calling such a multi-licensed interface is merely considered}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 normal use of VirtualBox and does not turn the calling code into a derived work}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 of VirtualBox. In particular, this applies to code that wants to extend}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 VirtualBox by way of the Extension Pack mechanism declared in the ExtPack.h}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 header file.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 3) Whoever creates or distributes a derived work based on VirtualBox OSE is not}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 obligated to grant the above exceptions for such a version. The GPL allows for}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 releasing a modified version without the above exception; in addition, Oracle}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 hereby also allows you to release a modified version which carries forward these}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 exceptions.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Oracle Corporation}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\*\bkmkstart __DdeLink__0_501511993}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 -------------------------------------------------------}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\*\bkmkend }
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 GNU GENERAL PUBLIC LICENSE}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Version 2, June 1991}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Copyright (C) 1989, 1991 Free Software Foundation, Inc.,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Everyone is permitted to copy and distribute verbatim copies}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 of this license document, but changing it is not allowed.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Preamble}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 The licenses for most software are designed to take away your}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 freedom to share and change it. By contrast, the GNU General Public}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 License is intended to guarantee your freedom to share and change free}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 software--to make sure the software is free for all its users. This}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 General Public License applies to most of the Free Software}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Foundation's software and to any other program whose authors commit to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 using it. (Some other Free Software Foundation software is covered by}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the GNU Lesser General Public License instead.) You can apply it to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 your programs, too.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 When we speak of free software, we are referring to freedom, not}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 price. Our General Public Licenses are designed to make sure that you}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 have the freedom to distribute copies of free software (and charge for}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 this service if you wish), that you receive source code or can get it}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 if you want it, that you can change the software or use pieces of it}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 in new free programs; and that you know you can do these things.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 To protect your rights, we need to make restrictions that forbid}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 anyone to deny you these rights or to ask you to surrender the rights.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 These restrictions translate to certain responsibilities for you if you}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute copies of the software, or if you modify it.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 For example, if you distribute copies of such a program, whether}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 gratis or for a fee, you must give the recipients all the rights that}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 you have. You must make sure that they, too, receive or can get the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 source code. And you must show them these terms so they know their}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 rights.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 We protect your rights with two steps: (1) copyright the software, and}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 (2) offer you this license which gives you legal permission to copy,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute and/or modify the software.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Also, for each author's protection and ours, we want to make certain}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 that everyone understands that there is no warranty for this free}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 software. If the software is modified by someone else and passed on, we}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 want its recipients to know that what they have is not the original, so}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 that any problems introduced by others will not reflect on the original}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 authors' reputations.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Finally, any free program is threatened constantly by software}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 patents. We wish to avoid the danger that redistributors of a free}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 program will individually obtain patent licenses, in effect making the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 program proprietary. To prevent this, we have made it clear that any}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 patent must be licensed for everyone's free use or not licensed at all.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 The precise terms and conditions for copying, distribution and}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 modification follow.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 GNU GENERAL PUBLIC LICENSE}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 0. This License applies to any program or other work which contains}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 a notice placed by the copyright holder saying it may be distributed}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 under the terms of this General Public License. The "Program", below,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 refers to any such program or work, and a "work based on the Program"}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 means either the Program or any derivative work under copyright law:}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 that is to say, a work containing the Program or a portion of it,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 either verbatim or with modifications and/or translated into another}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 language. (Hereinafter, translation is included without limitation in}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the term "modification".) Each licensee is addressed as "you".}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Activities other than copying, distribution and modification are not}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 covered by this License; they are outside its scope. The act of}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 running the Program is not restricted, and the output from the Program}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 is covered only if its contents constitute a work based on the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Program (independent of having been made by running the Program).}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Whether that is true depends on what the Program does.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 1. You may copy and distribute verbatim copies of the Program's}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 source code as you receive it, in any medium, provided that you}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 conspicuously and appropriately publish on each copy an appropriate}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 copyright notice and disclaimer of warranty; keep intact all the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 notices that refer to this License and to the absence of any warranty;}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 and give any other recipients of the Program a copy of this License}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 along with the Program.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 You may charge a fee for the physical act of transferring a copy, and}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 you may at your option offer warranty protection in exchange for a fee.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 2. You may modify your copy or copies of the Program or any portion}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 of it, thus forming a work based on the Program, and copy and}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute such modifications or work under the terms of Section 1}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 above, provided that you also meet all of these conditions:}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 a) You must cause the modified files to carry prominent notices}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 stating that you changed the files and the date of any change.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 b) You must cause any work that you distribute or publish, that in}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 whole or in part contains or is derived from the Program or any}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 part thereof, to be licensed as a whole at no charge to all third}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 parties under the terms of this License.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 c) If the modified program normally reads commands interactively}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 when run, you must cause it, when started running for such}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 interactive use in the most ordinary way, to print or display an}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 announcement including an appropriate copyright notice and a}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 notice that there is no warranty (or else, saying that you provide}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 a warranty) and that users may redistribute the program under}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 these conditions, and telling the user how to view a copy of this}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 License. (Exception: if the Program itself is interactive but}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 does not normally print such an announcement, your work based on}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the Program is not required to print an announcement.)}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 These requirements apply to the modified work as a whole. If}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 identifiable sections of that work are not derived from the Program,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 and can be reasonably considered independent and separate works in}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 themselves, then this License, and its terms, do not apply to those}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 sections when you distribute them as separate works. But when you}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute the same sections as part of a whole which is a work based}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 on the Program, the distribution of the whole must be on the terms of}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 this License, whose permissions for other licensees extend to the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 entire whole, and thus to each and every part regardless of who wrote it.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Thus, it is not the intent of this section to claim rights or contest}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 your rights to work written entirely by you; rather, the intent is to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 exercise the right to control the distribution of derivative or}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 collective works based on the Program.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 In addition, mere aggregation of another work not based on the Program}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 with the Program (or with a work based on the Program) on a volume of}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 a storage or distribution medium does not bring the other work under}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the scope of this License.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 3. You may copy and distribute the Program (or a work based on it,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 under Section 2) in object code or executable form under the terms of}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Sections 1 and 2 above provided that you also do one of the following:}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 a) Accompany it with the complete corresponding machine-readable}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 source code, which must be distributed under the terms of Sections}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 1 and 2 above on a medium customarily used for software interchange; or,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 b) Accompany it with a written offer, valid for at least three}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 years, to give any third party, for a charge no more than your}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 cost of physically performing source distribution, a complete}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 machine-readable copy of the corresponding source code, to be}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distributed under the terms of Sections 1 and 2 above on a medium}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 customarily used for software interchange; or,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 c) Accompany it with the information you received as to the offer}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 to distribute corresponding source code. (This alternative is}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 allowed only for noncommercial distribution and only if you}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 received the program in object code or executable form with such}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 an offer, in accord with Subsection b above.)}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 The source code for a work means the preferred form of the work for}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 making modifications to it. For an executable work, complete source}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 code means all the source code for all modules it contains, plus any}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 associated interface definition files, plus the scripts used to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 control compilation and installation of the executable. However, as a}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 special exception, the source code distributed need not include}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 anything that is normally distributed (in either source or binary}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 form) with the major components (compiler, kernel, and so on) of the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 operating system on which the executable runs, unless that component}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 itself accompanies the executable.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 If distribution of executable or object code is made by offering}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 access to copy from a designated place, then offering equivalent}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 access to copy the source code from the same place counts as}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribution of the source code, even though third parties are not}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 compelled to copy the source along with the object code.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 4. You may not copy, modify, sublicense, or distribute the Program}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 except as expressly provided under this License. Any attempt}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 otherwise to copy, modify, sublicense or distribute the Program is}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 void, and will automatically terminate your rights under this License.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 However, parties who have received copies, or rights, from you under}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 this License will not have their licenses terminated so long as such}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 parties remain in full compliance.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 5. You are not required to accept this License, since you have not}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 signed it. However, nothing else grants you permission to modify or}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute the Program or its derivative works. These actions are}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 prohibited by law if you do not accept this License. Therefore, by}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 modifying or distributing the Program (or any work based on the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Program), you indicate your acceptance of this License to do so, and}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 all its terms and conditions for copying, distributing or modifying}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the Program or works based on it.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 6. Each time you redistribute the Program (or any work based on the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Program), the recipient automatically receives a license from the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 original licensor to copy, distribute or modify the Program subject to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 these terms and conditions. You may not impose any further}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 restrictions on the recipients' exercise of the rights granted herein.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 You are not responsible for enforcing compliance by third parties to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 this License.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 7. If, as a consequence of a court judgment or allegation of patent}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 infringement or for any other reason (not limited to patent issues),}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 conditions are imposed on you (whether by court order, agreement or}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 otherwise) that contradict the conditions of this License, they do not}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 excuse you from the conditions of this License. If you cannot}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute so as to satisfy simultaneously your obligations under this}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 License and any other pertinent obligations, then as a consequence you}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 may not distribute the Program at all. For example, if a patent}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 license would not permit royalty-free redistribution of the Program by}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 all those who receive copies directly or indirectly through you, then}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the only way you could satisfy both it and this License would be to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 refrain entirely from distribution of the Program.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 If any portion of this section is held invalid or unenforceable under}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 any particular circumstance, the balance of the section is intended to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 apply and the section as a whole is intended to apply in other}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 circumstances.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 It is not the purpose of this section to induce you to infringe any}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 patents or other property right claims or to contest validity of any}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 such claims; this section has the sole purpose of protecting the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 integrity of the free software distribution system, which is}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 implemented by public license practices. Many people have made}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 generous contributions to the wide range of software distributed}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 through that system in reliance on consistent application of that}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 system; it is up to the author/donor to decide if he or she is willing}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 to distribute software through any other system and a licensee cannot}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 impose that choice.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 This section is intended to make thoroughly clear what is believed to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 be a consequence of the rest of this License.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 8. If the distribution and/or use of the Program is restricted in}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 certain countries either by patents or by copyrighted interfaces, the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 original copyright holder who places the Program under this License}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 may add an explicit geographical distribution limitation excluding}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 those countries, so that distribution is permitted only in or among}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 countries not thus excluded. In such case, this License incorporates}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the limitation as if written in the body of this License.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 9. The Free Software Foundation may publish revised and/or new versions}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 of the General Public License from time to time. Such new versions will}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 be similar in spirit to the present version, but may differ in detail to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 address new problems or concerns.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Each version is given a distinguishing version number. If the Program}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 specifies a version number of this License which applies to it and "any}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 later version", you have the option of following the terms and conditions}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 either of that version or of any later version published by the Free}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Software Foundation. If the Program does not specify a version number of}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 this License, you may choose any version ever published by the Free Software}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Foundation.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 10. If you wish to incorporate parts of the Program into other free}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 programs whose distribution conditions are different, write to the author}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 to ask for permission. For software which is copyrighted by the Free}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Software Foundation, write to the Free Software Foundation; we sometimes}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 make exceptions for this. Our decision will be guided by the two goals}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 of preserving the free status of all derivatives of our free software and}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 of promoting the sharing and reuse of software generally.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 NO WARRANTY}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 REPAIR OR CORRECTION.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 POSSIBILITY OF SUCH DAMAGES.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 END OF TERMS AND CONDITIONS}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 How to Apply These Terms to Your New Programs}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 If you develop a new program, and you want it to be of the greatest}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 possible use to the public, the best way to achieve this is to make it}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 free software which everyone can redistribute and change under these terms.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 To do so, attach the following notices to the program. It is safest}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 to attach them to the start of each source file to most effectively}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 convey the exclusion of warranty; and each file should have at least}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the "copyright" line and a pointer to where the full notice is found.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 <one line to give the program's name and a brief idea of what it does.>}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Copyright (C) <year> <name of author>}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 This program is free software; you can redistribute it and/or modify}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 it under the terms of the GNU General Public License as published by}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the Free Software Foundation; either version 2 of the License, or}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 (at your option) any later version.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 This program is distributed in the hope that it will be useful,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 but WITHOUT ANY WARRANTY; without even the implied warranty of}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 GNU General Public License for more details.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 You should have received a copy of the GNU General Public License along}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 with this program; if not, write to the Free Software Foundation, Inc.,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Also add information on how to contact you by electronic and paper mail.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 If the program is interactive, make it output a short notice like this}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 when it starts in an interactive mode:}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Gnomovision version 69, Copyright (C) year name of author}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 This is free software, and you are welcome to redistribute it}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 under certain conditions; type `show c' for details.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 The hypothetical commands `show w' and `show c' should show the appropriate}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 parts of the General Public License. Of course, the commands you use may}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 be called something other than `show w' and `show c'; they could even be}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 mouse-clicks or menu items--whatever suits your program.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 You should also get your employer (if you work as a programmer) or your}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 school, if any, to sign a "copyright disclaimer" for the program, if}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 necessary. Here is a sample; alter the names:}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Yoyodyne, Inc., hereby disclaims all copyright interest in the program}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 `Gnomovision' (which makes passes at compilers) written by James Hacker.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 <signature of Ty Coon>, 1 April 1989}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Ty Coon, President of Vice}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 This General Public License does not permit incorporating your program into}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 proprietary programs. If your program is a subroutine library, you may}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 consider it more useful to permit linking proprietary applications with the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 library. If this is what you want to do, use the GNU Lesser General}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Public License instead of this License.}
+\par } \ No newline at end of file
diff --git a/doc/License-gpl-2.0.txt b/doc/License-gpl-2.0.txt
new file mode 100644
index 00000000..7904835d
--- /dev/null
+++ b/doc/License-gpl-2.0.txt
@@ -0,0 +1,379 @@
+Preliminary notes:
+
+1) The majority of code in the VirtualBox Open Source Edition (OSE) is
+copyrighted by Oracle Corporation. This code is combined with third-party code
+that was originally released under licenses which the Free Software Foundation
+considers incompatible with the GPL, such as the Apache License 2.0, the OpenSSL
+license, the Mozilla Public License (MPL) and the Slirp license. (Please see the
+VirtualBox User Manual for a complete list of third-party code and their
+licenses.) As a special exception to the terms and conditions of the GPL listed
+below, Oracle gives you explicit permission to combine its GPL code contained in
+VirtualBox OSE with third-party code under the aforementioned licenses. You may
+copy and distribute such a combination provided that you adhere to the terms and
+conditions of all of the GPL and the licenses of the third-party code; in
+particular, you must include the source code of the entire combination insofar
+as the GPL requires distribution of source code.
+
+2) The GPL listed below does not bind software which uses VirtualBox services by
+merely linking to VirtualBox libraries so long as all VirtualBox interfaces used
+by that software are multi-licensed. A VirtualBox interface is deemed
+multi-licensed if it is declared in a VirtualBox header file that is licensed
+under both the GPL version 2 (below) *and* the Common Development and
+Distribution License Version 1.0 (CDDL), as it comes in the "COPYING.CDDL" file.
+In other words, calling such a multi-licensed interface is merely considered
+normal use of VirtualBox and does not turn the calling code into a derived work
+of VirtualBox. In particular, this applies to code that wants to extend
+VirtualBox by way of the Extension Pack mechanism declared in the ExtPack.h
+header file.
+
+3) Whoever creates or distributes a derived work based on VirtualBox OSE is not
+obligated to grant the above exceptions for such a version. The GPL allows for
+releasing a modified version without the above exception; in addition, Oracle
+hereby also allows you to release a modified version which carries forward these
+exceptions.
+
+Oracle Corporation
+
+---
+
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/doc/License-gpl-2.html b/doc/License-gpl-2.html
new file mode 100644
index 00000000..ae5e2d0e
--- /dev/null
+++ b/doc/License-gpl-2.html
@@ -0,0 +1,353 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<!-- Translation from RTF performed by UnRTF, version 0.20.1 -->
+<!-- document uses ANSI character set -->
+<!-- font table contains 8 fonts total -->
+<!-- creation date: -->
+<!-- revision date: -->
+<!-- last printed: -->
+<!-- comments: StarWriter -->
+</head>
+<body>
+ GNU GENERAL PUBLIC LICENSE<br>
+ Version 2, June 1991<br>
+<br>
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,<br>
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA<br>
+ Everyone is permitted to copy and distribute verbatim copies<br>
+ of this license document, but changing it is not allowed.<br>
+<br>
+ Preamble<br>
+<br>
+ The licenses for most software are designed to take away your<br>
+freedom to share and change it. By contrast, the GNU General Public<br>
+License is intended to guarantee your freedom to share and change free<br>
+software--to make sure the software is free for all its users. This<br>
+General Public License applies to most of the Free Software<br>
+Foundation's software and to any other program whose authors commit to<br>
+using it. (Some other Free Software Foundation software is covered by<br>
+the GNU Lesser General Public License instead.) You can apply it to<br>
+your programs, too.<br>
+<br>
+ When we speak of free software, we are referring to freedom, not<br>
+price. Our General Public Licenses are designed to make sure that you<br>
+have the freedom to distribute copies of free software (and charge for<br>
+this service if you wish), that you receive source code or can get it<br>
+if you want it, that you can change the software or use pieces of it<br>
+in new free programs; and that you know you can do these things.<br>
+<br>
+ To protect your rights, we need to make restrictions that forbid<br>
+anyone to deny you these rights or to ask you to surrender the rights.<br>
+These restrictions translate to certain responsibilities for you if you<br>
+distribute copies of the software, or if you modify it.<br>
+<br>
+ For example, if you distribute copies of such a program, whether<br>
+gratis or for a fee, you must give the recipients all the rights that<br>
+you have. You must make sure that they, too, receive or can get the<br>
+source code. And you must show them these terms so they know their<br>
+rights.<br>
+<br>
+ We protect your rights with two steps: (1) copyright the software, and<br>
+(2) offer you this license which gives you legal permission to copy,<br>
+distribute and/or modify the software.<br>
+<br>
+ Also, for each author's protection and ours, we want to make certain<br>
+that everyone understands that there is no warranty for this free<br>
+software. If the software is modified by someone else and passed on, we<br>
+want its recipients to know that what they have is not the original, so<br>
+that any problems introduced by others will not reflect on the original<br>
+authors' reputations.<br>
+<br>
+ Finally, any free program is threatened constantly by software<br>
+patents. We wish to avoid the danger that redistributors of a free<br>
+program will individually obtain patent licenses, in effect making the<br>
+program proprietary. To prevent this, we have made it clear that any<br>
+patent must be licensed for everyone's free use or not licensed at all.<br>
+<br>
+ The precise terms and conditions for copying, distribution and<br>
+modification follow.<br>
+<br>
+ GNU GENERAL PUBLIC LICENSE<br>
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION<br>
+<br>
+ 0. This License applies to any program or other work which contains<br>
+a notice placed by the copyright holder saying it may be distributed<br>
+under the terms of this General Public License. The &quot;Program&quot;, below,<br>
+refers to any such program or work, and a &quot;work based on the Program&quot;<br>
+means either the Program or any derivative work under copyright law:<br>
+that is to say, a work containing the Program or a portion of it,<br>
+either verbatim or with modifications and/or translated into another<br>
+language. (Hereinafter, translation is included without limitation in<br>
+the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.<br>
+<br>
+Activities other than copying, distribution and modification are not<br>
+covered by this License; they are outside its scope. The act of<br>
+running the Program is not restricted, and the output from the Program<br>
+is covered only if its contents constitute a work based on the<br>
+Program (independent of having been made by running the Program).<br>
+Whether that is true depends on what the Program does.<br>
+<br>
+ 1. You may copy and distribute verbatim copies of the Program's<br>
+source code as you receive it, in any medium, provided that you<br>
+conspicuously and appropriately publish on each copy an appropriate<br>
+copyright notice and disclaimer of warranty; keep intact all the<br>
+notices that refer to this License and to the absence of any warranty;<br>
+and give any other recipients of the Program a copy of this License<br>
+along with the Program.<br>
+<br>
+You may charge a fee for the physical act of transferring a copy, and<br>
+you may at your option offer warranty protection in exchange for a fee.<br>
+<br>
+ 2. You may modify your copy or copies of the Program or any portion<br>
+of it, thus forming a work based on the Program, and copy and<br>
+distribute such modifications or work under the terms of Section 1<br>
+above, provided that you also meet all of these conditions:<br>
+<br>
+ a) You must cause the modified files to carry prominent notices<br>
+ stating that you changed the files and the date of any change.<br>
+<br>
+ b) You must cause any work that you distribute or publish, that in<br>
+ whole or in part contains or is derived from the Program or any<br>
+ part thereof, to be licensed as a whole at no charge to all third<br>
+ parties under the terms of this License.<br>
+<br>
+ c) If the modified program normally reads commands interactively<br>
+ when run, you must cause it, when started running for such<br>
+ interactive use in the most ordinary way, to print or display an<br>
+ announcement including an appropriate copyright notice and a<br>
+ notice that there is no warranty (or else, saying that you provide<br>
+ a warranty) and that users may redistribute the program under<br>
+ these conditions, and telling the user how to view a copy of this<br>
+ License. (Exception: if the Program itself is interactive but<br>
+ does not normally print such an announcement, your work based on<br>
+ the Program is not required to print an announcement.)<br>
+<br>
+These requirements apply to the modified work as a whole. If<br>
+identifiable sections of that work are not derived from the Program,<br>
+and can be reasonably considered independent and separate works in<br>
+themselves, then this License, and its terms, do not apply to those<br>
+sections when you distribute them as separate works. But when you<br>
+distribute the same sections as part of a whole which is a work based<br>
+on the Program, the distribution of the whole must be on the terms of<br>
+this License, whose permissions for other licensees extend to the<br>
+entire whole, and thus to each and every part regardless of who wrote it.<br>
+<br>
+Thus, it is not the intent of this section to claim rights or contest<br>
+your rights to work written entirely by you; rather, the intent is to<br>
+exercise the right to control the distribution of derivative or<br>
+collective works based on the Program.<br>
+<br>
+In addition, mere aggregation of another work not based on the Program<br>
+with the Program (or with a work based on the Program) on a volume of<br>
+a storage or distribution medium does not bring the other work under<br>
+the scope of this License.<br>
+<br>
+ 3. You may copy and distribute the Program (or a work based on it,<br>
+under Section 2) in object code or executable form under the terms of<br>
+Sections 1 and 2 above provided that you also do one of the following:<br>
+<br>
+ a) Accompany it with the complete corresponding machine-readable<br>
+ source code, which must be distributed under the terms of Sections<br>
+ 1 and 2 above on a medium customarily used for software interchange; or,<br>
+<br>
+ b) Accompany it with a written offer, valid for at least three<br>
+ years, to give any third party, for a charge no more than your<br>
+ cost of physically performing source distribution, a complete<br>
+ machine-readable copy of the corresponding source code, to be<br>
+ distributed under the terms of Sections 1 and 2 above on a medium<br>
+ customarily used for software interchange; or,<br>
+<br>
+ c) Accompany it with the information you received as to the offer<br>
+ to distribute corresponding source code. (This alternative is<br>
+ allowed only for noncommercial distribution and only if you<br>
+ received the program in object code or executable form with such<br>
+ an offer, in accord with Subsection b above.)<br>
+<br>
+The source code for a work means the preferred form of the work for<br>
+making modifications to it. For an executable work, complete source<br>
+code means all the source code for all modules it contains, plus any<br>
+associated interface definition files, plus the scripts used to<br>
+control compilation and installation of the executable. However, as a<br>
+special exception, the source code distributed need not include<br>
+anything that is normally distributed (in either source or binary<br>
+form) with the major components (compiler, kernel, and so on) of the<br>
+operating system on which the executable runs, unless that component<br>
+itself accompanies the executable.<br>
+<br>
+If distribution of executable or object code is made by offering<br>
+access to copy from a designated place, then offering equivalent<br>
+access to copy the source code from the same place counts as<br>
+distribution of the source code, even though third parties are not<br>
+compelled to copy the source along with the object code.<br>
+<br>
+ 4. You may not copy, modify, sublicense, or distribute the Program<br>
+except as expressly provided under this License. Any attempt<br>
+otherwise to copy, modify, sublicense or distribute the Program is<br>
+void, and will automatically terminate your rights under this License.<br>
+However, parties who have received copies, or rights, from you under<br>
+this License will not have their licenses terminated so long as such<br>
+parties remain in full compliance.<br>
+<br>
+ 5. You are not required to accept this License, since you have not<br>
+signed it. However, nothing else grants you permission to modify or<br>
+distribute the Program or its derivative works. These actions are<br>
+prohibited by law if you do not accept this License. Therefore, by<br>
+modifying or distributing the Program (or any work based on the<br>
+Program), you indicate your acceptance of this License to do so, and<br>
+all its terms and conditions for copying, distributing or modifying<br>
+the Program or works based on it.<br>
+<br>
+ 6. Each time you redistribute the Program (or any work based on the<br>
+Program), the recipient automatically receives a license from the<br>
+original licensor to copy, distribute or modify the Program subject to<br>
+these terms and conditions. You may not impose any further<br>
+restrictions on the recipients' exercise of the rights granted herein.<br>
+You are not responsible for enforcing compliance by third parties to<br>
+this License.<br>
+<br>
+ 7. If, as a consequence of a court judgment or allegation of patent<br>
+infringement or for any other reason (not limited to patent issues),<br>
+conditions are imposed on you (whether by court order, agreement or<br>
+otherwise) that contradict the conditions of this License, they do not<br>
+excuse you from the conditions of this License. If you cannot<br>
+distribute so as to satisfy simultaneously your obligations under this<br>
+License and any other pertinent obligations, then as a consequence you<br>
+may not distribute the Program at all. For example, if a patent<br>
+license would not permit royalty-free redistribution of the Program by<br>
+all those who receive copies directly or indirectly through you, then<br>
+the only way you could satisfy both it and this License would be to<br>
+refrain entirely from distribution of the Program.<br>
+<br>
+If any portion of this section is held invalid or unenforceable under<br>
+any particular circumstance, the balance of the section is intended to<br>
+apply and the section as a whole is intended to apply in other<br>
+circumstances.<br>
+<br>
+It is not the purpose of this section to induce you to infringe any<br>
+patents or other property right claims or to contest validity of any<br>
+such claims; this section has the sole purpose of protecting the<br>
+integrity of the free software distribution system, which is<br>
+implemented by public license practices. Many people have made<br>
+generous contributions to the wide range of software distributed<br>
+through that system in reliance on consistent application of that<br>
+system; it is up to the author/donor to decide if he or she is willing<br>
+to distribute software through any other system and a licensee cannot<br>
+impose that choice.<br>
+<br>
+This section is intended to make thoroughly clear what is believed to<br>
+be a consequence of the rest of this License.<br>
+<br>
+ 8. If the distribution and/or use of the Program is restricted in<br>
+certain countries either by patents or by copyrighted interfaces, the<br>
+original copyright holder who places the Program under this License<br>
+may add an explicit geographical distribution limitation excluding<br>
+those countries, so that distribution is permitted only in or among<br>
+countries not thus excluded. In such case, this License incorporates<br>
+the limitation as if written in the body of this License.<br>
+<br>
+ 9. The Free Software Foundation may publish revised and/or new versions<br>
+of the General Public License from time to time. Such new versions will<br>
+be similar in spirit to the present version, but may differ in detail to<br>
+address new problems or concerns.<br>
+<br>
+Each version is given a distinguishing version number. If the Program<br>
+specifies a version number of this License which applies to it and &quot;any<br>
+later version&quot;, you have the option of following the terms and conditions<br>
+either of that version or of any later version published by the Free<br>
+Software Foundation. If the Program does not specify a version number of<br>
+this License, you may choose any version ever published by the Free Software<br>
+Foundation.<br>
+<br>
+ 10. If you wish to incorporate parts of the Program into other free<br>
+programs whose distribution conditions are different, write to the author<br>
+to ask for permission. For software which is copyrighted by the Free<br>
+Software Foundation, write to the Free Software Foundation; we sometimes<br>
+make exceptions for this. Our decision will be guided by the two goals<br>
+of preserving the free status of all derivatives of our free software and<br>
+of promoting the sharing and reuse of software generally.<br>
+<br>
+ NO WARRANTY<br>
+<br>
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY<br>
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN<br>
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES<br>
+PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED<br>
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF<br>
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS<br>
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE<br>
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,<br>
+REPAIR OR CORRECTION.<br>
+<br>
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING<br>
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR<br>
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,<br>
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING<br>
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED<br>
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY<br>
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER<br>
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE<br>
+POSSIBILITY OF SUCH DAMAGES.<br>
+<br>
+ END OF TERMS AND CONDITIONS<br>
+<br>
+ How to Apply These Terms to Your New Programs<br>
+<br>
+ If you develop a new program, and you want it to be of the greatest<br>
+possible use to the public, the best way to achieve this is to make it<br>
+free software which everyone can redistribute and change under these terms.<br>
+<br>
+ To do so, attach the following notices to the program. It is safest<br>
+to attach them to the start of each source file to most effectively<br>
+convey the exclusion of warranty; and each file should have at least<br>
+the &quot;copyright&quot; line and a pointer to where the full notice is found.<br>
+<br>
+ &lt;one line to give the program's name and a brief idea of what it does.&gt;<br>
+ Copyright (C) &lt;year&gt; &lt;name of author&gt;<br>
+<br>
+ This program is free software; you can redistribute it and/or modify<br>
+ it under the terms of the GNU General Public License as published by<br>
+ the Free Software Foundation; either version 2 of the License, or<br>
+ (at your option) any later version.<br>
+<br>
+ This program is distributed in the hope that it will be useful,<br>
+ but WITHOUT ANY WARRANTY; without even the implied warranty of<br>
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the<br>
+ GNU General Public License for more details.<br>
+<br>
+ You should have received a copy of the GNU General Public License along<br>
+ with this program; if not, write to the Free Software Foundation, Inc.,<br>
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.<br>
+<br>
+Also add information on how to contact you by electronic and paper mail.<br>
+<br>
+If the program is interactive, make it output a short notice like this<br>
+when it starts in an interactive mode:<br>
+<br>
+ Gnomovision version 69, Copyright (C) year name of author<br>
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.<br>
+ This is free software, and you are welcome to redistribute it<br>
+ under certain conditions; type `show c' for details.<br>
+<br>
+The hypothetical commands `show w' and `show c' should show the appropriate<br>
+parts of the General Public License. Of course, the commands you use may<br>
+be called something other than `show w' and `show c'; they could even be<br>
+mouse-clicks or menu items--whatever suits your program.<br>
+<br>
+You should also get your employer (if you work as a programmer) or your<br>
+school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if<br>
+necessary. Here is a sample; alter the names:<br>
+<br>
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program<br>
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.<br>
+<br>
+ &lt;signature of Ty Coon&gt;, 1 April 1989<br>
+ Ty Coon, President of Vice<br>
+<br>
+This General Public License does not permit incorporating your program into<br>
+proprietary programs. If your program is a subroutine library, you may<br>
+consider it more useful to permit linking proprietary applications with the<br>
+library. If this is what you want to do, use the GNU Lesser General<br>
+Public License instead of this License.<br>
+</body>
+</html>
diff --git a/doc/License-gpl-2.rtf b/doc/License-gpl-2.rtf
new file mode 100644
index 00000000..a88a409a
--- /dev/null
+++ b/doc/License-gpl-2.rtf
@@ -0,0 +1,356 @@
+{\rtf1\ansi\deff1\adeflang1025
+{\fonttbl{\f0\froman\fprq2\fcharset128 Times New Roman;}{\f1\froman\fprq2\fcharset0 Times New Roman;}{\f2\fswiss\fprq2\fcharset0 Bitstream Vera Sans;}{\f3\fnil\fprq0\fcharset128 Palatino Linotype;}{\f4\froman\fprq2\fcharset0 Times New Roman;}{\f5\fswiss\fprq2\fcharset0 Arial;}{\f6\fmodern\fprq1\fcharset0 Bitstream Vera Sans Mono;}{\f7\fmodern\fprq1\fcharset0 Bitstream Vera Sans;}}
+{\colortbl;\red0\green0\blue0;\red128\green128\blue128;}
+{\stylesheet{\s1\rtlch\afs24\lang1081\ltrch\dbch\af2\langfe2052\hich\fs24\lang1031\loch\fs24\lang1031\snext1 Normal;}
+{\s2\sb240\sa120\keepn\rtlch\af5\afs28\lang1081\ltrch\dbch\af1\langfe2052\hich\f5\fs28\lang1031\loch\f5\fs28\lang1031\sbasedon1\snext3 Heading;}
+{\s3\sa120\rtlch\afs24\lang1081\ltrch\dbch\af2\langfe2052\hich\fs24\lang1031\loch\fs24\lang1031\sbasedon1\snext3 Body Text;}
+{\s4\sa120\rtlch\afs24\lang1081\ltrch\dbch\af2\langfe2052\hich\fs24\lang1031\loch\fs24\lang1031\sbasedon3\snext4 List;}
+{\s5\sb120\sa120\rtlch\afs24\lang1081\ai\ltrch\dbch\af2\langfe2052\hich\f3\fs24\lang1031\i\loch\f3\fs24\lang1031\i\sbasedon1\snext5 caption;}
+{\s6\rtlch\afs24\lang1081\ltrch\dbch\af2\langfe2052\hich\fs24\lang1031\loch\fs24\lang1031\sbasedon1\snext6 Index;}
+{\s7\sb120\sa120\rtlch\afs24\lang1081\ai\ltrch\dbch\af2\langfe2052\hich\fs24\lang1031\i\loch\fs24\lang1031\i\sbasedon1\snext7 caption;}
+{\s8\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031\sbasedon1\snext8 Preformatted Text;}
+}
+{\info{\creatim\yr0\mo0\dy0\hr0\min0}{\revtim\yr0\mo0\dy0\hr0\min0}{\printim\yr0\mo0\dy0\hr0\min0}{\comment StarWriter}{\vern3200}}\deftab709
+{\*\pgdsctbl
+{\pgdsc0\pgdscuse195\pgwsxn11906\pghsxn16838\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\pgdscnxt0 Standard;}}
+{\*\pgdscno0}\paperh16838\paperw11906\margl1134\margr1134\margt1134\margb1134\sectd\sbknone\pgwsxn11906\pghsxn16838\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\ftnbj\ftnstart1\ftnrstcont\ftnnar\aenddoc\aftnrstcont\aftnstart1\aftnnrlc
+\pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 GNU GENERAL PUBLIC LICENSE}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Version 2, June 1991}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Copyright (C) 1989, 1991 Free Software Foundation, Inc.,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Everyone is permitted to copy and distribute verbatim copies}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 of this license document, but changing it is not allowed.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Preamble}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 The licenses for most software are designed to take away your}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 freedom to share and change it. By contrast, the GNU General Public}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 License is intended to guarantee your freedom to share and change free}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 software--to make sure the software is free for all its users. This}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 General Public License applies to most of the Free Software}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Foundation's software and to any other program whose authors commit to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 using it. (Some other Free Software Foundation software is covered by}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the GNU Lesser General Public License instead.) You can apply it to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 your programs, too.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 When we speak of free software, we are referring to freedom, not}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 price. Our General Public Licenses are designed to make sure that you}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 have the freedom to distribute copies of free software (and charge for}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 this service if you wish), that you receive source code or can get it}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 if you want it, that you can change the software or use pieces of it}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 in new free programs; and that you know you can do these things.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 To protect your rights, we need to make restrictions that forbid}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 anyone to deny you these rights or to ask you to surrender the rights.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 These restrictions translate to certain responsibilities for you if you}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute copies of the software, or if you modify it.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 For example, if you distribute copies of such a program, whether}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 gratis or for a fee, you must give the recipients all the rights that}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 you have. You must make sure that they, too, receive or can get the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 source code. And you must show them these terms so they know their}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 rights.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 We protect your rights with two steps: (1) copyright the software, and}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 (2) offer you this license which gives you legal permission to copy,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute and/or modify the software.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Also, for each author's protection and ours, we want to make certain}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 that everyone understands that there is no warranty for this free}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 software. If the software is modified by someone else and passed on, we}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 want its recipients to know that what they have is not the original, so}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 that any problems introduced by others will not reflect on the original}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 authors' reputations.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Finally, any free program is threatened constantly by software}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 patents. We wish to avoid the danger that redistributors of a free}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 program will individually obtain patent licenses, in effect making the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 program proprietary. To prevent this, we have made it clear that any}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 patent must be licensed for everyone's free use or not licensed at all.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 The precise terms and conditions for copying, distribution and}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 modification follow.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 GNU GENERAL PUBLIC LICENSE}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 0. This License applies to any program or other work which contains}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 a notice placed by the copyright holder saying it may be distributed}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 under the terms of this General Public License. The "Program", below,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 refers to any such program or work, and a "work based on the Program"}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 means either the Program or any derivative work under copyright law:}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 that is to say, a work containing the Program or a portion of it,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 either verbatim or with modifications and/or translated into another}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 language. (Hereinafter, translation is included without limitation in}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the term "modification".) Each licensee is addressed as "you".}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Activities other than copying, distribution and modification are not}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 covered by this License; they are outside its scope. The act of}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 running the Program is not restricted, and the output from the Program}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 is covered only if its contents constitute a work based on the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Program (independent of having been made by running the Program).}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Whether that is true depends on what the Program does.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 1. You may copy and distribute verbatim copies of the Program's}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 source code as you receive it, in any medium, provided that you}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 conspicuously and appropriately publish on each copy an appropriate}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 copyright notice and disclaimer of warranty; keep intact all the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 notices that refer to this License and to the absence of any warranty;}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 and give any other recipients of the Program a copy of this License}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 along with the Program.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 You may charge a fee for the physical act of transferring a copy, and}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 you may at your option offer warranty protection in exchange for a fee.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 2. You may modify your copy or copies of the Program or any portion}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 of it, thus forming a work based on the Program, and copy and}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute such modifications or work under the terms of Section 1}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 above, provided that you also meet all of these conditions:}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 a) You must cause the modified files to carry prominent notices}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 stating that you changed the files and the date of any change.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 b) You must cause any work that you distribute or publish, that in}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 whole or in part contains or is derived from the Program or any}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 part thereof, to be licensed as a whole at no charge to all third}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 parties under the terms of this License.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 c) If the modified program normally reads commands interactively}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 when run, you must cause it, when started running for such}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 interactive use in the most ordinary way, to print or display an}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 announcement including an appropriate copyright notice and a}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 notice that there is no warranty (or else, saying that you provide}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 a warranty) and that users may redistribute the program under}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 these conditions, and telling the user how to view a copy of this}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 License. (Exception: if the Program itself is interactive but}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 does not normally print such an announcement, your work based on}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the Program is not required to print an announcement.)}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 These requirements apply to the modified work as a whole. If}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 identifiable sections of that work are not derived from the Program,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 and can be reasonably considered independent and separate works in}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 themselves, then this License, and its terms, do not apply to those}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 sections when you distribute them as separate works. But when you}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute the same sections as part of a whole which is a work based}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 on the Program, the distribution of the whole must be on the terms of}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 this License, whose permissions for other licensees extend to the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 entire whole, and thus to each and every part regardless of who wrote it.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Thus, it is not the intent of this section to claim rights or contest}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 your rights to work written entirely by you; rather, the intent is to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 exercise the right to control the distribution of derivative or}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 collective works based on the Program.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 In addition, mere aggregation of another work not based on the Program}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 with the Program (or with a work based on the Program) on a volume of}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 a storage or distribution medium does not bring the other work under}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the scope of this License.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 3. You may copy and distribute the Program (or a work based on it,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 under Section 2) in object code or executable form under the terms of}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Sections 1 and 2 above provided that you also do one of the following:}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 a) Accompany it with the complete corresponding machine-readable}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 source code, which must be distributed under the terms of Sections}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 1 and 2 above on a medium customarily used for software interchange; or,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 b) Accompany it with a written offer, valid for at least three}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 years, to give any third party, for a charge no more than your}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 cost of physically performing source distribution, a complete}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 machine-readable copy of the corresponding source code, to be}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distributed under the terms of Sections 1 and 2 above on a medium}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 customarily used for software interchange; or,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 c) Accompany it with the information you received as to the offer}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 to distribute corresponding source code. (This alternative is}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 allowed only for noncommercial distribution and only if you}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 received the program in object code or executable form with such}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 an offer, in accord with Subsection b above.)}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 The source code for a work means the preferred form of the work for}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 making modifications to it. For an executable work, complete source}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 code means all the source code for all modules it contains, plus any}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 associated interface definition files, plus the scripts used to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 control compilation and installation of the executable. However, as a}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 special exception, the source code distributed need not include}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 anything that is normally distributed (in either source or binary}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 form) with the major components (compiler, kernel, and so on) of the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 operating system on which the executable runs, unless that component}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 itself accompanies the executable.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 If distribution of executable or object code is made by offering}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 access to copy from a designated place, then offering equivalent}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 access to copy the source code from the same place counts as}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribution of the source code, even though third parties are not}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 compelled to copy the source along with the object code.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 4. You may not copy, modify, sublicense, or distribute the Program}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 except as expressly provided under this License. Any attempt}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 otherwise to copy, modify, sublicense or distribute the Program is}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 void, and will automatically terminate your rights under this License.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 However, parties who have received copies, or rights, from you under}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 this License will not have their licenses terminated so long as such}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 parties remain in full compliance.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 5. You are not required to accept this License, since you have not}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 signed it. However, nothing else grants you permission to modify or}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute the Program or its derivative works. These actions are}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 prohibited by law if you do not accept this License. Therefore, by}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 modifying or distributing the Program (or any work based on the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Program), you indicate your acceptance of this License to do so, and}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 all its terms and conditions for copying, distributing or modifying}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the Program or works based on it.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 6. Each time you redistribute the Program (or any work based on the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Program), the recipient automatically receives a license from the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 original licensor to copy, distribute or modify the Program subject to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 these terms and conditions. You may not impose any further}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 restrictions on the recipients' exercise of the rights granted herein.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 You are not responsible for enforcing compliance by third parties to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 this License.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 7. If, as a consequence of a court judgment or allegation of patent}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 infringement or for any other reason (not limited to patent issues),}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 conditions are imposed on you (whether by court order, agreement or}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 otherwise) that contradict the conditions of this License, they do not}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 excuse you from the conditions of this License. If you cannot}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute so as to satisfy simultaneously your obligations under this}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 License and any other pertinent obligations, then as a consequence you}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 may not distribute the Program at all. For example, if a patent}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 license would not permit royalty-free redistribution of the Program by}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 all those who receive copies directly or indirectly through you, then}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the only way you could satisfy both it and this License would be to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 refrain entirely from distribution of the Program.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 If any portion of this section is held invalid or unenforceable under}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 any particular circumstance, the balance of the section is intended to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 apply and the section as a whole is intended to apply in other}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 circumstances.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 It is not the purpose of this section to induce you to infringe any}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 patents or other property right claims or to contest validity of any}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 such claims; this section has the sole purpose of protecting the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 integrity of the free software distribution system, which is}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 implemented by public license practices. Many people have made}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 generous contributions to the wide range of software distributed}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 through that system in reliance on consistent application of that}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 system; it is up to the author/donor to decide if he or she is willing}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 to distribute software through any other system and a licensee cannot}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 impose that choice.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 This section is intended to make thoroughly clear what is believed to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 be a consequence of the rest of this License.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 8. If the distribution and/or use of the Program is restricted in}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 certain countries either by patents or by copyrighted interfaces, the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 original copyright holder who places the Program under this License}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 may add an explicit geographical distribution limitation excluding}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 those countries, so that distribution is permitted only in or among}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 countries not thus excluded. In such case, this License incorporates}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the limitation as if written in the body of this License.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 9. The Free Software Foundation may publish revised and/or new versions}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 of the General Public License from time to time. Such new versions will}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 be similar in spirit to the present version, but may differ in detail to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 address new problems or concerns.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Each version is given a distinguishing version number. If the Program}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 specifies a version number of this License which applies to it and "any}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 later version", you have the option of following the terms and conditions}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 either of that version or of any later version published by the Free}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Software Foundation. If the Program does not specify a version number of}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 this License, you may choose any version ever published by the Free Software}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Foundation.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 10. If you wish to incorporate parts of the Program into other free}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 programs whose distribution conditions are different, write to the author}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 to ask for permission. For software which is copyrighted by the Free}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Software Foundation, write to the Free Software Foundation; we sometimes}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 make exceptions for this. Our decision will be guided by the two goals}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 of preserving the free status of all derivatives of our free software and}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 of promoting the sharing and reuse of software generally.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 NO WARRANTY}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 REPAIR OR CORRECTION.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 POSSIBILITY OF SUCH DAMAGES.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 END OF TERMS AND CONDITIONS}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 How to Apply These Terms to Your New Programs}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 If you develop a new program, and you want it to be of the greatest}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 possible use to the public, the best way to achieve this is to make it}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 free software which everyone can redistribute and change under these terms.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 To do so, attach the following notices to the program. It is safest}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 to attach them to the start of each source file to most effectively}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 convey the exclusion of warranty; and each file should have at least}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the "copyright" line and a pointer to where the full notice is found.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 <one line to give the program's name and a brief idea of what it does.>}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Copyright (C) <year> <name of author>}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 This program is free software; you can redistribute it and/or modify}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 it under the terms of the GNU General Public License as published by}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the Free Software Foundation; either version 2 of the License, or}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 (at your option) any later version.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 This program is distributed in the hope that it will be useful,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 but WITHOUT ANY WARRANTY; without even the implied warranty of}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 GNU General Public License for more details.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 You should have received a copy of the GNU General Public License along}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 with this program; if not, write to the Free Software Foundation, Inc.,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Also add information on how to contact you by electronic and paper mail.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 If the program is interactive, make it output a short notice like this}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 when it starts in an interactive mode:}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Gnomovision version 69, Copyright (C) year name of author}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 This is free software, and you are welcome to redistribute it}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 under certain conditions; type `show c' for details.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 The hypothetical commands `show w' and `show c' should show the appropriate}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 parts of the General Public License. Of course, the commands you use may}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 be called something other than `show w' and `show c'; they could even be}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 mouse-clicks or menu items--whatever suits your program.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 You should also get your employer (if you work as a programmer) or your}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 school, if any, to sign a "copyright disclaimer" for the program, if}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 necessary. Here is a sample; alter the names:}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Yoyodyne, Inc., hereby disclaims all copyright interest in the program}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 `Gnomovision' (which makes passes at compilers) written by James Hacker.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 <signature of Ty Coon>, 1 April 1989}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Ty Coon, President of Vice}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 This General Public License does not permit incorporating your program into}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 proprietary programs. If your program is a subroutine library, you may}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 consider it more useful to permit linking proprietary applications with the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 library. If this is what you want to do, use the GNU Lesser General}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Public License instead of this License.}
+\par }
diff --git a/doc/License-gpl-2.txt b/doc/License-gpl-2.txt
new file mode 100644
index 00000000..d511905c
--- /dev/null
+++ b/doc/License-gpl-2.txt
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/doc/ReadMe-OS2.txt b/doc/ReadMe-OS2.txt
new file mode 100644
index 00000000..8a9dc31c
--- /dev/null
+++ b/doc/ReadMe-OS2.txt
@@ -0,0 +1,149 @@
+
+VirtualBox for OS/2 OSE Edition ALPHA
+=====================================
+
+Version 1.5.51_OSE_27858
+
+03.02.2008
+
+
+This is an early development build of VirtualBox OSE Edition for OS/2.
+Please backup your data and don't expect everything to be highly polished
+and tuned just yet. If you find a *new* problem, meaning something
+not listed below, please report it at http://forums.virtualbox.org.
+
+This package is an official unofficial build of VirtualBox for OS/2.
+It means that it is coordinated by volunteers from Sun Microsystems that
+are still in touch with OS/2 and keep patching VirtualBox at their spare
+time to make sure it runs and more or less works under OS/2.
+
+PLEASE NOTE THAT THE OS/2 HOST (AND THEREFORE THE OS/2 VERSION OF
+VIRTUALBOX) IS NOT OFFICIALLY SUPPORTED BY SUN MICROSYSTEMS! DO NOT
+CONTACT SUN MICROSYSTEMS REGARDING THE OS/2 VERSION OF VIRTUALBOX NO
+MATTER WHAT YOUR QUESTION IS ABOUT! THANK YOU FOR UNDERSTANDING.
+
+
+Current Issues / TODOs
+----------------------
+
+* FE/Qt (Qt GUI frontend):
+
+ - Mouse pointer shape in mouse integration mode.
+ - NumLock/ScrollLock synchronization.
+ - Seamless mode (no top-level window transparency on OS/2).
+ - Keyboard driver to intercept system key combinations
+ (Alt+Tab etc.)
+
+* Devices:
+
+ - Host Floppy/DVD.
+ - Audio.
+ - Host interface networking.
+ - Internal networking.
+ - USB proxying.
+
+* Misc:
+
+ - Shared clipboard.
+ - Starting more than one VM simultaneously.
+ - Installer.
+ - VMX support.
+ - VBoxSDL (resizing/scaling/keyboard/slowness).
+ - Very slow Resume after Pause in real mode guest applications.
+
+Also, please pay attention to the section called "OS/2 Specific Features"
+below.
+
+
+How to "Install" and Run
+------------------------
+
+1. Unpack this archive somewhere.
+
+2. Make sure you have a dot (.) in your LIBPATH statement in CONFIG.SYS.
+
+3. Put the following line at the beginning of your CONFIG.SYS
+ and reboot:
+
+ DEVICE=<somewhere>\VBoxDrv.sys
+
+4. Go to <somewhere> and run VirtualBox.exe (Qt GUI frontend).
+
+5. Note that by default VirtualBox stores all user data in the
+ %HOME%\.VirtualBox directory. If %HOME% is not set, it will use
+ the <boot_drive>:\.VirtualBox directory. In either case, you may
+ overwrite the location of this directory using the VBOX_USER_HOME
+ environment variable.
+
+6. For best performance, it is recommended to install the VirtualBox
+ Guest Additions to the guest OS. The archive containing the ISO
+ image with Guest Additions for supported guest OSes (Windows,
+ Linux, OS/2) is named
+
+ VBoxGuestAdditions_XXXXX.zip
+
+ where XXXXX is the version number (it's best if it matches the version
+ number of this VirtualBox package).
+
+ Download this ZIP from the same location you took this archive from
+ and unpack the contents to the directory containing VirtualBox.exe.
+ After that, you can mount the Additions ISO in the Qt GUI by selecting
+ Devices -> Install Guest Additions... from the menu.
+
+
+Documentation and Support
+-------------------------
+
+Please visit http://www.virtualbox.org where you can find a lot of useful
+information about VirtualBox. There is a Community section where you can
+try to request some help from other OS/2 users of VirtualBox.
+
+You can download the User Manual for the latest official release of
+VirtualBox using this URL:
+
+ http://www.virtualbox.org/download/UserManual.pdf
+
+
+OS/2 Specific Features
+----------------------
+
+This section describes the features that are specific to the OS/2 version
+of VirtualBox and may be absent in versions for other platforms.
+
+1. System key combinations such as Alt+Tab, Ctrl+Esc are currently always
+ grabbed by the host and never reach the guest even when the keyboard
+ is captured. In order to send these combinations to the guest OS, use
+ the following shortcuts (where Host is the host key defined in the
+ global settings dialog):
+
+ Host+` (Tilde/Backquote) => Ctrl+Esc
+ Host+1 => Alt+Tab
+ Host+2 => Alt+Shift+Tab
+
+2. If you use two or more keyboard layouts on the OS/2 host (e.g. English
+ and Russian), make sure that the keyboard is switched to the English
+ layer when you work in the VirtualBox VM console window. Otherwise, some
+ shortcuts that involve the Host key (in particluar, all Host+<latin_letter>
+ shortcuts like Host+Q) may not work. Please note that the guest keyboard
+ layout has nothing to do with the host layout so you will still be able to
+ switch layouts in the guest using its own means.
+
+3. Make sure you do not do 'set LIBPATHSTRICT=T' in the environment you start
+ VirtualBox from: it will make the VirtualBox keyboard hook screw up your
+ host desktop (a workaround is to be found).
+
+
+History of Changes
+------------------
+
+* 03.02.2008
+
+ - Initial release.
+
+* XX.XX.XXXX
+
+ - Fixed: VirtualBox would hang or crash frequently on SMP machines in
+ ACPI mode.
+
+ - Fixed: VBoxSDL keyboard key event to scan code conversion [contributed
+ by Paul Smedley].
diff --git a/doc/ReadMe-Solaris.txt b/doc/ReadMe-Solaris.txt
new file mode 100644
index 00000000..aa63bec1
--- /dev/null
+++ b/doc/ReadMe-Solaris.txt
@@ -0,0 +1,51 @@
+
+@VBOX_PRODUCT@ for Solaris (TM) Operating System
+--------------------------------------------------------
+
+Upgrading:
+----------
+
+If you have an existing VirtualBox installation and you are upgrading to
+a newer version of VirtualBox, please uninstall the previous version
+before installing a newer one. Please refer to the "Uninstalling" section
+at the end of this document for details.
+
+
+Installing:
+-----------
+
+After extracting the contents of the tar.gz file perform the following steps:
+
+1. Login as root using the "su" command.
+
+2. Install the VirtualBox package:
+
+ pkgadd -d VirtualBox-@VBOX_VERSION_STRING@-SunOS-r@VBOX_SVN_REV@.pkg
+
+ To perform an unattended (non-interactive) installation of this
+ package, add "-n -a autoresponse SUNWvbox" (without quotes)
+ to the end of the above pkgadd command.
+
+3. For each package, the installer will ask you to "Select package(s) you
+ wish to process". In response, type "1".
+
+4. Type "y" when asked about continuing the installation.
+
+At this point, all the required files should be installed on your system.
+You can launch VirtualBox by running 'VirtualBox' from the terminal.
+
+
+Uninstalling:
+-------------
+
+To remove VirtualBox from your system, perform the following steps:
+
+1. Login as root using the "su" command.
+
+2. To remove VirtualBox, run the command:
+ pkgrm SUNWvbox
+
+3. To remove the VirtualBox kernel interface module, run the command:
+ pkgrm SUNWvboxkern
+ * Only required if you're uninstalling VirtualBox versions 3.0.x or lower.
+
diff --git a/doc/VBox-CodingGuidelines.cpp b/doc/VBox-CodingGuidelines.cpp
new file mode 100644
index 00000000..a7117af7
--- /dev/null
+++ b/doc/VBox-CodingGuidelines.cpp
@@ -0,0 +1,614 @@
+/* $Id: VBox-CodingGuidelines.cpp $ */
+/** @file
+ * VBox - Coding Guidelines.
+ */
+
+/*
+ * Copyright (C) 2006-2009 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+/** @page pg_vbox_guideline VBox Coding Guidelines
+ *
+ * The VBox Coding guidelines are followed by all of VBox with the exception of
+ * qemu. Qemu is using whatever the frenchman does.
+ *
+ * There are a few compulsory rules and a bunch of optional ones. The following
+ * sections will describe these in details. In addition there is a section of
+ * Subversion 'rules'.
+ *
+ *
+ *
+ * @section sec_vbox_guideline_compulsory Compulsory
+ *
+ *
+ * - The indentation size is 4 chars.
+ *
+ * - Tabs are only ever used in makefiles.
+ *
+ * - Use RT and VBOX types.
+ *
+ * - Use Runtime functions.
+ *
+ * - Use the standard bool, uintptr_t, intptr_t and [u]int[1-9+]_t types.
+ *
+ * - Avoid using plain unsigned and int.
+ *
+ * - Use static wherever possible. This makes the namespace less polluted
+ * and avoids nasty name clash problems which can occur, especially on
+ * Unix-like systems. (1)
+ *
+ * - Public names are of the form Domain[Subdomain[]]Method, using mixed
+ * casing to mark the words. The main domain is all uppercase.
+ * (Think like java, mapping domain and subdomain to packages/classes.)
+ *
+ * - Public names are always declared using the appropriate DECL macro. (2)
+ *
+ * - Internal names starts with a lowercased main domain.
+ *
+ * - Defines are all uppercase and separate words with underscore.
+ * This applies to enum values too.
+ *
+ * - Typedefs are all uppercase and contain no underscores to distinguish
+ * them from defines.
+ *
+ * - Pointer typedefs start with 'P'. If pointer to const then 'PC'.
+ *
+ * - Function typedefs start with 'FN'. If pointer to FN then 'PFN'.
+ *
+ * - All files are case sensitive.
+ *
+ * - Slashes are unix slashes ('/') runtime converts when necessary.
+ *
+ * - char strings are UTF-8.
+ *
+ * - All functions return VBox status codes. There are three general
+ * exceptions from this:
+ * -# Predicate functions. These are function which are boolean in
+ * nature and usage. They return bool. The function name will
+ * include 'Has', 'Is' or similar.
+ * -# Functions which by nature cannot possibly fail.
+ * These return void.
+ * -# "Get"-functions which return what they ask for.
+ * A get function becomes a "Query" function if there is any
+ * doubt about getting what is ask for.
+ *
+ * - VBox status codes have three subdivisions:
+ * -# Errors, which are VERR_ prefixed and negative.
+ * -# Warnings, which are VWRN_ prefixed and positive.
+ * -# Informational, which are VINF_ prefixed and positive.
+ *
+ * - Platform/OS operation are generalized and put in the IPRT.
+ *
+ * - Other useful constructs are also put in the IPRT.
+ *
+ * - The code shall not cause compiler warnings. Check this on ALL
+ * the platforms.
+ *
+ * - All files have file headers with $Id and a file tag which describes
+ * the file in a sentence or two.
+ * Note: Remember to enable keyword expansion when adding files to svn.
+ *
+ * - All public functions are fully documented in Doxygen style using the
+ * javadoc dialect (using the 'at' instead of the 'slash' as
+ * commandprefix.)
+ *
+ * - All structures in header files are described, including all their
+ * members.
+ *
+ * - All modules have a documentation 'page' in the main source file which
+ * describes the intent and actual implementation.
+ *
+ * - Code which is doing things that are not immediately comprehensible
+ * shall include explanatory comments.
+ *
+ * - Documentation and comments are kept up to date.
+ *
+ * - Headers in /include/VBox shall not contain any slash-slash C++
+ * comments, only ANSI C comments!
+ *
+ * - Comments on \#else indicates what begins while the comment on a
+ * \#endif indicates what ended.
+ *
+ *
+ * (1) It is common practice on Unix to have a single symbol namespace for an
+ * entire process. If one is careless symbols might be resolved in a
+ * different way that one expects, leading to weird problems.
+ *
+ * (2) This is common practice among most projects dealing with modules in
+ * shared libraries. The Windows / PE __declspect(import) and
+ * __declspect(export) constructs are the main reason for this.
+ * OTOH, we do perhaps have a bit too detailed graining of this in VMM...
+ *
+ *
+ * @subsection sec_vbox_guideline_compulsory_sub64 64-bit and 32-bit
+ *
+ * Here are some amendments which address 64-bit vs. 32-bit portability issues.
+ *
+ * Some facts first:
+ *
+ * - On 64-bit Windows the type long remains 32-bit. On nearly all other
+ * 64-bit platforms long is 64-bit.
+ *
+ * - On all 64-bit platforms we care about, int is 32-bit, short is 16 bit
+ * and char is 8-bit.
+ * (I don't know about any platforms yet where this isn't true.)
+ *
+ * - size_t, ssize_t, uintptr_t, ptrdiff_t and similar are all 64-bit on
+ * 64-bit platforms. (These are 32-bit on 32-bit platforms.)
+ *
+ * - There is no inline assembly support in the 64-bit Microsoft compilers.
+ *
+ *
+ * Now for the guidelines:
+ *
+ * - Never, ever, use int, long, ULONG, LONG, DWORD or similar to cast a
+ * pointer to integer. Use uintptr_t or intptr_t. If you have to use
+ * NT/Windows types, there is the choice of ULONG_PTR and DWORD_PTR.
+ *
+ * - RT_OS_WINDOWS is defined to indicate Windows. Do not use __WIN32__,
+ * __WIN64__ and __WIN__ because they are all deprecated and scheduled
+ * for removal (if not removed already). Do not use the compiler
+ * defined _WIN32, _WIN64, or similar either. The bitness can be
+ * determined by testing ARCH_BITS.
+ * Example:
+ * @code
+ * #ifdef RT_OS_WINDOWS
+ * // call win32/64 api.
+ * #endif
+ * #ifdef RT_OS_WINDOWS
+ * # if ARCH_BITS == 64
+ * // call win64 api.
+ * # else // ARCH_BITS == 32
+ * // call win32 api.
+ * # endif // ARCH_BITS == 32
+ * #else // !RT_OS_WINDOWS
+ * // call posix api
+ * #endif // !RT_OS_WINDOWS
+ * @endcode
+ *
+ * - There are RT_OS_xxx defines for each OS, just like RT_OS_WINDOWS
+ * mentioned above. Use these defines instead of any predefined
+ * compiler stuff or defines from system headers.
+ *
+ * - RT_ARCH_X86 is defined when compiling for the x86 the architecture.
+ * Do not use __x86__, __X86__, __[Ii]386__, __[Ii]586__, or similar
+ * for this purpose.
+ *
+ * - RT_ARCH_AMD64 is defined when compiling for the AMD64 architecture.
+ * Do not use __AMD64__, __amd64__ or __x64_86__.
+ *
+ * - Take care and use size_t when you have to, esp. when passing a pointer
+ * to a size_t as a parameter.
+ *
+ * - Be wary of type promotion to (signed) integer. For example the
+ * following will cause u8 to be promoted to int in the shift, and then
+ * sign extended in the assignment 64-bit:
+ * @code
+ * uint8_t u8 = 0xfe;
+ * uint64_t u64 = u8 << 24;
+ * // u64 == 0xfffffffffe000000
+ * @endcode
+ *
+ *
+ * @subsection sec_vbox_guideline_compulsory_cppmain C++ guidelines for Main
+ *
+ * Main is currently (2009) full of hard-to-maintain code that uses complicated
+ * templates. The new mid-term goal for Main is to have less custom templates
+ * instead of more for the following reasons:
+ *
+ * - Template code is harder to read and understand. Custom templates create
+ * territories which only the code writer understands.
+ *
+ * - Errors in using templates create terrible C++ compiler messages.
+ *
+ * - Template code is really hard to look at in a debugger.
+ *
+ * - Templates slow down the compiler a lot.
+ *
+ * In particular, the following bits should be considered deprecated and should
+ * NOT be used in new code:
+ *
+ * - everything in include/iprt/cpputils.h (auto_ref_ptr, exception_trap_base,
+ * char_auto_ptr and friends)
+ *
+ * Generally, in many cases, a simple class with a proper destructor can achieve
+ * the same effect as a 1,000-line template include file, and the code is
+ * much more accessible that way.
+ *
+ * Using standard STL templates like std::list, std::vector and std::map is OK.
+ * Exceptions are:
+ *
+ * - Guest Additions because we don't want to link against libstdc++ there.
+ *
+ * - std::string should not be used because we have iprt::MiniString and
+ * com::Utf8Str which can convert efficiently with COM's UTF-16 strings.
+ *
+ * - std::auto_ptr<> in general; that part of the C++ standard is just broken.
+ * Write a destructor that calls delete.
+ *
+ *
+ * @subsection sec_vbox_guideline_compulsory_cppqtgui C++ guidelines for the Qt GUI
+ *
+ * The Qt GUI is currently (2010) on its way to become more compatible to the
+ * rest of VirtualBox coding style wise. From now on, all the coding style
+ * rules described in this file are also mandatory for the Qt GUI. Additionally
+ * the following rules should be respected:
+ *
+ * - GUI classes which correspond to GUI tasks should be prefixed by UI (no VBox anymore)
+ *
+ * - Classes which extents some of the Qt classes should be prefix by QI
+ *
+ * - General task classes should be prefixed by C
+ *
+ * - Slots are prefixed by slt -> sltName
+ *
+ * - Signals are prefixed by sig -> sigName
+ *
+ * - Use Qt classes for lists, strings and so on, the use of STL classes should
+ * be avoided
+ *
+ * - All files like .cpp, .h, .ui, which belong together are located in the
+ * same directory and named the same
+ *
+ *
+ * @section sec_vbox_guideline_optional Optional
+ *
+ * First part is the actual coding style and all the prefixes. The second part
+ * is a bunch of good advice.
+ *
+ *
+ * @subsection sec_vbox_guideline_optional_layout The code layout
+ *
+ * - Max line length is 130 chars. Exceptions are table-like
+ * code/initializers and Log*() statements (don't waste unnecessary
+ * vertical space on debug logging).
+ *
+ * - Comments should try stay within the usual 80 columns.
+ *
+ * - Curly brackets are not indented. Example:
+ * @code
+ * if (true)
+ * {
+ * Something1();
+ * Something2();
+ * }
+ * else
+ * {
+ * SomethingElse1().
+ * SomethingElse2().
+ * }
+ * @endcode
+ *
+ * - Space before the parentheses when it comes after a C keyword.
+ *
+ * - No space between argument and parentheses. Exception for complex
+ * expression. Example:
+ * @code
+ * if (PATMR3IsPatchGCAddr(pVM, GCPtr))
+ * @endcode
+ *
+ * - The else of an if is always the first statement on a line. (No curly
+ * stuff before it!)
+ *
+ * - else and if go on the same line if no { compound statement }
+ * follows the if. Example:
+ * @code
+ * if (fFlags & MYFLAGS_1)
+ * fFlags &= ~MYFLAGS_10;
+ * else if (fFlags & MYFLAGS_2)
+ * {
+ * fFlags &= ~MYFLAGS_MASK;
+ * fFlags |= MYFLAGS_5;
+ * }
+ * else if (fFlags & MYFLAGS_3)
+ * @endcode
+ *
+ *
+ * - Slightly complex boolean expressions are split into multiple lines,
+ * putting the operators first on the line and indenting it all according
+ * to the nesting of the expression. The purpose is to make it as easy as
+ * possible to read. Example:
+ * @code
+ * if ( RT_SUCCESS(rc)
+ * || (fFlags & SOME_FLAG))
+ * @endcode
+ *
+ * - When 'if' or 'while' statements gets long, the closing parentheses
+ * goes right below the opening parentheses. This may be applied to
+ * sub-expression. Example:
+ * @code
+ * if ( RT_SUCCESS(rc)
+ * || ( fSomeStuff
+ * && fSomeOtherStuff
+ * && fEvenMoreStuff
+ * )
+ * || SomePredicateFunction()
+ * )
+ * {
+ * ...
+ * }
+ * @endcode
+ *
+ * - The case is indented from the switch (to avoid having the braces for
+ * the 'case' at the same level as the 'switch' statement).
+ *
+ * - If a case needs curly brackets they contain the entire case, are not
+ * indented from the case, and the break or return is placed inside them.
+ * Example:
+ * @code
+ * switch (pCur->eType)
+ * {
+ * case PGMMAPPINGTYPE_PAGETABLES:
+ * {
+ * unsigned iPDE = pCur->GCPtr >> PGDIR_SHIFT;
+ * unsigned iPT = (pCur->GCPtrEnd - pCur->GCPtr) >> PGDIR_SHIFT;
+ * while (iPT-- > 0)
+ * if (pPD->a[iPDE + iPT].n.u1Present)
+ * return VERR_HYPERVISOR_CONFLICT;
+ * break;
+ * }
+ * }
+ * @endcode
+ *
+ * - In a do while construction, the while is on the same line as the
+ * closing "}" if any are used.
+ * Example:
+ * @code
+ * do
+ * {
+ * stuff;
+ * i--;
+ * } while (i > 0);
+ * @endcode
+ *
+ * - Comments are in C style. C++ style comments are used for temporary
+ * disabling a few lines of code.
+ *
+ * - No unnecessary parentheses in expressions (just don't over do this
+ * so that gcc / msc starts bitching). Find a correct C/C++ operator
+ * precedence table if needed.
+ *
+ * - 'for (;;)' is preferred over 'while (true)' and 'while (1)'.
+ *
+ * - Parameters are indented to the start parentheses when breaking up
+ * function calls, declarations or prototypes. (This is in line with
+ * how 'if', 'for' and 'while' statements are done as well.) Example:
+ * @code
+ * RTPROCESS hProcess;
+ * int rc = RTProcCreateEx(papszArgs[0],
+ * papszArgs,
+ * RTENV_DEFAULT,
+ * fFlags,
+ * NULL, // phStdIn
+ * NULL, // phStdOut
+ * NULL, // phStdErr
+ * NULL, // pszAsUser
+ * NULL, // pszPassword
+ * &hProcess);
+ * @endcode
+ *
+ * - That Dijkstra is dead is no excuse for using gotos.
+ *
+ *
+ *
+ * @subsection sec_vbox_guideline_optional_prefix Variable / Member Prefixes
+ *
+ * - The 'g_' (or 'g') prefix means a global variable, either on file or module level.
+ *
+ * - The 's_' (or 's') prefix means a static variable inside a function or class.
+ *
+ * - The 'm_' (or 'm') prefix means a class data member.
+ *
+ * In new code in Main, use "m_" (and common sense). As an exception,
+ * in Main, if a class encapsulates its member variables in an anonymous
+ * structure which is declared in the class, but defined only in the
+ * implementation (like this: 'class X { struct Data; Data *m; }'), then
+ * the pointer to that struct is called 'm' itself and its members then
+ * need no prefix, because the members are accessed with 'm->member'
+ * already which is clear enough.
+ *
+ * - The 'a_' prefix means a parameter (argument) variable. This is
+ * sometimes written 'a' in parts of the source code that does not use
+ * the array prefix.
+ *
+ * - The 'p' prefix means pointer. For instance 'pVM' is pointer to VM.
+ *
+ * - The 'r' prefix means that something is passed by reference.
+ *
+ * - The 'k' prefix means that something is a constant. For instance
+ * 'enum { kStuff };'. This is usually not used in combination with
+ * 'p', 'r' or any such thing, it's main main use is to make enums
+ * easily identifiable.
+ *
+ * - The 'a' prefix means array. For instance 'aPages' could be read as
+ * array of pages.
+ *
+ * - The 'c' prefix means count. For instance 'cbBlock' could be read,
+ * count of bytes in block.
+ *
+ * - The 'off' prefix means offset.
+ *
+ * - The 'i' or 'idx' prefixes usually means index. Although the 'i' one
+ * can sometimes just mean signed integer.
+ *
+ * - The 'i[1-9]+' prefix means a fixed bit size variable. Frequently
+ * used with the int[1-9]+_t types. [type]
+ *
+ * - The 'e' (or 'enm') prefix means enum.
+ *
+ * - The 'u' prefix usually means unsigned integer. Exceptions follows.
+ *
+ * - The 'u[1-9]+' prefix means a fixed bit size variable. Frequently
+ * used with the uint[1-9]+_t types and with bitfields. [type]
+ *
+ * - The 'b' prefix means byte or bytes. [type]
+ *
+ * - The 'f' prefix means flags. Flags are unsigned integers of some kind
+ * or booleans.
+ *
+ * - TODO: need prefix for real float. [type]
+ *
+ * - The 'rd' prefix means real double and is used for 'double' variables.
+ * [type]
+ *
+ * - The 'lrd' prefix means long real double and is used for 'long double'
+ * variables. [type]
+ *
+ * - The 'ch' prefix means a char, the (signed) char type. [type]
+ *
+ * - The 'wc' prefix means a wide/windows char, the RTUTF16 type. [type]
+ *
+ * - The 'uc' prefix means a Unicode Code point, the RTUNICP type. [type]
+ *
+ * - The 'uch' prefix means unsigned char. It's rarely used. [type]
+ *
+ * - The 'sz' prefix means zero terminated character string (array of
+ * chars). (UTF-8)
+ *
+ * - The 'wsz' prefix means zero terminated wide/windows character string
+ * (array of RTUTF16).
+ *
+ * - The 'usz' prefix means zero terminated Unicode string (array of
+ * RTUNICP).
+ *
+ * - The 'str' prefix means C++ string; either a std::string or, in Main,
+ * a Utf8Str or, in Qt, a QString. When used with 'p', 'r', 'a' or 'c'
+ * the first letter should be capitalized.
+ *
+ * - The 'bstr' prefix, in Main, means a UTF-16 Bstr. When used with 'p',
+ * 'r', 'a' or 'c' the first letter should be capitalized.
+ *
+ * - The 'pfn' prefix means pointer to function. Common usage is 'pfnCallback'
+ * and such like.
+ *
+ * - The 'psz' prefix is a combination of 'p' and 'sz' and thus means
+ * pointer to a zero terminated character string. (UTF-8)
+ *
+ * - The 'pcsz' prefix is used to indicate constant string pointers in
+ * parts of the code. Most code uses 'psz' for const and non-const
+ * string pointers.
+ *
+ * - The 'l' prefix means (signed) long. We try avoid using this,
+ * expecially with the 'LONG' types in Main as these are not 'long' on
+ * 64-bit non-Windows platforms and can cause confusion. Alternatives:
+ * 'i' or 'i32'. [type]
+ *
+ * - The 'ul' prefix means unsigned long. We try avoid using this,
+ * expecially with the 'ULONG' types in Main as these are not 'unsigned
+ * long' on 64-bit non-Windows platforms and can cause confusion.
+ * Alternatives: 'u' or 'u32'. [type]
+ *
+ *
+ * @subsection sec_vbox_guideline_optional_misc Misc / Advice / Stuff
+ *
+ * - When writing code think as the reader.
+ *
+ * - When writing code think as the compiler. (2)
+ *
+ * - When reading code think as if it's full of bugs - find them and fix them.
+ *
+ * - Pointer within range tests like:
+ * @code
+ * if ((uintptr_t)pv >= (uintptr_t)pvBase && (uintptr_t)pv < (uintptr_t)pvBase + cbRange)
+ * @endcode
+ * Can also be written as (assuming cbRange unsigned):
+ * @code
+ * if ((uintptr_t)pv - (uintptr_t)pvBase < cbRange)
+ * @endcode
+ * Which is shorter and potentially faster. (1)
+ *
+ * - Avoid unnecessary casting. All pointers automatically cast down to
+ * void *, at least for non class instance pointers.
+ *
+ * - It's very very bad practise to write a function larger than a
+ * screen full (1024x768) without any comprehensibility and explaining
+ * comments.
+ *
+ * - More to come....
+ *
+ *
+ * (1) Important, be very careful with the casting. In particular, note that
+ * a compiler might treat pointers as signed (IIRC).
+ *
+ * (2) "A really advanced hacker comes to understand the true inner workings of
+ * the machine - he sees through the language he's working in and glimpses
+ * the secret functioning of the binary code - becomes a Ba'al Shem of
+ * sorts." (Neal Stephenson "Snow Crash")
+ *
+ *
+ *
+ * @section sec_vbox_guideline_warnings Compiler Warnings
+ *
+ * The code should when possible compile on all platforms and compilers without any
+ * warnings. That's a nice idea, however, if it means making the code harder to read,
+ * less portable, unreliable or similar, the warning should not be fixed.
+ *
+ * Some of the warnings can seem kind of innocent at first glance. So, let's take the
+ * most common ones and explain them.
+ *
+ *
+ * @subsection sec_vbox_guideline_warnings_signed_unsigned_compare Signed / Unsigned Compare
+ *
+ * GCC says: "warning: comparison between signed and unsigned integer expressions"
+ * MSC says: "warning C4018: '<|<=|==|>=|>' : signed/unsigned mismatch"
+ *
+ * The following example will not output what you expect:
+@code
+#include <stdio.h>
+int main()
+{
+ signed long a = -1;
+ unsigned long b = 2294967295;
+ if (a < b)
+ printf("%ld < %lu: true\n", a, b);
+ else
+ printf("%ld < %lu: false\n", a, b);
+ return 0;
+}
+@endcode
+ * If I understood it correctly, the compiler will convert a to an
+ * unsigned long before doing the compare.
+ *
+ *
+ *
+ * @section sec_vbox_guideline_svn Subversion Commit Rules
+ *
+ *
+ * Before checking in:
+ *
+ * - Check Tinderbox and make sure the tree is green across all platforms. If it's
+ * red on a platform, don't check in. If you want, warn in the \#vbox channel and
+ * help make the responsible person fix it.
+ * NEVER CHECK IN TO A BROKEN BUILD.
+ *
+ * - When checking in keep in mind that a commit is atomic and that the Tinderbox and
+ * developers are constantly checking out the tree. Therefore do not split up the
+ * commit unless it's into 100% independent parts. If you need to split it up in order
+ * to have sensible commit comments, make the sub-commits as rapid as possible.
+ *
+ * - If you make a user visible change, such as fixing a reported bug,
+ * make sure you add an entry to doc/manual/user_ChangeLogImpl.xml.
+ *
+ * - If you are adding files make sure set the right attributes.
+ * svn-ps.sh/cmd was created for this purpose, please make use of it.
+ *
+ *
+ * After checking in:
+ *
+ * - After checking-in, you watch Tinderbox until your check-ins clear. You do not
+ * go home. You do not sleep. You do not log out or experiment with drugs. You do
+ * not become unavailable. If you break the tree, add a comment saying that you're
+ * fixing it. If you can't fix it and need help, ask in the \#innotek channel or back
+ * out the change.
+ *
+ * (Inspired by mozilla tree rules.)
+ */
+
diff --git a/doc/VBox-MakefileGuidelines.cpp b/doc/VBox-MakefileGuidelines.cpp
new file mode 100644
index 00000000..9692ed91
--- /dev/null
+++ b/doc/VBox-MakefileGuidelines.cpp
@@ -0,0 +1,187 @@
+/* $Id: VBox-MakefileGuidelines.cpp $ */
+/** @file
+ * VBox - Makefile Guidelines.
+ */
+
+/*
+ * Copyright (C) 2009 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+/** @page pg_vbox_makefile_guidelines VBox Makefile Guidelines
+ *
+ * These guidelines apply to all the Makefile.kmk files in the tree.
+ * No exceptions.
+ *
+ * All these makefiles are ultimately the responsiblity of bird. Since there are
+ * currently more than two hundred files and the number is growing, they have to
+ * be very kept uniform or it will become very difficult to maintain them and
+ * impossible do bulk refactoring. Thus these guidelines have no bits that are
+ * optional unlike the coding guidelines, and should be thought of as rules
+ * rather than guidelines.
+ *
+ * Note! The guidelines do not apply to the other makefiles found in the source
+ * tree, like the ones shipped in the SDK and the ones for the linux kernel
+ * modules.
+ *
+ *
+ * @section sec_vbox_makefile_guidelines_kbuild kBuild
+ *
+ * kBuild is way older than VirtualBox, at least as a concept, but the
+ * VirtualBox project was a push to get something done about it again. It's
+ * maintained by bird in his spare time because: "We don't make buildsystems, we
+ * make virtual machines". So, kBuild makes progress when there is spare time or
+ * when there is an urgent need for something.
+ *
+ * The kBuild docs are in the process of being written. The current items and
+ * their status per 2009-04-19:
+ * - kmk Quick Reference [completed]:
+ * http://svn.netlabs.org/kbuild/wiki/kmk%20Quick%20Reference
+ * - kBuild Quick Reference [just started]:
+ * http://svn.netlabs.org/kbuild/wiki/kBuild%20Quick%20Reference
+ *
+ * Local copies of the docs can be found in kBuild/docs, just keep in mind that
+ * they might be slightly behind the online version.
+ *
+ *
+ * @section sec_vbox_makefile_guidelines_example Example Makefiles
+ *
+ * Let me point to some good sample makefiles:
+ * - src/VBox/Additions/common/VBoxService/Makefile.kmk
+ * - src/VBox/Debugger/Makefile.kmk
+ * - src/VBox/Disassembler/Makefile.kmk
+ *
+ * And some bad ones:
+ * - src/lib/xpcom18a4/Makefile.kmk
+ * - src/recompiler/Makefile.kmk
+ * - src/VBox/Devices/Makefile.kmk
+ * - src/VBox/Main/Makefile.kmk
+ * - src/VBox/Runtime/Makefile.kmk
+ *
+ *
+ * @section sec_vbox_makefile_guidelines Guidelines
+ *
+ * First one really important fact:
+ *
+ * Everything is global because all makefiles
+ * are virtually one single makefile.
+ *
+ * The rules:
+ *
+ * - Using bits defined by a sub-makefile is fine, using anything defined
+ * by a parent, sibling, uncle, cousine, or remoter relatives is not
+ * Okay. It may break sub-tree building which is not acceptable.
+ *
+ * - Template names starts with VBOX and are all upper cased, no
+ * underscores or other separators. (TODO: Change this to camel case.)
+ *
+ * - Makefile variables shall be prefixed with VBOX or VB to avoid clashes
+ * with environment and kBuild variables.
+ *
+ * - Makefile variables are all upper cased and uses underscores to
+ * separate the words.
+ *
+ * - All variables are global. Make sure they are globally unique, but try
+ * not make them incredible long.
+ *
+ * - Makefile variables goes after the inclusion of the header and
+ * usually after including sub-makefiles.
+ *
+ * - Variables that are used by more than one makefile usually belongs
+ * in the monster file, Config.kmk.
+ *
+ * - Targets are lower or camel cased and as a rule the same as the
+ * resulting binary.
+ *
+ * - Install targets frequently have a -inst in their name, and a name that
+ * gives some idea what they install
+ *
+ * - Always use templates (mytarget_TEMPLATE = VBOXSOMETHING).
+ *
+ * - Comment each target with a 3+ line block as seen in
+ * src/VBox/Debugger/Makefile.kmk.
+ *
+ * - No space between the comment block and the target definition.
+ *
+ * - Try fit all the custom recipes after the target they apply to.
+ *
+ * - Custom recipes that apply to more than one target should be placed at
+ * the bottom of the makefile, before the footer inclusion when possible.
+ *
+ * - Do NOT use custom recipes to install stuff, use install targets.
+ * Generate files to inst-target_0_OUTDIR. (Yes, there are a lot places
+ * where we don't do this yet.)
+ *
+ * - Always break SOURCES, LIBS, long target list and other lists the
+ * manner Debugger_SOURCES is broken into multiple lines in
+ * src/VBox/Debugger/Makefile.kmk. I.e. exactly one tab, the file name /
+ * list item, another space, the slash and then the newline.
+ *
+ * - The last element of an broken list should not have a slash-newline,
+ * otherwise we risk getting the next variable into the list.
+ *
+ * - Indentation of if'ed blocks is done in 1 space increments, this also
+ * applies to broken lists. It does not apply to the commands in a
+ * recipes of course, because that would make kmk choke. (Yes, there are
+ * plenty examples of doing this differently, but these will be weeded
+ * out over time.)
+ *
+ * - \$(NO_SUCH_VARIABLE) should be when you need to put nothing somewhere,
+ * for instance to prevent inherting an attribute.
+ *
+ * - Always put the defines in the DEFS properties, never use the FLAGS
+ * properties for this. Doing so may screw up depenencies and object
+ * caches.
+ *
+ * - Mark each section and target of the file with a 3+ lines comment
+ * block.
+ *
+ * - Document variables that are not obvious using double hash comments.
+ *
+ * - Each an every Makefile.kmk shall have a file header with Id, file
+ * description and copyright/license exactly like in the examples.
+ *
+ * - Multiple blank lines in a makefile is very seldom there without a
+ * reason and shall be preserved.
+ *
+ * - Inserting blank lines between target properties is all right if the
+ * target definition is long and/or crooked.
+ *
+ * - if1of and ifn1of shall always have a space after the comma, while ifeq
+ * and ifneq shall not. That way they are easier to tell apart.
+ *
+ * - Do a svn diff before committing makefile changes.
+ *
+ *
+ * @section sec_vbox_makefile_guidelines_reminders Helpful reminders
+ *
+ * - Do not be afraid to ask for help on IRC or in the defect you're
+ * working on. There are usually somebody around that know how to best do
+ * something.
+ *
+ * - Watch out for "Heads Up!" bugtracker messages concerning the build
+ * system.
+ *
+ * - To remove bits from a template you're using you have to create a new
+ * template that extends the existing one and creatively use
+ * \$(filter-out) or \$(patsubst).
+ *
+ * - You can build sub-trees.
+ *
+ * - You don't have to cd into sub-trees: kmk -C src/recompiler
+ *
+ * - You can build individual targets: kmk VBoxRT
+ *
+ * - Even install targets: kmk nobin
+ *
+ * - You can compile individual source files: kmk ConsoleImpl.o
+ *
+ */
+
diff --git a/doc/VBox-doc.c b/doc/VBox-doc.c
new file mode 100644
index 00000000..a83cec2b
--- /dev/null
+++ b/doc/VBox-doc.c
@@ -0,0 +1,185 @@
+/* $Id: VBox-doc.c $ */
+/** @file
+ * VirtualBox Top Level Documentation File.
+ */
+
+/*
+ * Copyright (C) 2006-2012 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+
+/** @mainpage VirtualBox
+ *
+ * (add introduction here)
+ *
+ * @section pg_main_comp Components
+ *
+ * - VM / @ref pg_vmm "VMM" / GVM / @ref pg_gvmm "GVMM" - Virtual Machine
+ * Monitor.
+ * - @ref pg_cfgm
+ * - @ref pg_cpum
+ * - CSAM - Guest OS Code Scanning and Analyis Manager.
+ * - @ref pg_dbgf
+ * - @ref pg_dbgf_addr_space
+ * - @ref pg_dbgf_vmcore
+ * - @ref pg_dbgf_module
+ * - @ref pg_dbgc
+ * - VBoxDbg - Debugger GUI (Qt).
+ * - DIS - Disassembler.
+ * - @ref pg_em
+ * - HWACCM - Intel/AMD VM Hardware Support Manager.
+ * - REM - Recompiled Execution Monitor.
+ * - @ref pg_vboxrem_amd64
+ * - @ref pg_iem
+ * - @ref pg_gmm
+ * - @ref pg_mm
+ * - @ref pg_pgm
+ * - @ref pg_pgm_phys
+ * - @ref pg_pgm_pool
+ * - @ref pg_selm
+ * - @ref pg_iom
+ * - PATM - Dynamic Guest OS Patching Manager.
+ * - @ref pg_pdm
+ * - Devices / USB Devices, Drivers and their public interfaces.
+ * - Async I/O Completion API.
+ * - Async Task API.
+ * - Critical Section API.
+ * - Queue API.
+ * - Thread API.
+ * - @ref pg_pdm_block_cache
+ * - @ref pg_ssm
+ * - @ref pg_stam
+ * - @ref pg_tm
+ * - @ref pg_trpm
+ * - VMM docs:
+ * - @ref pg_vmm_guideline
+ * - @ref pg_raw
+ * - Pluggable Components (via PDM).
+ * - DevPCArch - PC Architecture Device (chipset, legacy ++).
+ * - DevPCBios - Basic Input Output System.
+ * - DevDMAC - DMA Controller.
+ * - DevPIC - Programmable Interrupt Controller.
+ * - DevPIT - Programmable Interval Timer (i8254).
+ * - DevRTC - Real Time Clock.
+ * - DevVGA - Video Graphic Array.
+ * - DevPCI - Peripheral Component Interface (Bus).
+ * - VBoxDev - Special PCI Device which serves as an interface between
+ * the VMM and the guest OS for the additions.
+ * - Networking:
+ * - DevPCNet - AMD PCNet Device Emulation.
+ * - DevE1000 - Intel E1000 Device Emulation.
+ * - DevEEPROM - Intel E1000 EPROM Device Emulation.
+ * - SrvINetNetR0 - Internal Networking Ring-0 Service.
+ * - DevINIP - IP Stack Service for the internal networking.
+ * - DrvIntNet - Internal Networking Driver.
+ * - DrvNetSniffer - Wireshark Compatible Sniffer Driver (pass thru).
+ * - DrvNAT - Network Address Translation Driver.
+ * - DrvTAP - Host Interface Networking Driver.
+ * - Storage:
+ * - DevATA - ATA ((E)IDE) Device Emulation.
+ * - @ref pg_dev_ahci
+ * - DevFDC - Floppy Controller Device Emulation.
+ * - DrvBlock - Intermediate block driver.
+ * - DrvHostBase - Common code for the host drivers.
+ * - DrvHostDVD - Host DVD drive driver.
+ * - DrvHostFloppy - Host floppy drive driver.
+ * - DrvHostRawDisk - Host raw disk drive driver.
+ * - DrvMediaISO - ISO media driver.
+ * - DrvRawImage - Raw image driver (floppy images etc).
+ * - DrvVD - Intermediate Virtual Drive (Media) driver.
+ * - DrvVDI - VirtualBox Drive Image Container Driver.
+ * - DrvVmdk - VMDK Drive Image Container Driver.
+ * - USB:
+ * - @ref pg_dev_ohci
+ * - @ref pg_dev_ehci
+ * - @ref pg_dev_vusb
+ * - @ref pg_dev_vusb_old
+ * - Host Drivers.
+ * - SUPDRV - The Support driver (aka VBoxDrv).
+ * - @ref pg_sup
+ * - @ref pg_netflt
+ * - @ref pg_netadp
+ * - VBoxUSB - The USB support driver.
+ * - @ref pg_netflt
+ * - @ref pg_rawpci
+ * - Host Services.
+ * - @ref pg_hostclip Shared Clipboard.
+ * - Shared Folders.
+ * - Shared OpenGL. See PDF. (TODO: translate PDF to doxygen)
+ * - @ref pg_opengl_cocoa
+ * - @ref pg_svc_guest_properties
+ * - @ref pg_svc_guest_control
+ * - Guest Additions.
+ * - VBoxGuest.
+ * - @ref pg_guest_lib
+ * - VBoxService.
+ * - @ref pg_vboxervice_timesync
+ * - ...
+ * - VBoxControl.
+ * - VBoxVideo.
+ * - crOpenGL.
+ * - VBoxClient / VBoxTray.
+ * - pam.
+ * - ...
+ * - Network Services:
+ * - @ref pg_net_dhcp
+ * - @ref pg_net_nat
+ * - @ref pg_main
+ * - @ref pg_main_events
+ * - @ref pg_vrdb_usb
+ * - Frontends:
+ * - VirtualBox - The default Qt4 based GUI.
+ * - VBoxHeadless - The headless frontend.
+ * - VBoxManage - The CLI.
+ * - VBoxShell - An interactive shell written in python.
+ * - VBoxSDL - A very simple GUI.
+ * - VBoxBFE - A bare metal edition which does not use COM/XPCOM (barely
+ * maintained atm).
+ * - IPRT - Runtime Library for hiding host OS differences.
+ * - Testsuite:
+ * - @ref pg_testsuite_guideline
+ *
+ * @todo Make links to the components.
+ *
+ *
+ *
+ * @section Execution Contexts
+ *
+ * VirtualBox defines a number of different execution context, this can be
+ * confusing at first. So, to start with take a look at this diagram:
+ *
+ * @image html VMMContexts.png
+ *
+ * Context definitions:
+ * - Host context (HC) - This is the context where the host OS runs and
+ * runs VirtualBox within it. The absense of IN_RC and IN_GUEST
+ * indicates that we're in HC. IN_RING0 indicates ring-0 (kernel) and
+ * IN_RING3 indicates ring-3.
+ * - Raw-mode Context (RC) - This is the special VMM context where we
+ * execute the guest code directly on the CPU. Kernel code is patched
+ * and execute in ring-1 instead of ring-0 (ring compression). Ring-3
+ * code execute unmodified. Only VMMs use ring-1, so we don't need to
+ * worry about that (it's guarded against in the scheduler (EM)). We can
+ * in theory run ring-2 there, but since practially only only OS/2 uses
+ * ring-2, it is of little importance. The macro IN_RC indicates that
+ * we're compiling something for RC.
+ * Note! This used to be called GC (see below) earlier, so a bunch of RC
+ * things are using GC markers.
+ * - Guest Context (GC) - This is where the guest code is executed. When
+ * compiling, IN_GUEST indicates that it's for GC. IN_RING0 and
+ * IN_RING3 are also set when applicable, these are accompanied by
+ * IN_GUEST_R0 and IN_GUEST_R3 respecitively.
+ * - Intermediate context - This is a special memory context used within
+ * the world switchers (HC -> RC and back), it features some identity
+ * mapped code pages so we can switch to real mode if necessary.
+ *
+ */
+
diff --git a/doc/manual/Makefile.kmk b/doc/manual/Makefile.kmk
new file mode 100644
index 00000000..884aebe9
--- /dev/null
+++ b/doc/manual/Makefile.kmk
@@ -0,0 +1,751 @@
+# $Id: Makefile.kmk $
+## @file
+# Sub-Makefile for the VBox User Manual.
+#
+
+#
+# Copyright (C) 2006-2012 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+#
+# This slightly messy makefile transforms the DocBook XML source for the
+# user manual into presentation output. We support two targets:
+#
+# -- UserManual.pdf, generated by LaTex
+#
+# -- VirtualBox.chm
+#
+# Both files end up in PATH_STAGE_BIN.
+#
+# Both targets indirectly depend on the XML files in this directory;
+# "indirectly" because we first copy them to PATH_TARGET and hack them
+# up a bit for variable substitution and such (see below).
+# The toolchains are roughly like this:
+#
+# -- PDF file via Apache FOP: pre-process the XML files in PATH_TARGET,
+# then create a .FO file (another XML format for "formatted objects")
+# via xsltproc, then feed the .FO file to Apache FOP to create the PDF.
+#
+# -- PDF file via LaTeX: pre-process the XML files in PATH_TARGET, then
+# run our custom "dblatex" perl script on UserManual.xml, which parses
+# the XML (using the Perl SAX parsers) and dumps a matching latex file
+# to UserManual.tex. This is then regularly processed by pdflatex to
+# generate PDF.
+#
+# -- CHM file: again, pre-process the XML files in PATH_TARGET, then use
+# xsltproc to create a .HHP file for the Microsoft Help Compiler, then
+# feed that file to it.
+#
+
+SUB_DEPTH = ../..
+include $(KBUILD_PATH)/subheader.kmk
+
+
+##########################################################################################
+#
+# Globals
+#
+##########################################################################################
+VBOX_PATH_MANUAL_SRC := $(PATH_SUB_CURRENT)
+VBOX_PATH_MANUAL_OUTBASE := $(PATH_TARGET)/manual
+BLDDIRS += $(VBOX_PATH_MANUAL_OUTBASE)
+
+
+##########################################################################################
+#
+# Main targets
+#
+##########################################################################################
+ifdef VBOX_WITH_DOCS
+ # Default language
+ VBOX_MANUAL_LANGUAGES = en_US
+
+ ifdef VBOX_WITH_DOCS_TRANSLATIONS
+ VBOX_MANUAL_ADD_LANGUAGES = fr_FR
+ endif
+
+ if defined(VBOX_ONLY_SDK) || defined(VBOX_WITH_DOCS_SDKREF)
+ ## @todo make this an install target, drop the BLDDIRS.
+ OTHERS += \
+ $(VBOX_PATH_SDK)/docs/SDKRef.pdf
+ BLDDIRS += \
+ $(VBOX_PATH_SDK)/docs
+ endif
+
+ ifdef VBOX_WITH_DOCS_CHM
+ VBOX_PATH_BIN_CHM = $(PATH_STAGE_BIN)/VirtualBox.chm
+ else
+ VBOX_PATH_BIN_CHM =
+ # do not build
+ endif # !VBOX_WITH_DOCS_CHM
+
+ ifndef VBOX_ONLY_SDK
+ VBOX_MANUAL_PACK += \
+ $(PATH_STAGE_BIN)/UserManual.pdf \
+ $(VBOX_PATH_BIN_CHM)
+ OTHERS += \
+ $(PATH_STAGE_BIN)/UserManual.pdf
+ OTHERS.win += \
+ $(VBOX_PATH_BIN_CHM)
+ OTHERS.linux += \
+ $(VBOX_PATH_BIN_CHM)
+
+ ifdef VBOX_WITH_DOCS_TRANSLATIONS
+ OTHERS += \
+ $(foreach f,$(VBOX_MANUAL_ADD_LANGUAGES),$(PATH_STAGE_BIN)/UserManual_$(f).pdf)
+ ifdef VBOX_WITH_DOCS_CHM
+ OTHERS.win += \
+ $(foreach f,$(VBOX_MANUAL_ADD_LANGUAGES),$(PATH_STAGE_BIN)/VirtualBox_$(f).chm)
+ OTHERS.linux += \
+ $(foreach f,$(VBOX_MANUAL_ADD_LANGUAGES),$(PATH_STAGE_BIN)/VirtualBox_$(f).chm)
+ endif
+ endif
+ endif # !VBOX_ONLY_SDK
+ ifdef VBOX_ONLY_DOCS
+ PACKING += $(PATH_STAGE_BIN)/VBoxDocumentation.zip
+ endif
+
+ ifdef VBOX_WITH_DOCS_TRANSLATIONS
+ VBOX_MANUAL_LANGUAGES += $(VBOX_MANUAL_ADD_LANGUAGES)
+ endif
+
+ VBOX_MANUAL_XML_CHANGELOG = \
+ user_ChangeLogImpl.xml
+
+ VBOX_MANUAL_XML_FILES = \
+ UserManual.xml \
+ user_AdvancedTopics.xml \
+ user_BasicConcepts.xml \
+ user_Glossary.xml \
+ user_Frontends.xml \
+ user_Installation.xml \
+ user_GuestAdditions.xml \
+ user_Introduction.xml \
+ user_KnownIssues.xml \
+ user_PrivacyPolicy.xml \
+ user_Security.xml \
+ user_Technical.xml \
+ user_ThirdParty.xml \
+ user_Troubleshooting.xml \
+ user_VBoxManage.xml \
+ user_VirtualBoxAPI.xml \
+ user_Storage.xml \
+ user_Networking.xml
+
+ VBOX_MANUAL_XML_FILES_INCL_CHANGELOG = $(VBOX_MANUAL_XML_FILES) \
+ user_ChangeLog.xml
+
+ VBOX_SDKREF_XML_FILES = \
+ SDKRef.xml
+
+ # Wildcard the images path for every supported language
+ $(foreach f,$(VBOX_MANUAL_LANGUAGES), \
+ $(eval VBOX_MANUAL_PNG_FILES_$$(f) := $$(patsubst $$(VBOX_PATH_MANUAL_SRC)/$$(f)/%,%,$$(wildcard $$(VBOX_PATH_MANUAL_SRC)/$$(f)/images/*.png))))
+
+ VBOX_MANUAL_TEX_UNICODE_FILES = \
+ $(wildcard $(VBOX_PATH_MANUAL_SRC)/texfiles/unicode/*)
+
+ VBOX_MANUAL_LATEX_FILES_TARGET = \
+ $(addprefix UserManual.,aux log out toc tex)
+
+ VBOX_SDKREF_LATEX_FILES_TARGET = \
+ $(addprefix SDKRef.,aux log out toc tex)
+
+ BLDDIRS += \
+ $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/,\
+ $(VBOX_MANUAL_LANGUAGES) \
+ $(addsuffix /images, $(VBOX_MANUAL_LANGUAGES)) \
+ $(addsuffix /html-single, $(VBOX_MANUAL_LANGUAGES)) \
+ $(addsuffix /html-chunks, $(VBOX_MANUAL_LANGUAGES)) \
+ $(addsuffix /HTMLHelp, $(VBOX_MANUAL_LANGUAGES)) \
+ $(addsuffix /HTMLHelp/images, $(VBOX_MANUAL_LANGUAGES)) \
+ )
+
+ ifdef VBOX_WITH_DOCS_CHM
+ VBOX_MANUAL_PACK += \
+ $(foreach f,$(VBOX_MANUAL_ADD_LANGUAGES),$(PATH_STAGE_BIN)/UserManual_$(f).pdf $(PATH_STAGE_BIN)/VirtualBox_$(f).chm)
+ endif
+
+ OTHER_CLEAN += \
+ $(foreach f,$(VBOX_MANUAL_LANGUAGES), $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/$f/,$(VBOX_MANUAL_XML_FILES_INCL_CHANGELOG))) \
+ $(foreach f,en_US, $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/$f/,$(VBOX_SDKREF_XML_FILES))) \
+ $(foreach f,$(VBOX_MANUAL_LANGUAGES), $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/$f/,$(VBOX_MANUAL_LATEX_FILES_TARGET))) \
+ $(foreach f,en_US, $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/$f/,$(VBOX_SDKREF_LATEX_FILES_TARGET))) \
+ $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/, \
+ catalog docbook \
+ UserManual.fo) \
+ $(foreach f,$(VBOX_MANUAL_LANGUAGES), $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/$f/, \
+ docbook-htmlhelp-formatcfg.xsl \
+ docbook-html-one-page-formatcfg.xsl \
+ docbook-html-chunks-formatcfg.xsl \
+ titlepage-htmlhelp.xsl )) \
+ $(foreach f,$(VBOX_MANUAL_LANGUAGES),$(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/$f/,$(VBOX_MANUAL_PNG_FILES_$(f)))) \
+ $(foreach f,$(VBOX_MANUAL_LANGUAGES),$(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/$f/HTMLHelp/,$(VBOX_MANUAL_PNG_FILES_$(f)))) \
+ $(foreach f,$(VBOX_MANUAL_LANGUAGES),$(VBOX_PATH_MANUAL_OUTBASE)/$f/UserManual.pdf) \
+ $(foreach f,$(VBOX_MANUAL_LANGUAGES),$(VBOX_PATH_MANUAL_OUTBASE)/$f/VirtualBox.chm) \
+ $(foreach f,$(VBOX_MANUAL_ADD_LANGUAGES),$(PATH_STAGE_BIN)/UserManual_$(f).pdf) \
+ $(foreach f,$(VBOX_MANUAL_ADD_LANGUAGES),$(PATH_STAGE_BIN)/VirtualBox_$(f).chm) \
+ $(PATH_STAGE_BIN)/UserManual.pdf \
+ $(PATH_STAGE_BIN)/VirtualBox.chm \
+ $(foreach f,en_US,$(VBOX_PATH_MANUAL_OUTBASE)/$f/SDKRef.pdf) \
+ $(PATH_STAGE_BIN)/sdk/docs/SDKRef.pdf \
+ $(wildcard $(foreach f,$(VBOX_MANUAL_LANGUAGES),$(VBOX_PATH_MANUAL_OUTBASE)/$f/HTMLHelp/*.h*)) \
+ $(foreach f,$(VBOX_MANUAL_LANGUAGES),\
+ $(patsubst $(VBOX_PATH_MANUAL_SRC)/texfiles/unicode/%,$(VBOX_PATH_MANUAL_OUTBASE)/$f/%, \
+ $(VBOX_MANUAL_TEX_UNICODE_FILES))) \
+ $(VBOX_PATH_MANUAL_OUTBASE)/$(VBOX_MANUAL_XML_CHANGELOG)
+
+endif # VBOX_WITH_DOCS
+
+
+
+##########################################################################################
+#
+# Options
+#
+##########################################################################################
+
+HTMLHELPOPTS =
+
+
+##########################################################################################
+#
+# Preparations
+#
+##########################################################################################
+
+# tool locations
+ifndef VBOX_OSE
+ # use docbook from our tools directory
+ DOCBOOKPATH ?= $(PATH_DEVTOOLS)/common/DocBook/v1.69.1
+ DOCBOOKDTDPATH ?= $(PATH_DEVTOOLS)/common/docbook-xml/v4.3
+ XML_CATALOG ?= $(VBOX_PATH_MANUAL_OUTBASE)/catalog
+ XML_CATALOG_DOCBOOK ?= $(VBOX_PATH_MANUAL_OUTBASE)/docbook
+else
+ # use docbook of the build host
+ DOCBOOKPATH ?= http://docbook.sourceforge.net/release/xsl/current/
+endif
+VBOXMANAGEPATH ?= $(PATH_STAGE_BIN)/VBoxManageHelp$(SUFF_EXE)
+
+ # PDFLATEX_INTERACTION = errorstopmode - Use this when you wants to figure out build failures
+ # without catting the log a million times.
+ PDFLATEX_INTERACTION ?= batchmode
+ifeq ($(KBUILD_HOST),win)
+ ifndef VBOX_PDFLATEX
+ VBOX_PDFLATEX := $(firstword $(rsort $(wildcard $(PATH_DEVTOOLS)/win.x86/miktex-portable/*/miktex/bin/pdflatex.exe)))
+ ifneq ($(VBOX_PDFLATEX),)
+ PDFLATEX = $(VBOX_PDFLATEX) -halt-on-error -interaction $(PDFLATEX_INTERACTION)
+ endif
+ endif
+ ifndef PDFLATEX
+ # Tell MiKTeX to automatically download packages if system wide install.
+ VBOX_PDFLATEX := pdflatex
+ PDFLATEX = $(VBOX_PDFLATEX) -halt-on-error -interaction $(PDFLATEX_INTERACTION) --enable-installer
+ endif
+else
+ PDFLATEX_HALT = $(shell \
+ ( pdflatex -version | head -1 | grep 141592 > /dev/null ) && echo -halt-on-error )
+ PDFLATEX = pdflatex $(PDFLATEX_HALT) -interaction $(PDFLATEX_INTERACTION)
+endif
+
+# Windows HTML Help Workshop compiler (stupid thing always returns an error!)
+HHC = -$(EXEC_X86_WIN32) $(VBOX_PATH_HTML_HELP_WORKSHOP)/hhc.exe
+
+
+##########################################################################################
+#
+# Rules: Preprocess DocBook XML files
+# (preliminary step for both CHM and PDF generation)
+#
+##########################################################################################
+
+#
+# The following rules for $(VBOX_PATH_MANUAL_OUTBASE)/*.xml process the XML files
+# in doc/manual to allow for some magic variable replacements. The PDF and CHM
+# targets do not depend on the XML files in doc/manual, but those in
+# $(VBOX_PATH_MANUAL_OUTBASE) instead, which we copy there from here, after that magic
+# processing.
+#
+# So, before copying, the following steps are performed:
+#
+# -- $VBOX_VERSION_* strings are replaced with the actual current VBox version.
+# -- $VBOX_MANAGE_OUTPUT (in VBoxManage.xml) is replaced with the current
+# output of the actual VBoxManage program, to save us from having to
+# update the manual all the time.
+#
+
+# Only one changelog for all languages
+# $(VBOX_PATH_MANUAL_OUTBASE)/$(VBOX_MANUAL_XML_CHANGELOG): $(VBOX_PATH_MANUAL_SRC)/$(VBOX_MANUAL_XML_CHANGELOG) | $$(dir $$@)
+# $(QUIET)$(INSTALL) -m 0644 $< $@
+
+# intermediate step to do some variable replacement in the document
+$(foreach f,$(VBOX_MANUAL_LANGUAGES),$(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/$f/,$(filter-out user_VBoxManage.xml,$(VBOX_MANUAL_XML_FILES)))): \
+ $(VBOX_PATH_MANUAL_OUTBASE)/% : $(VBOX_PATH_MANUAL_SRC)/% $(VBOX_VERSION_STAMP) | $$(dir $$@)
+ $(call MSG_L1,Pre-processing [1] $(@F) to $@)
+ $(QUIET)$(RM) -f $@ $@.tmp
+ $(QUIET)$(SED) -e 's/\$$VBOX_VERSION_MAJOR/$(VBOX_VERSION_MAJOR)/g' \
+ -e 's/\$$VBOX_VERSION_MINOR/$(VBOX_VERSION_MINOR)/g' \
+ -e 's/\$$VBOX_VERSION_BUILD/$(VBOX_VERSION_BUILD)/g' \
+ -e 's/\$$VBOX_VERSION_STRING/$(VBOX_VERSION_STRING)/g' \
+ -e 's/\$$VBOX_VENDOR/$(VBOX_VENDOR)/g' \
+ -e 's/\$$VBOX_PRODUCT/$(VBOX_PRODUCT)/g' \
+ -e 's/\$$VBOX_C_YEAR/$(VBOX_C_YEAR)/g' \
+ --output $@.tmp $<
+ $(QUIET)$(MV) -f $@.tmp $@
+
+$(foreach f,$(VBOX_MANUAL_LANGUAGES),$(VBOX_PATH_MANUAL_OUTBASE)/$f/user_ChangeLog.xml): \
+ $(VBOX_PATH_MANUAL_OUTBASE)/% : \
+ $(VBOX_PATH_MANUAL_SRC)/% $(VBOX_PATH_MANUAL_SRC)/user_ChangeLogImpl.xml | $$(dir $$@)
+ $(call MSG_L1,Pre-processing [3] $(@F) to $@)
+ $(QUIET)$(RM) -f $@ $@.tmp $@.tmp2
+ $(QUIET)$(SED) -e 's/\$$VBOX_VERSION_MAJOR/$(VBOX_VERSION_MAJOR)/g' \
+ -e 's/\$$VBOX_VERSION_MINOR/$(VBOX_VERSION_MINOR)/g' \
+ -e 's/\$$VBOX_VERSION_BUILD/$(VBOX_VERSION_BUILD)/g' \
+ -e 's/\$$VBOX_VERSION_STRING/$(VBOX_VERSION_STRING)/g' \
+ -e 's/\$$VBOX_VENDOR/$(VBOX_VENDOR)/g' \
+ -e 's/\$$VBOX_PRODUCT/$(VBOX_PRODUCT)/g' \
+ -e 's/\$$VBOX_C_YEAR/$(VBOX_C_YEAR)/g' \
+ --output $@.tmp $<
+ $(QUIET)$(SED) -e '1,/<!--\$$VIRTUALBOX_CHANGELOG_IMPL-->/!d' \
+ -e 's/<!--\$$VIRTUALBOX_CHANGELOG_IMPL-->//' \
+ --output $@ $@.tmp
+ $(QUIET)$(SED) -e 's/<?xml version=\"1.0\" encoding=\"UTF-8\"?>//g' --append $@ $(VBOX_PATH_MANUAL_SRC)/user_ChangeLogImpl.xml
+ $(QUIET)$(SED) -e '/<!--\$$VIRTUALBOX_CHANGELOG_IMPL-->/,$$!d' \
+ -e 's/<!--\$$VIRTUALBOX_CHANGELOG_IMPL-->//' --append $@ $@.tmp
+
+$(foreach f,$(VBOX_MANUAL_LANGUAGES),$(VBOX_PATH_MANUAL_OUTBASE)/$f/user_VBoxManage.xml): \
+ $(VBOX_PATH_MANUAL_OUTBASE)/% : \
+ $(VBOX_PATH_MANUAL_SRC)/% \
+ $(VBOXMANAGEPATH) | $$(dir $$@)
+ $(call MSG_L1,Pre-processing [2] $(@F) to $@)
+ $(QUIET)$(RM) -f $@ $@.tmp $@.tmp2
+ $(QUIET)$(SED) -e 's/\$$VBOX_VERSION_MAJOR/$(VBOX_VERSION_MAJOR)/g' \
+ -e 's/\$$VBOX_VERSION_MINOR/$(VBOX_VERSION_MINOR)/g' \
+ -e 's/\$$VBOX_VERSION_BUILD/$(VBOX_VERSION_BUILD)/g' \
+ -e 's/\$$VBOX_VERSION_STRING/$(VBOX_VERSION_STRING)/g' \
+ -e 's/\$$VBOX_VENDOR/$(VBOX_VENDOR)/g' \
+ -e 's/\$$VBOX_PRODUCT/$(VBOX_PRODUCT)/g' \
+ -e 's/\$$VBOX_C_YEAR/$(VBOX_C_YEAR)/g' \
+ --output $@.tmp $<
+ $(QUIET)$(SED) -e '1,/\$$VBOX_MANAGE_OUTPUT/!d' \
+ -e 's/\$$VBOX_MANAGE_OUTPUT.*//' \
+ --output $@ $@.tmp
+ $(QUIET)$(REDIRECT) -wo $@.tmp2 -E 'VBOX_LOG_FLAGS=disabled' -E 'VBOX_LOG_DEST=nofile' \
+ $(if $(eq $(KBUILD_TARGET),darwin), -E 'DYLD_FALLBACK_LIBRARY_PATH=$(dir $(LIB_RUNTIME))') \
+ -- \
+ $(VBOXMANAGEPATH) --dumpopts
+ $(QUIET)$(SED) -e 's/</\&lt;/g' -e 's/>/\&gt;/g' --append $@ $@.tmp2
+ $(QUIET)$(SED) -e '/\$$VBOX_MANAGE_OUTPUT/,$$!d' \
+ -e 's/.*\$$VBOX_MANAGE_OUTPUT//' --append $@ $@.tmp
+ $(QUIET)$(RM) -f $@.tmp $@.tmp2
+
+VBOX_MANUAL_APIREF_TMP = $(VBOX_PATH_MANUAL_OUTBASE)/en_US/SDKRef_apiref.xml
+VBOX_DOC_XIDL_SRC = $(PATH_ROOT)/src/VBox/Main/idl/VirtualBox.xidl
+VBOX_DOC_XIDL_SRC_TMP = $(VBOX_PATH_MANUAL_OUTBASE)/en_US/VirtualBox.xidl.tmp
+
+$(VBOX_DOC_XIDL_SRC_TMP): $(VBOX_DOC_XIDL_SRC) $(MAKEFILE_CURRENT) | $$(dir $$@)
+ $(call MSG_L1,Generating $@)
+ $(QUIET)$(SED) -e 's|@a \+\(\w\+\)|<tt>\1</tt>|g' \
+ -e 's|@c \+\(\w\+\)|<tt>\1</tt>|g' \
+ --output $@ $<
+
+# generate SDKRef_apiref.xml as a docbook file excerpt that will be referenced from the SDKRef.xml.
+$(VBOX_MANUAL_APIREF_TMP): $(VBOX_DOC_XIDL_SRC_TMP) $(VBOX_PATH_MANUAL_SRC)/xidl2docbook.xsl
+ $(call MSG_L1,Generating $@)
+ $(QUIET)$(VBOX_XSLTPROC) --xinclude -o $@ $(VBOX_PATH_MANUAL_SRC)/xidl2docbook.xsl $(VBOX_DOC_XIDL_SRC_TMP)
+
+$(VBOX_PATH_MANUAL_OUTBASE)/en_US/SDKRef.xml: \
+ $(VBOX_PATH_MANUAL_SRC)/en_US/SDKRef.xml $(VBOX_MANUAL_APIREF_TMP) \
+ | $$(dir $$@)
+ $(call MSG_L1,Pre-processing [2] $(@F) to $@)
+ $(QUIET)$(RM) -f $@ $@.tmp
+ $(QUIET)$(SED) -e 's/\$$VBOX_VERSION_MAJOR/$(VBOX_VERSION_MAJOR)/g' \
+ -e 's/\$$VBOX_VERSION_MINOR/$(VBOX_VERSION_MINOR)/g' \
+ -e 's/\$$VBOX_VERSION_BUILD/$(VBOX_VERSION_BUILD)/g' \
+ -e 's/\$$VBOX_VERSION_STRING/$(VBOX_VERSION_STRING)/g' \
+ -e 's/\$$VBOX_VENDOR/$(VBOX_VENDOR)/g' \
+ -e 's/\$$VBOX_PRODUCT/$(VBOX_PRODUCT)/g' \
+ -e 's/\$$VBOX_C_YEAR/$(VBOX_C_YEAR)/g' \
+ --output $@.tmp $<
+ $(QUIET)$(SED) -e '1,/<!--\$$VIRTUALBOX_MAIN_API_REFERENCE-->/!d' \
+ -e 's/<!--\$$VIRTUALBOX_MAIN_API_REFERENCE-->//' \
+ --output $@ $@.tmp
+ $(QUIET)$(SED) -e 's/<?xml version=\"1.0\" encoding=\"utf-8\"?>//g' --append $@ $(VBOX_MANUAL_APIREF_TMP)
+ $(QUIET)$(SED) -e '/<!--\$$VIRTUALBOX_MAIN_API_REFERENCE-->/,$$!d' \
+ -e 's/<!--\$$VIRTUALBOX_MAIN_API_REFERENCE-->//' --append $@ $@.tmp
+# $(QUIET)$(MV) -f $@.tmp $@
+
+
+##########################################################################################
+#
+# Rules: Create or preprocess files for xsltproc
+# (preliminary step for both CHM and PDF generation)
+#
+##########################################################################################
+
+# Create a catalog file for xsltproc that points to docbook catalog.
+ifneq ($(XML_CATALOG),)
+$(XML_CATALOG): $(MAKEFILE_CURRENT) | $$(dir $$@)
+ $(call MSG_L1,Creating catalog $@)
+ $(QUIET)$(RM) -f $@.tmp $@
+ $(QUIET)$(APPEND) $@.tmp '<?xml version="1.0"?>'
+ $(QUIET)$(APPEND) $@.tmp '<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">'
+ $(QUIET)$(APPEND) $@.tmp '<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">'
+ $(QUIET)$(APPEND) $@.tmp ' <delegatePublic publicIdStartString="-//OASIS/ENTITIES DocBook XML" catalog="file:///$(XML_CATALOG_DOCBOOK)"/>'
+ $(QUIET)$(APPEND) $@.tmp ' <delegatePublic publicIdStartString="-//OASIS/DTD DocBook XML" catalog="file:///$(XML_CATALOG_DOCBOOK)"/>'
+ $(QUIET)$(APPEND) $@.tmp ' <delegateSystem systemIdStartString="http://www.oasis-open.org/docbook/" catalog="file:///$(XML_CATALOG_DOCBOOK)"/>'
+ $(QUIET)$(APPEND) $@.tmp ' <delegateURI uriStartString="http://www.oasis-open.org/docbook/" catalog="file:///$(XML_CATALOG_DOCBOOK)"/>'
+ $(QUIET)$(APPEND) $@.tmp '</catalog>'
+ $(QUIET)$(MV) -f $@.tmp $@
+
+# Create a docbook catalog file for xsltproc that points to the local docbook files.
+$(XML_CATALOG_DOCBOOK): $(MAKEFILE_CURRENT) | $$(dir $$@)
+ $(call MSG_L1,Creating catalog $@)
+ $(QUIET)$(RM) -f $@.tmp $@
+ $(QUIET)$(APPEND) $@.tmp '<?xml version="1.0"?>'
+ $(QUIET)$(APPEND) $@.tmp '<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">'
+ $(QUIET)$(APPEND) $@.tmp '<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">'
+ $(QUIET)$(APPEND) $@.tmp ' <public publicId="-//OASIS//ELEMENTS DocBook XML Information Pool V4.3//EN" uri="file:///$(DOCBOOKDTDPATH)/dbpoolx.mod"/>'
+ $(QUIET)$(APPEND) $@.tmp ' <public publicId="-//OASIS//DTD DocBook XML V4.3//EN" uri="file:///$(DOCBOOKDTDPATH)/docbookx.dtd"/>'
+ $(QUIET)$(APPEND) $@.tmp ' <public publicId="-//OASIS//DTD DocBook XML V4.4//EN" uri="file:///$(DOCBOOKDTDPATH)/docbookx.dtd"/>'
+ $(QUIET)$(APPEND) $@.tmp ' <public publicId="-//OASIS//ENTITIES DocBook XML Character Entities V4.3//EN" uri="file:///$(DOCBOOKDTDPATH)/dbcentx.mod"/>'
+ $(QUIET)$(APPEND) $@.tmp ' <public publicId="-//OASIS//ENTITIES DocBook XML Notations V4.3//EN" uri="file:///$(DOCBOOKDTDPATH)/dbnotnx.mod"/>'
+ $(QUIET)$(APPEND) $@.tmp ' <public publicId="-//OASIS//ENTITIES DocBook XML Additional General Entities V4.3//EN" uri="file:///$(DOCBOOKDTDPATH)/dbgenent.mod"/>'
+ $(QUIET)$(APPEND) $@.tmp ' <public publicId="-//OASIS//ELEMENTS DocBook XML Document Hierarchy V4.3//EN" uri="file:///$(DOCBOOKDTDPATH)/dbhierx.mod"/>'
+ $(QUIET)$(APPEND) $@.tmp ' <public publicId="-//OASIS//DTD XML Exchange Table Model 19990315//EN" uri="file:///$(DOCBOOKDTDPATH)/soextblx.dtd"/>'
+ $(QUIET)$(APPEND) $@.tmp ' <public publicId="-//OASIS//DTD DocBook XML CALS Table Model V4.3//EN" uri="file:///$(DOCBOOKDTDPATH)/calstblx.dtd"/>'
+ $(QUIET)$(APPEND) $@.tmp ' <rewriteSystem systemIdStartString="http://www.oasis-open.org/docbook/xml/4.3" rewritePrefix="file:///$(DOCBOOKDTDPATH)"/>'
+ $(QUIET)$(APPEND) $@.tmp ' <rewriteURI uriStartString="http://www.oasis-open.org/docbook/xml/4.3" rewritePrefix="file:///$(DOCBOOKDTDPATH)"/>'
+ $(QUIET)$(APPEND) $@.tmp ' <rewriteSystem systemIdStartString="http://www.oasis-open.org/docbook/xml/4.4" rewritePrefix="file:///$(DOCBOOKDTDPATH)"/>'
+ $(QUIET)$(APPEND) $@.tmp ' <rewriteURI uriStartString="http://www.oasis-open.org/docbook/xml/4.4" rewritePrefix="file:///$(DOCBOOKDTDPATH)"/>'
+ $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Added Math Symbols: Arrow Relations//EN" uri="file:///$(DOCBOOKDTDPATH)/ent/iso-amsa.ent"/>'
+ $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Added Math Symbols: Binary Operators//EN" uri="file:///$(DOCBOOKDTDPATH)/ent/iso-amsb.ent"/>'
+ $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Added Math Symbols: Delimiters//EN" uri="file:///$(DOCBOOKDTDPATH)/ent/iso-amsc.ent"/>'
+ $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Added Math Symbols: Negated Relations//EN" uri="file:///$(DOCBOOKDTDPATH)/ent/iso-amsn.ent"/>'
+ $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Added Math Symbols: Ordinary//EN" uri="file:///$(DOCBOOKDTDPATH)/ent/iso-amso.ent"/>'
+ $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Added Math Symbols: Relations//EN" uri="file:///$(DOCBOOKDTDPATH)/ent/iso-amsr.ent"/>'
+ $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Box and Line Drawing//EN" uri="file:///$(DOCBOOKDTDPATH)/ent/iso-box.ent"/>'
+ $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Russian Cyrillic//EN" uri="file:///$(DOCBOOKDTDPATH)/ent/iso-cyr1.ent"/>'
+ $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Non-Russian Cyrillic//EN" uri="file:///$(DOCBOOKDTDPATH)/ent/iso-cyr2.ent"/>'
+ $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Diacritical Marks//EN" uri="file:///$(DOCBOOKDTDPATH)/ent/iso-dia.ent"/>'
+ $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Greek Letters//EN" uri="file:///$(DOCBOOKDTDPATH)/ent/iso-grk1.ent"/>'
+ $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Monotoniko Greek//EN" uri="file:///$(DOCBOOKDTDPATH)/ent/iso-grk2.ent"/>'
+ $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Greek Symbols//EN" uri="file:///$(DOCBOOKDTDPATH)/ent/iso-grk3.ent"/>'
+ $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Alternative Greek Symbols//EN" uri="file:///$(DOCBOOKDTDPATH)/ent/iso-grk4.ent"/>'
+ $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Added Latin 1//EN" uri="file:///$(DOCBOOKDTDPATH)/ent/iso-lat1.ent"/>'
+ $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Added Latin 2//EN" uri="file:///$(DOCBOOKDTDPATH)/ent/iso-lat2.ent"/>'
+ $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Numeric and Special Graphic//EN" uri="file:///$(DOCBOOKDTDPATH)/ent/iso-num.ent"/>'
+ $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES Publishing//EN" uri="file:///$(DOCBOOKDTDPATH)/ent/iso-pub.ent"/>'
+ $(QUIET)$(APPEND) $@.tmp ' <public publicId="ISO 8879:1986//ENTITIES General Technical//EN" uri="file:///$(DOCBOOKDTDPATH)/ent/iso-tech.ent"/>'
+ $(QUIET)$(APPEND) $@.tmp '</catalog>'
+ $(QUIET)$(MV) -f $@.tmp $@
+endif
+
+# intermediate step to do some variable replacement in the XSL configuration
+$(foreach f,$(VBOX_MANUAL_LANGUAGES),$(VBOX_PATH_MANUAL_OUTBASE)/$f/docbook-htmlhelp-formatcfg.xsl): \
+ $(VBOX_PATH_MANUAL_SRC)/docbook-htmlhelp-formatcfg.xsl $(MAKEFILE_CURRENT) | $$(dir $$@)
+ $(call MSG_L1,Pre-processing $(@F) to $@)
+ $(QUIET)$(RM) -f $@.tmp $@
+ $(QUIET)$(SED) -e 's|\$$DOCBOOKPATH|$(DOCBOOKPATH)|g' \
+ -e 's|\$$CFGPATH|$(VBOX_PATH_MANUAL_SRC)|g' \
+ -e 's|\$$TARGETPATH|$(@D)|g' --output $@.tmp $<
+ $(QUIET)$(MV) -f $@.tmp $@
+
+# Prepare the XSL file for our title page, htmlhelp variant.
+$(foreach f,$(VBOX_MANUAL_LANGUAGES),$(VBOX_PATH_MANUAL_OUTBASE)/$f/titlepage-htmlhelp.xsl): \
+ $(VBOX_PATH_MANUAL_SRC)/titlepage-htmlhelp.xml $(MAKEFILE_CURRENT) | $$(dir $$@)
+ $(call MSG_L1,xsltproc $<)
+ $(QUIET)$(RM) -f $@.tmp $@
+ $(QUIET)$(VBOX_XSLTPROC) --xinclude --nonet -o $@.tmp $(DOCBOOKPATH)/template/titlepage.xsl $<
+ $(QUIET)$(MV) -f $@.tmp $@
+
+
+##########################################################################################
+#
+# Shared rules for PDF generation
+#
+##########################################################################################
+
+ifndef VBOX_OSE
+# copy ucs.sty and related files
+$(foreach f,$(VBOX_MANUAL_LANGUAGES),$(VBOX_PATH_MANUAL_OUTBASE)/$f/ucs.sty):
+ $(call MSG_L1,Copying unicode support for LaTeX)
+ $(QUIET)$(CP) $(VBOX_MANUAL_TEX_UNICODE_FILES) $(@D)
+endif
+
+# copy the PNG files.
+# Note: out_dir needs to be referenced with an escaped $ so it doesn't expand as eval expands it input.
+define def_vbox_cp_images_pdf
+local out_dir := $(VBOX_PATH_MANUAL_OUTBASE)/$(lang)
+$(addprefix $$(out_dir)/,$(VBOX_MANUAL_PNG_FILES_$(lang))): \
+ $$(out_dir)/%: $(VBOX_PATH_MANUAL_SRC)/$(lang)/% | $$$$(dir $$$$@)
+ $$(call MSG_L1,Copying temporary $$< => $$@)
+ $$(QUIET)$$(CP) -f $$< $$@
+endef
+
+$(foreach lang,$(VBOX_MANUAL_LANGUAGES),$(eval $(def_vbox_cp_images_pdf)))
+
+
+##########################################################################################
+#
+# UserManual.pdf
+#
+##########################################################################################
+
+## @todo INSTALLS target for this!
+$(PATH_STAGE_BIN)/UserManual.pdf: $(VBOX_PATH_MANUAL_OUTBASE)/en_US/UserManual.pdf | $$(dir $$@)
+ $(QUIET)$(CP) $< $@
+ $(call MSG_L1,Fresh LaTeX-generated PDF is now at $@)
+
+$(foreach f,$(VBOX_MANUAL_ADD_LANGUAGES),$(PATH_STAGE_BIN)/UserManual_$(f).pdf): \
+ $(PATH_STAGE_BIN)/UserManual_%.pdf : $(VBOX_PATH_MANUAL_OUTBASE)/%/UserManual.pdf
+ $(QUIET)$(CP) $< $@
+ $(call MSG_L1,Fresh LaTeX-generated PDF is now at $@)
+
+$(foreach f,$(VBOX_MANUAL_LANGUAGES),$(VBOX_PATH_MANUAL_OUTBASE)/$f/UserManual.pdf): \
+ $(VBOX_PATH_MANUAL_OUTBASE)/%/UserManual.pdf : \
+ $(VBOX_PATH_MANUAL_OUTBASE)/%/UserManual.tex \
+ $(if $(VBOX_OSE),,$(VBOX_PATH_MANUAL_OUTBASE)/%/ucs.sty) \
+ $(foreach f,$(VBOX_MANUAL_LANGUAGES),\
+ $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/$f/,$(VBOX_MANUAL_PNG_FILES_$(f)))) | $$(dir $$@)
+# PDF generation via Latex: generate the .tex file
+ $(call MSG_L1,pdflatex $< (four passes) -> $@)
+ $(QUIET)$(REDIRECT) -w+ti /dev/null -C $(@D) -- $(PDFLATEX) UserManual.tex
+ $(QUIET)$(REDIRECT) -w+ti /dev/null -C $(@D) -- $(PDFLATEX) UserManual.tex
+ $(QUIET)$(REDIRECT) -w+ti /dev/null -C $(@D) -- $(PDFLATEX) UserManual.tex
+ $(QUIET)$(REDIRECT) -w+ti /dev/null -C $(@D) -- $(PDFLATEX) UserManual.tex
+ $(QUIET)$(SED) -n \
+ -e '/Warning: There were \(undefined references\|multiply-defined labels\)/{p; q 1}' \
+ $(basename $@).log
+
+##@todo restore this when above has been converted to INSTALLS target. $(call MSG_L1,Fresh LaTeX-generated PDF is now at $@)
+
+# generate temporary LaTeX source from processed XML
+$(foreach f,$(VBOX_MANUAL_LANGUAGES),$(VBOX_PATH_MANUAL_OUTBASE)/$f/UserManual.tex): \
+ $(VBOX_PATH_MANUAL_OUTBASE)/%/UserManual.tex : \
+ $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/%/,$(VBOX_MANUAL_XML_FILES_INCL_CHANGELOG)) \
+ $(VBOX_PATH_MANUAL_SRC)/docbook2latex.xsl \
+ $(MAKEFILE_CURRENT)
+ $(call MSG_L1,Generating $@ from DocBook XML)
+ $(QUIET)$(RM) -f $(addprefix $(@D)/,$(VBOX_MANUAL_LATEX_FILES_TARGET))
+# generate TeX source from processed docbook and store it in UserManual.tex.tmp;
+# pass current language to xsltproc in TARGETLANG variable (extract it from the
+# current directory, should become "de_DE" or the like)
+ $(QUIET)$(VBOX_XSLTPROC) $(XSLTPROC_VERBOSE) --xinclude --nonet --stringparam TARGETLANG $(notdir $(@D)) -o $@.tmp $(VBOX_PATH_MANUAL_SRC)/docbook2latex.xsl $<
+# for pretty quotes, replace " with `` or '' depending on whether it's at the start of a word;
+# the \QUOTE{} was inserted by docbook2latex.xsl for all quotes _outside_ of screen sections
+ $(QUIET)$(SED) \
+ -e 's|^\\QUOTE{}|\\OQ{}|g' \
+ -e 's|\(\W\)\\QUOTE{}|\1\\OQ{}|g' \
+ -e 's|\(\w\)\\QUOTE{}|\1\\CQ{}|g' \
+ --output $@ $@.tmp
+ $(QUIET)$(RM) -f $@.tmp
+
+
+##########################################################################################
+#
+# SDKRef.pdf
+#
+##########################################################################################
+
+$(VBOX_PATH_SDK)/docs/SDKRef.pdf: \
+ $(VBOX_PATH_MANUAL_OUTBASE)/en_US/SDKRef.tex \
+ $(if $(VBOX_OSE),,$(VBOX_PATH_MANUAL_OUTBASE)/en_US/ucs.sty) \
+ $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/en_US/,$(VBOX_MANUAL_PNG_FILES_en_US)) | $$(dir $$@)
+# PDF generation via Latex: generate the .tex file
+ $(QUIET)$(MKDIR) -p $(VBOX_PATH_SDK)/docs
+ $(call MSG_L1,pdflatex $< (three passes))
+ $(QUIET)$(REDIRECT) -C $(<D) -- $(PDFLATEX) SDKRef.tex
+ $(QUIET)$(REDIRECT) -C $(<D) -- $(PDFLATEX) SDKRef.tex
+ $(QUIET)$(REDIRECT) -C $(<D) -- $(PDFLATEX) SDKRef.tex
+ $(QUIET)$(SED) -n \
+ -e '/Warning: There were \(undefined references\|multiply-defined labels\)/{p; q 1}' \
+ $(basename $<).log
+ $(QUIET)$(CP) $(<D)/SDKRef.pdf $@
+ $(call MSG_L1,Fresh LaTeX-generated PDF is now at $@)
+
+# generate temporary LaTeX source from processed XML
+$(VBOX_PATH_MANUAL_OUTBASE)/en_US/SDKRef.tex: $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/en_US/,$(VBOX_SDKREF_XML_FILES)) $(VBOX_PATH_MANUAL_SRC)/docbook2latex.xsl $(MAKEFILE_CURRENT)
+ $(call MSG_L1,Generating $@ from DocBook XML)
+ $(QUIET)$(RM) -f $(addprefix $(@D/),$(VBOX_SDKREF_LATEX_FILES_TARGET))
+# generate TeX source from processed docbook and store it in SDKRef.tex.tmp
+ $(QUIET)$(VBOX_XSLTPROC) $(XSLTPROC_VERBOSE) --xinclude --nonet --stringparam TARGETLANG en_US -o $@.tmp $(VBOX_PATH_MANUAL_SRC)/docbook2latex.xsl $<
+# for pretty quotes, replace " with `` or '' depending on whether it's at the start of a word;
+# the \QUOTE{} was inserted by docbook2latex.xsl for all quotes _outside_ of screen sections
+ $(QUIET)$(SED) \
+ -e 's|^\\QUOTE{}|\\OQ{}|g' \
+ -e 's|\(\W\)\\QUOTE{}|\1\\OQ{}|g' \
+ -e 's|\(\w\)\\QUOTE{}|\1\\CQ{}|g' \
+ --output $@ $@.tmp
+ $(QUIET)$(RM) -f $@.tmp
+
+
+##########################################################################################
+#
+# VirtualBox.chm
+#
+##########################################################################################
+
+#
+# Main rule for the .chm file (target of OTHERS at the top):
+# We first generate a .hhp help source file from the preprocessed
+# DocBook XML files, as defined above, then feed that into the
+# Microsoft Help Compiler.
+#
+
+ifdef VBOX_WITH_DOCS_CHM
+$(PATH_STAGE_BIN)/VirtualBox.chm: $(VBOX_PATH_MANUAL_OUTBASE)/en_US/VirtualBox.chm
+ $(QUIET)$(CP) $< $@
+ $(call MSG_L1,Fresh CHM is now at $@)
+
+$(foreach f,$(VBOX_MANUAL_ADD_LANGUAGES),$(PATH_STAGE_BIN)/VirtualBox_$(f).chm): \
+ $(PATH_STAGE_BIN)/VirtualBox_%.chm : $(VBOX_PATH_MANUAL_OUTBASE)/%/VirtualBox.chm
+ $(QUIET)$(CP) $< $@
+ $(call MSG_L1,Fresh CHM is now at $@)
+
+$(foreach f,$(VBOX_MANUAL_LANGUAGES),$(VBOX_PATH_MANUAL_OUTBASE)/$f/VirtualBox.chm): \
+ $(VBOX_PATH_MANUAL_OUTBASE)/%/VirtualBox.chm: \
+ $(VBOX_PATH_MANUAL_OUTBASE)/%/HTMLHelp/htmlhelp.hhp \
+ $(foreach f,$(VBOX_MANUAL_LANGUAGES),$(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/$f/HTMLHelp/,$(VBOX_MANUAL_PNG_FILES_$(f))))
+ $(call MSG_L1,hhc $<,=> $@)
+ $(QUIET)$(RM) -f $@
+ $(QUIET)$(HHC) $(subst /,\\,$<)
+
+$(foreach f,$(VBOX_MANUAL_LANGUAGES),$(VBOX_PATH_MANUAL_OUTBASE)/$f/HTMLHelp/htmlhelp.hhp): \
+ $(VBOX_PATH_MANUAL_OUTBASE)/%/HTMLHelp/htmlhelp.hhp: \
+ $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/%/,$(VBOX_MANUAL_XML_FILES_INCL_CHANGELOG)) \
+ $(VBOX_PATH_MANUAL_OUTBASE)/%/docbook-htmlhelp-formatcfg.xsl \
+ $(VBOX_PATH_MANUAL_OUTBASE)/%/titlepage-htmlhelp.xsl \
+ $(XML_CATALOG) \
+ $(XML_CATALOG_DOCBOOK)
+ $(call MSG_L1,xsltproc $<,=> $@)
+ $(QUIET)$(RM) -f $@
+ $(QUIET)$(MKDIR) -p $(@D)
+ $(QUIET)$(if $(XML_CATALOG),XML_CATALOG_FILES=$(XML_CATALOG)) \
+ $(VBOX_XSLTPROC) --xinclude --nonet --output $(@D)/ \
+ --stringparam htmlhelp.chm \
+ $(subst /,\\,$(@D)/../VirtualBox.chm) \
+ $(HTMLHELPOPTS) $(@D)/../docbook-htmlhelp-formatcfg.xsl \
+ $<
+
+# copy the PNG files.
+# Note: out_dir needs to be referenced with an escaped $ so it doesn't expand as eval expands it input.
+define def_vbox_cp_images_html
+local out_dir := $(VBOX_PATH_MANUAL_OUTBASE)/$(lang)/HTMLHelp
+$$(addprefix $$(out_dir)/,$(VBOX_MANUAL_PNG_FILES_$(lang))): \
+ $$(out_dir)/%: $(VBOX_PATH_MANUAL_SRC)/$(lang)/% | $$$$(dir $$$$@)
+ $$(call MSG_L1,Copying temporary $$< => $$@)
+ $$(QUIET)$$(CP) -f $$< $$@
+endef
+
+$(foreach lang,$(VBOX_MANUAL_LANGUAGES),$(eval $(def_vbox_cp_images_html)))
+
+# Packing the docs into a zip file
+$(PATH_STAGE_BIN)/VBoxDocumentation.zip: $(VBOX_MANUAL_PACK)
+ $(call MSG_L1,Packing documentation $@)
+ $(QUIET)$(RM) -f $@
+ $(QUIET)$(REDIRECT) -C $(PATH_STAGE_BIN) -- zip$(HOSTSUFF_EXE) -9 $@ $(notdir $^)
+endif # VBOX_WITH_DOCS_CHM
+
+##########################################################################################
+#
+# UserManual.html
+#
+##########################################################################################
+
+# intermediate step to do some variable replacement in the XSL configuration
+$(VBOX_PATH_MANUAL_OUTBASE)/en_US/docbook-html-one-page-formatcfg.xsl: \
+ $(VBOX_PATH_MANUAL_SRC)/docbook-html-one-page-formatcfg.xsl $(MAKEFILE_CURRENT) | $$(dir $$@)
+ $(call MSG_L1,Pre-processing $(@F) to $@)
+ $(QUIET)$(RM) -f $@.tmp $@
+ $(QUIET)$(SED) -e 's|\$$DOCBOOKPATH|$(DOCBOOKPATH)|g' \
+ -e 's|\$$CFGPATH|$(VBOX_PATH_MANUAL_SRC)|g' \
+ -e 's|\$$TARGETPATH|$(@D)|g' --output $@.tmp $<
+ $(QUIET)$(MV) -f $@.tmp $@
+
+$(VBOX_PATH_MANUAL_OUTBASE)/en_US/docbook-html-chunks-formatcfg.xsl: \
+ $(VBOX_PATH_MANUAL_SRC)/docbook-html-chunks-formatcfg.xsl $(MAKEFILE_CURRENT) | $$(dir $$@)
+ $(call MSG_L1,Pre-processing $(@F) to $@)
+ $(QUIET)$(RM) -f $@.tmp $@
+ $(QUIET)$(SED) -e 's|\$$DOCBOOKPATH|$(DOCBOOKPATH)|g' \
+ -e 's|\$$CFGPATH|$(VBOX_PATH_MANUAL_SRC)|g' \
+ -e 's|\$$TARGETPATH|$(@D)|g' --output $@.tmp $<
+ $(QUIET)$(MV) -f $@.tmp $@
+
+$(VBOX_PATH_MANUAL_OUTBASE)/en_US/html-single/UserManual.html: \
+ $(VBOX_PATH_MANUAL_OUTBASE)/en_US/docbook-html-one-page-formatcfg.xsl \
+ $(VBOX_PATH_MANUAL_OUTBASE)/en_US/UserManual.xml \
+ $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/en_US/,$(VBOX_MANUAL_XML_FILES_INCL_CHANGELOG)) \
+ $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/en_US/,$(VBOX_MANUAL_PNG_FILES_en_US))
+ $(call MSG_L1,xsltproc $<)
+ $(QUIET)$(VBOX_XSLTPROC) --xinclude --nonet \
+ --output $(VBOX_PATH_MANUAL_OUTBASE)/en_US/html-single/UserManual.html \
+ $(VBOX_PATH_MANUAL_OUTBASE)/en_US/docbook-html-one-page-formatcfg.xsl \
+ $(VBOX_PATH_MANUAL_OUTBASE)/en_US/UserManual.xml
+
+$(VBOX_PATH_MANUAL_OUTBASE)/en_US/html-chunks/index.html: \
+ $(VBOX_PATH_MANUAL_OUTBASE)/en_US/docbook-html-chunks-formatcfg.xsl \
+ $(VBOX_PATH_MANUAL_OUTBASE)/en_US/UserManual.xml \
+ $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/en_US/,$(VBOX_MANUAL_XML_FILES_INCL_CHANGELOG)) \
+ $(addprefix $(VBOX_PATH_MANUAL_OUTBASE)/en_US/,$(VBOX_MANUAL_PNG_FILES_en_US))
+ $(call MSG_L1,xsltproc $<)
+ $(QUIET)$(VBOX_XSLTPROC) --xinclude --nonet \
+ --output $(VBOX_PATH_MANUAL_OUTBASE)/en_US/html-chunks/index.html \
+ --stringparam chunk.section.depth 0 \
+ $(VBOX_PATH_MANUAL_OUTBASE)/en_US/docbook-html-chunks-formatcfg.xsl \
+ $(VBOX_PATH_MANUAL_OUTBASE)/en_US/UserManual.xml
+
+$(VBOX_PATH_MANUAL_OUTBASE)/en_US/UserManual.zip: \
+ $(VBOX_PATH_MANUAL_OUTBASE)/en_US/html-single/UserManual.html \
+ $(VBOX_PATH_MANUAL_OUTBASE)/en_US/html-chunks/index.html
+ $(call MSG_L1,Packing documentation $@)
+ $(QUIET)$(RM) -f $@
+ $(QUIET)$(REDIRECT) -C $(VBOX_PATH_MANUAL_OUTBASE)/en_US/ -- zip$(HOSTSUFF_EXE) \
+ -9 -r $@ html-single html-chunks $(VBOX_MANUAL_PNG_FILES_en_US)
+
+html:: $(VBOX_PATH_MANUAL_OUTBASE)/en_US/html-single/UserManual.html
+
+html:: $(VBOX_PATH_MANUAL_OUTBASE)/en_US/html-chunks/index.html
+
+html-zip:: $(VBOX_PATH_MANUAL_OUTBASE)/en_US/UserManual.zip
+
+##########################################################################################
+#
+# ChangeLog.html
+#
+##########################################################################################
+
+# intermediate step to do some variable replacement in the XSL configuration
+$(VBOX_PATH_MANUAL_OUTBASE)/en_US/docbook-changelog-formatcfg.xsl: \
+ $(VBOX_PATH_MANUAL_SRC)/docbook-changelog-formatcfg.xsl $(MAKEFILE_CURRENT) | $$(dir $$@)
+ $(call MSG_L1,Pre-processing $(@F) to $@)
+ $(QUIET)$(RM) -f $@.tmp $@
+ $(QUIET)$(SED) -e 's|\$$DOCBOOKPATH|$(DOCBOOKPATH)|g' \
+ -e 's|\$$CFGPATH|$(VBOX_PATH_MANUAL_SRC)|g' \
+ -e 's|\$$TARGETPATH|$(@D)|g' --output $@.tmp $<
+ $(QUIET)$(MV) -f $@.tmp $@
+
+# This XSLT rule depends on $(VBOX_PATH_MANUAL_OUTBASE)/en_US/user_ChangeLog.xml, which is build by the complex rule
+# $(foreach f,$(VBOX_MANUAL_LANGUAGES),$(VBOX_PATH_MANUAL_OUTBASE)/$f/user_ChangeLog.xml): ...
+# much further above. That rule takes en_US/user_ChangeLog.xml and replaces $VIRTUALBOX_CHANGELOG_IMPL
+# with the actual change log contained in user_ChangeLogImpl.xml
+$(VBOX_PATH_MANUAL_OUTBASE)/en_US/ChangeLog.html: \
+ $(VBOX_PATH_MANUAL_OUTBASE)/en_US/docbook-changelog-formatcfg.xsl \
+ $(VBOX_PATH_MANUAL_OUTBASE)/en_US/user_ChangeLog.xml
+ $(QUIET)$(VBOX_XSLTPROC) --xinclude --nonet --output $(VBOX_PATH_MANUAL_OUTBASE)/en_US/ChangeLog.html \
+ $(@D)/docbook-changelog-formatcfg.xsl \
+ $(VBOX_PATH_MANUAL_OUTBASE)/en_US/user_ChangeLog.xml
+ $(call MSG_L1,Fresh ChangeLog.html is now at $@)
+
+cl-html: $(VBOX_PATH_MANUAL_OUTBASE)/en_US/ChangeLog.html
+
+include $(FILE_KBUILD_SUB_FOOTER)
+
diff --git a/doc/manual/common-formatcfg.xsl b/doc/manual/common-formatcfg.xsl
new file mode 100644
index 00000000..c6ac1e02
--- /dev/null
+++ b/doc/manual/common-formatcfg.xsl
@@ -0,0 +1,58 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+<!-- General formatting settings. -->
+<xsl:variable name="section.autolabel">1</xsl:variable>
+<xsl:variable name="section.label.includes.component.label">1</xsl:variable>
+<xsl:attribute-set name="monospace.properties">
+ <xsl:attribute name="font-size">90%</xsl:attribute>
+</xsl:attribute-set>
+<xsl:param name="draft.mode" select="'no'"/>
+
+<!-- Shift down section sizes one magstep. -->
+<xsl:attribute-set name="section.title.level1.properties">
+ <xsl:attribute name="font-size">
+ <xsl:value-of select="$body.font.master * 1.728"></xsl:value-of>
+ <xsl:text>pt</xsl:text>
+ </xsl:attribute>
+</xsl:attribute-set>
+<xsl:attribute-set name="section.title.level2.properties">
+ <xsl:attribute name="font-size">
+ <xsl:value-of select="$body.font.master * 1.44"></xsl:value-of>
+ <xsl:text>pt</xsl:text>
+ </xsl:attribute>
+</xsl:attribute-set>
+<xsl:attribute-set name="section.title.level3.properties">
+ <xsl:attribute name="font-size">
+ <xsl:value-of select="$body.font.master * 1.2"></xsl:value-of>
+ <xsl:text>pt</xsl:text>
+ </xsl:attribute>
+</xsl:attribute-set>
+<xsl:attribute-set name="section.title.level4.properties">
+ <xsl:attribute name="font-size">
+ <xsl:value-of select="$body.font.master"></xsl:value-of>
+ <xsl:text>pt</xsl:text>
+ </xsl:attribute>
+</xsl:attribute-set>
+<xsl:attribute-set name="section.title.level5.properties">
+ <xsl:attribute name="font-size">
+ <xsl:value-of select="$body.font.master"></xsl:value-of>
+ <xsl:text>pt</xsl:text>
+ </xsl:attribute>
+</xsl:attribute-set>
+<xsl:attribute-set name="section.title.level6.properties">
+ <xsl:attribute name="font-size">
+ <xsl:value-of select="$body.font.master"></xsl:value-of>
+ <xsl:text>pt</xsl:text>
+ </xsl:attribute>
+</xsl:attribute-set>
+
+<!-- Shift down chapter font size one magstep. -->
+<xsl:attribute-set name="component.title.properties">
+ <xsl:attribute name="font-size">
+ <xsl:value-of select="$body.font.master * 2.0736"></xsl:value-of>
+ <xsl:text>pt</xsl:text>
+ </xsl:attribute>
+</xsl:attribute-set>
+
+</xsl:stylesheet>
diff --git a/doc/manual/docbook-htmlhelp-formatcfg.xsl b/doc/manual/docbook-htmlhelp-formatcfg.xsl
new file mode 100644
index 00000000..6d198896
--- /dev/null
+++ b/doc/manual/docbook-htmlhelp-formatcfg.xsl
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+<xsl:import href="$DOCBOOKPATH/htmlhelp/htmlhelp.xsl"/>
+<xsl:import href="$CFGPATH/common-formatcfg.xsl"/>
+
+<xsl:include href="$TARGETPATH/titlepage-htmlhelp.xsl"/>
+
+</xsl:stylesheet>
diff --git a/doc/manual/docbook2latex.xsl b/doc/manual/docbook2latex.xsl
new file mode 100644
index 00000000..7aaf730f
--- /dev/null
+++ b/doc/manual/docbook2latex.xsl
@@ -0,0 +1,702 @@
+<?xml version="1.0"?>
+
+<!--
+ docbook2latex.xslt:
+ translates a DocBook XML source into a LaTeX source file,
+ which can be processed with pdflatex to produce a
+ pretty PDF file.
+
+ Note: In the LaTeX output, this XSLT encodes all quotes
+ with \QUOTE{} commands, which are not defined in this
+ file. This is because XSLT does not support regular
+ expressions natively and therefore it is rather difficult
+ to implement proper "pretty quotes" (different glyphs for
+ opening and closing quotes) in XSLT. The doc/manual/
+ makefile solves this by running sed over the LaTeX source
+ once more, replacing all \QUOTE{} commands with
+ \OQ{} and \CQ{} commands, which _are_ defined to the
+ pretty quotes for English in the LaTeX output generated
+ by this XSLT (see below).
+
+ Copyright (C) 2006-2012 Oracle Corporation
+
+ This file is part of VirtualBox Open Source Edition (OSE), as
+ available from http://www.virtualbox.org. This file is free software;
+ you can redistribute it and/or modify it under the terms of the GNU
+ General Public License (GPL) as published by the Free Software
+ Foundation, in version 2 as it comes in the "COPYING" file of the
+ VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ -->
+
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:str="http://xsltsl.org/string"
+>
+
+ <xsl:import href="string.xsl"/>
+
+ <xsl:variable name="g_nlsChapter">
+ <xsl:choose>
+ <xsl:when test="$TARGETLANG='de_DE'">Kapitel</xsl:when>
+ <xsl:when test="$TARGETLANG='fr_FR'">chapitre</xsl:when>
+ <xsl:when test="$TARGETLANG='en_US'">chapter</xsl:when>
+ <xsl:otherwise>
+ <xsl:message terminate="yes"><xsl:value-of select="concat('Invalid language ', $TARGETLANG)" /></xsl:message>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:variable name="g_nlsPage">
+ <xsl:choose>
+ <xsl:when test="$TARGETLANG='de_DE'">auf Seite</xsl:when>
+ <xsl:when test="$TARGETLANG='fr_FR'">page</xsl:when>
+ <xsl:when test="$TARGETLANG='en_US'">page</xsl:when>
+ <xsl:otherwise>
+ <xsl:message terminate="yes"><xsl:value-of select="concat('Invalid language ', $TARGETLANG)" /></xsl:message>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:variable name="g_nlsNote">
+ <xsl:choose>
+ <xsl:when test="$TARGETLANG='de_DE'">Hinweis</xsl:when>
+ <xsl:when test="$TARGETLANG='fr_FR'">Note</xsl:when>
+ <xsl:when test="$TARGETLANG='en_US'">Note</xsl:when>
+ <xsl:otherwise>
+ <xsl:message terminate="yes"><xsl:value-of select="concat('Invalid language ', $TARGETLANG)" /></xsl:message>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:variable name="g_nlsWarning">
+ <xsl:choose>
+ <xsl:when test="$TARGETLANG='de_DE'">Warnung</xsl:when>
+ <xsl:when test="$TARGETLANG='fr_FR'">Avertissement</xsl:when>
+ <xsl:when test="$TARGETLANG='en_US'">Warning</xsl:when>
+ <xsl:otherwise>
+ <xsl:message terminate="yes"><xsl:value-of select="concat('Invalid language ', $TARGETLANG)" /></xsl:message>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:output method="text"/>
+
+ <xsl:strip-space elements="*"/>
+
+ <xsl:template match="/book">
+ <xsl:text>
+\documentclass[oneside,a4paper,10pt,DIV10]{scrbook}
+\usepackage{geometry}
+\geometry{top=3cm,bottom=4cm}
+\usepackage{ucs}
+\usepackage[utf8x]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{tabulary}
+\usepackage[pdftex,
+ a4paper,
+ colorlinks=true,
+ linkcolor=blue,
+ bookmarksnumbered,
+ bookmarksopen=true,
+ bookmarksopenlevel=0,
+ hyperfootnotes=false,
+ plainpages=false,
+ pdfpagelabels
+ ]{hyperref}
+
+\usepackage{nameref}
+\usepackage{graphicx}
+\usepackage{fancybox}
+\usepackage{fancyvrb}
+\usepackage{alltt}
+\usepackage{color}
+
+</xsl:text>
+ <xsl:if test="$TARGETLANG='de_DE'">\usepackage[ngerman]{babel}&#10;\PrerenderUnicode{ü}</xsl:if>
+<!-- <xsl:if test="$TARGETLANG='fr_FR'">\usepackage[french]{babel}&#10;\FrenchItemizeSpacingfalse&#10;\renewcommand{\FrenchLabelItem}{\textbullet}</xsl:if>
+ this command is no longer understood by TexLive2008
+ -->
+ <xsl:text>
+
+% use Palatino as serif font:
+% \usepackage{mathpazo}
+\usepackage{charter}
+% use Helvetica as sans-serif font:
+\usepackage{helvet}
+
+% use Bera Mono (a variant of Bitstream Vera Mono) as typewriter font
+% (requires texlive-fontsextra)
+\usepackage[scaled]{beramono}
+% previously: use Courier as typewriter font:
+% \usepackage{courier}
+
+\definecolor{colNote}{rgb}{0,0,0}
+\definecolor{colWarning}{rgb}{0,0,0}
+\definecolor{colScreenFrame}{rgb}{0,0,0}
+\definecolor{colScreenText}{rgb}{0,0,0}
+
+% number headings down to this level
+\setcounter{secnumdepth}{3}
+% more space for the section numbers
+\makeatletter
+\renewcommand*\l@section{\@dottedtocline{1}{1.5em}{2.9em}}
+\renewcommand*\l@subsection{\@dottedtocline{2}{4.4em}{3.8em}}
+\renewcommand*\l@subsubsection{\@dottedtocline{3}{8.2em}{3.8em}}
+\renewcommand*\@pnumwidth{1.7em}
+\renewcommand*\@tocrmarg{5.0em}
+\makeatother
+
+% more tolerance at 2nd wrap stage:
+\tolerance = 1000
+% allow 3rd wrap stage:
+\emergencystretch = 10pt
+% no Schusterjungen:
+\clubpenalty = 10000
+% no Hurenkinder:
+\widowpenalty = 10000
+\displaywidowpenalty = 10000
+% max pdf compression:
+\pdfcompresslevel9
+
+% opening and closing quotes: the OQ and CQ macros define this (and the makefile employs some sed magic also)
+</xsl:text>
+ <xsl:choose>
+ <xsl:when test="$TARGETLANG='de_DE'">
+ <xsl:text>\newcommand\OQ{\texorpdfstring{\glqq}{"}}&#10;\newcommand\CQ{\texorpdfstring{\grqq}{"}}&#10;</xsl:text>
+ </xsl:when>
+ <xsl:when test="$TARGETLANG='fr_FR'">
+ <xsl:text>\newcommand\OQ{\texorpdfstring{``}{"}}&#10;\newcommand\CQ{\texorpdfstring{''}{"}}&#10;</xsl:text>
+ </xsl:when>
+ <xsl:when test="$TARGETLANG='en_US'">
+ <xsl:text>\newcommand\OQ{\texorpdfstring{``}{"}}&#10;\newcommand\CQ{\texorpdfstring{''}{"}}&#10;</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:message terminate="yes"><xsl:value-of select="concat('Invalid language ', $TARGETLANG)" /></xsl:message>
+ </xsl:otherwise>
+ </xsl:choose>
+
+ <xsl:apply-templates />
+
+ <xsl:text>
+\end{document}
+ </xsl:text>
+
+ </xsl:template>
+
+ <xsl:template match="bookinfo">
+ <xsl:apply-templates />
+ <xsl:text>&#x0a;\newcommand\docbookbookinfocopyright{\copyright{} \docbookbookinfocopyrightyear{} \docbookbookinfocopyrightholder{}}&#x0a;
+\author{ \docbooktitleedition \\ %
+\\ %
+</xsl:text>
+ <xsl:if test="//bookinfo/address">
+ <xsl:text>\docbookbookinfoaddress \\ %
+\\ %
+</xsl:text>
+ </xsl:if>
+ <xsl:text>\docbookbookinfocopyright \\ %
+}
+
+\title{\docbooktitle \\
+\docbooksubtitle}
+% \subtitle{\docbooksubtitle}
+\hypersetup{pdfauthor=\docbookcorpauthor}
+\hypersetup{pdftitle=\docbooktitle{} \docbooksubtitle{}}
+
+\hyphenation{da-ta-ba-ses}
+\hyphenation{deb-conf}
+\hyphenation{VirtualBox}
+
+\begin{document}
+% \maketitle
+%\begin{titlepage}
+\thispagestyle{empty}
+\begin{minipage}{\textwidth}
+\begin{center}
+\includegraphics[width=4cm]{images/vboxlogo.png}
+\end{center}%
+\vspace{10mm}
+
+{\fontsize{40pt}{40pt}\selectfont\rmfamily\bfseries%
+\begin{center}
+\docbooktitle
+\end{center}%
+\vspace{10mm}
+}
+
+{\fontsize{30pt}{30pt}\selectfont\rmfamily\bfseries%
+\begin{center}
+\docbooksubtitle
+\end{center}%
+\vspace{10mm}
+}
+
+{\fontsize{16pt}{20pt}\selectfont\rmfamily%
+\begin{center}
+\docbooktitleedition
+
+\vspace{2mm}
+
+\docbookbookinfocopyright
+
+\vspace{2mm}
+
+\docbookbookinfoaddress
+\end{center}%
+}
+
+%\end{titlepage}
+\end{minipage}
+
+\tableofcontents
+ </xsl:text>
+ </xsl:template>
+
+ <xsl:template match="subtitle">
+ <xsl:choose>
+ <xsl:when test="name(..)='bookinfo'">
+ <xsl:text>\newcommand\docbooksubtitle{</xsl:text>
+ <xsl:apply-templates />
+ <xsl:text>}</xsl:text>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="title">
+ <xsl:choose>
+ <xsl:when test="name(..)='bookinfo'">
+ <xsl:text>\newcommand\docbooktitle{</xsl:text>
+ <xsl:apply-templates />
+ <xsl:text>}</xsl:text>
+ </xsl:when>
+ <xsl:when test="name(..)='chapter'">
+ <xsl:text>&#x0a;&#x0a;\chapter{</xsl:text>
+ <xsl:apply-templates />
+ <xsl:text>}</xsl:text>
+ </xsl:when>
+ <xsl:when test="name(..)='sect1'">
+ <xsl:text>&#x0a;&#x0a;\section{</xsl:text>
+ <xsl:apply-templates />
+ <xsl:text>}</xsl:text>
+ </xsl:when>
+ <xsl:when test="name(..)='sect2'">
+ <xsl:text>&#x0a;&#x0a;\subsection{</xsl:text>
+ <xsl:apply-templates />
+ <xsl:text>}</xsl:text>
+ </xsl:when>
+ <xsl:when test="name(..)='sect3'">
+ <xsl:text>&#x0a;&#x0a;\subsubsection{</xsl:text>
+ <xsl:apply-templates />
+ <xsl:text>}</xsl:text>
+ </xsl:when>
+ <xsl:when test="name(..)='sect4'">
+ <xsl:text>&#x0a;&#x0a;\paragraph{</xsl:text>
+ <xsl:apply-templates />
+ <xsl:text>}</xsl:text>
+ </xsl:when>
+ <xsl:when test="name(..)='sect5'">
+ <xsl:text>&#x0a;&#x0a;\subparagraph{</xsl:text>
+ <xsl:apply-templates />
+ <xsl:text>}</xsl:text>
+ </xsl:when>
+ <xsl:when test="name(..)='appendix'">
+ <xsl:text>&#x0a;&#x0a;\chapter{</xsl:text>
+ <xsl:apply-templates />
+ <xsl:text>}</xsl:text>
+ </xsl:when>
+ <xsl:when test="name(..)='glossdiv'">
+ <xsl:text>&#x0a;&#x0a;\section*{</xsl:text>
+ <xsl:apply-templates />
+ <xsl:text>}</xsl:text>
+ </xsl:when>
+ </xsl:choose>
+ <xsl:variable name="refid" select="(@id) | (../@id)" />
+ <xsl:if test="$refid">
+ <xsl:value-of select="concat('&#x0a;\label{', $refid, '}')" />
+ </xsl:if>
+ <xsl:text>&#x0a;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="edition">
+ <xsl:choose>
+ <xsl:when test="name(..)='bookinfo'">
+ <xsl:text>\newcommand\docbooktitleedition{</xsl:text>
+ <xsl:apply-templates />
+ <xsl:text>}&#x0a;</xsl:text>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="corpauthor">
+ <xsl:choose>
+ <xsl:when test="name(..)='bookinfo'">
+ <xsl:text>\newcommand\docbookcorpauthor{</xsl:text>
+ <xsl:apply-templates />
+ <xsl:text>}&#x0a;</xsl:text>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="address">
+ <xsl:choose>
+ <xsl:when test="name(..)='bookinfo'">
+ <xsl:text>\newcommand\docbookbookinfoaddress{</xsl:text>
+ <xsl:apply-templates />
+ <xsl:text>}&#x0a;</xsl:text>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="year">
+ <xsl:choose>
+ <xsl:when test="name(..)='copyright'">
+ <xsl:text>\newcommand\docbookbookinfocopyrightyear{</xsl:text>
+ <xsl:apply-templates />
+ <xsl:text>}&#x0a;</xsl:text>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="holder">
+ <xsl:choose>
+ <xsl:when test="name(..)='copyright'">
+ <xsl:text>\newcommand\docbookbookinfocopyrightholder{</xsl:text>
+ <xsl:apply-templates />
+ <xsl:text>}&#x0a;</xsl:text>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="glossary">
+ <xsl:text>&#x0a;&#x0a;\backmatter&#x0a;\chapter{Glossary}&#x0a;</xsl:text>
+ <xsl:apply-templates />
+ </xsl:template>
+
+ <xsl:template match="para">
+ <xsl:if test="not(name(..)='footnote' or name(..)='note' or name(..)='warning')">
+ <xsl:text>&#x0a;&#x0a;</xsl:text>
+ </xsl:if>
+ <xsl:apply-templates />
+ </xsl:template>
+
+ <xsl:template match="note">
+ <xsl:value-of select="concat('&#x0a;&#x0a;\vspace{.2cm}&#x0a;&#x0a;\begin{center}\fbox{\begin{minipage}[c]{0.9\textwidth}\color{colNote}\textbf{', $g_nlsNote, ':} ')" />
+ <xsl:apply-templates />
+ <xsl:text>\end{minipage}}\end{center}&#x0a;&#x0a;\vspace{.2cm}&#x0a;&#x0a;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="warning">
+ <xsl:value-of select="concat('&#x0a;&#x0a;\vspace{.2cm}&#x0a;&#x0a;\begin{center}\fbox{\begin{minipage}[c]{0.9\textwidth}\color{colWarning}\textbf{', $g_nlsWarning, ':} ')" />
+ <xsl:apply-templates />
+ <xsl:text>\end{minipage}}\end{center}&#x0a;&#x0a;\vspace{.2cm}&#x0a;&#x0a;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="screen">
+ <xsl:text>&#x0a;&#x0a;\begin{Verbatim}[fontsize=\footnotesize]&#x0a;</xsl:text>
+ <xsl:apply-templates />
+ <xsl:text>&#x0a;\end{Verbatim}&#x0a;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="programlisting">
+ <xsl:text>&#x0a;&#x0a;{\small\begin{alltt}&#x0a;</xsl:text>
+ <xsl:apply-templates />
+ <xsl:text>&#x0a;\end{alltt}}&#x0a;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="footnote">
+ <xsl:text>\footnote{</xsl:text>
+ <xsl:apply-templates />
+ <xsl:text>}</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="tgroup">
+ <xsl:choose>
+ <xsl:when test="@style='verywide'">
+ <xsl:text>&#x0a;&#x0a;{\small\begin{center}&#x0a;\begin{tabulary}{1.1\textwidth}[]{|L|L|L|}&#x0a;\hline&#x0a;</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>&#x0a;&#x0a;{\small\begin{center}&#x0a;\begin{tabulary}{.9\textwidth}[]{|L|L|L|}&#x0a;\hline&#x0a;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:apply-templates />
+ <xsl:text>&#x0a;\end{tabulary}&#x0a;\end{center}}&#x0a;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="row">
+ <xsl:apply-templates />
+ <xsl:text>&#x0a;\\ \hline&#x0a;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="entry">
+ <xsl:if test="not(position()=1)">
+ <xsl:text> &amp; </xsl:text>
+ </xsl:if>
+ <xsl:apply-templates />
+ </xsl:template>
+
+ <xsl:template match="itemizedlist">
+ <xsl:text>&#x0a;&#x0a;\begin{itemize}&#x0a;</xsl:text>
+ <xsl:apply-templates />
+ <xsl:text>&#x0a;\end{itemize}&#x0a;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="orderedlist">
+ <xsl:text>&#x0a;&#x0a;\begin{enumerate}&#x0a;</xsl:text>
+ <xsl:apply-templates />
+ <xsl:text>&#x0a;\end{enumerate}&#x0a;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="listitem">
+ <xsl:text>&#x0a;&#x0a;\item </xsl:text>
+ <xsl:apply-templates />
+ <xsl:text>&#x0a;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="glossterm">
+ <xsl:variable name="refid" select="(@id)" />
+ <xsl:if test="$refid">
+ <xsl:value-of select="concat('&#x0a;\label{', $refid, '}')" />
+ </xsl:if>
+ <xsl:text>&#x0a;&#x0a;\item[</xsl:text>
+ <xsl:apply-templates />
+ <xsl:text>]</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="glosslist | glossdiv">
+ <xsl:text>&#x0a;&#x0a;\begin{description}&#x0a;</xsl:text>
+ <xsl:apply-templates />
+ <xsl:text>&#x0a;\end{description}&#x0a;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="superscript">
+ <xsl:variable name="contents">
+ <xsl:apply-templates />
+ </xsl:variable>
+ <xsl:value-of select="concat('\texorpdfstring{\textsuperscript{', $contents, '}}{', $contents, '}')" />
+ </xsl:template>
+
+ <xsl:template match="emphasis">
+ <xsl:choose>
+ <xsl:when test="@role='bold'">
+ <xsl:text>\textbf{</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>\textit{</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:apply-templates />
+ <xsl:text>}</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="computeroutput | code">
+ <xsl:text>\texttt{</xsl:text>
+ <xsl:apply-templates />
+ <xsl:text>}</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="ulink">
+ <xsl:text>\url{</xsl:text>
+ <xsl:apply-templates />
+ <xsl:text>}</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="xref">
+ <xsl:choose>
+ <xsl:when test="@xreflabel">
+ <xsl:value-of select="concat('\hyperref[', @linkend, ']{\mbox{', @xreflabel, '}}')" />
+ </xsl:when>
+ <xsl:when test="@apiref='yes'">
+ <xsl:value-of select="concat('\hyperref[', @linkend, ']{\mbox{')" />
+ <xsl:apply-templates />
+ <xsl:value-of select="'}}'" />
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="concat($g_nlsChapter, ' \ref{', @linkend, '}, \textit{\nameref{', @linkend, '}}, ', $g_nlsPage, ' \pageref{', @linkend, '}')" />
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <!-- for some reason, DocBook insists of having image data nested this way always:
+ mediaobject -> imageobject -> imagedata
+ but only imagedata is interesting -->
+ <xsl:template match="imagedata">
+ <xsl:if test="@align='center'">
+ <xsl:text>\begin{center}</xsl:text>
+ </xsl:if>
+ <xsl:value-of select="concat('&#x0a;\includegraphics[width=', @width, ']{', @fileref, '}&#x0a;')" />
+ <xsl:apply-templates />
+ <xsl:if test="@align='center'">
+ <xsl:text>\end{center}</xsl:text>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template match="//text()">
+ <xsl:variable name="subst1">
+ <xsl:call-template name="str:subst">
+ <xsl:with-param name="text" select="." />
+ <xsl:with-param name="replace" select="'\'" />
+ <xsl:with-param name="with" select="'\textbackslash{}'" />
+ <xsl:with-param name="disable-output-escaping" select="no" />
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="(name(..)='screen') or (name(../..)='screen')">
+ <xsl:value-of select="." />
+ </xsl:when>
+ <xsl:when test="(name(..)='computeroutput') or (name(../..)='computeroutput') or (name(..)='code') or (name(../..)='code')">
+ <xsl:variable name="subst2">
+ <xsl:call-template name="str:subst">
+ <xsl:with-param name="text" select="$subst1" />
+ <xsl:with-param name="replace" select="'--'" />
+ <xsl:with-param name="with" select="'-{}-'" />
+ <xsl:with-param name="disable-output-escaping" select="no" />
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="subst3">
+ <xsl:call-template name="str:subst">
+ <xsl:with-param name="text" select="$subst2" />
+ <xsl:with-param name="replace" select="'_'" />
+ <xsl:with-param name="with" select="'\_'" />
+ <xsl:with-param name="disable-output-escaping" select="no" />
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="subst4">
+ <xsl:call-template name="str:subst">
+ <xsl:with-param name="text" select="$subst3" />
+ <xsl:with-param name="replace" select="'$'" />
+ <xsl:with-param name="with" select="'\$'" />
+ <xsl:with-param name="disable-output-escaping" select="no" />
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="subst5">
+ <xsl:call-template name="str:subst">
+ <xsl:with-param name="text" select="$subst4" />
+ <xsl:with-param name="replace" select="'%'" />
+ <xsl:with-param name="with" select="'\%'" />
+ <xsl:with-param name="disable-output-escaping" select="no" />
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="subst6">
+ <xsl:call-template name="str:subst">
+ <xsl:with-param name="text" select="$subst5" />
+ <xsl:with-param name="replace" select="'#'" />
+ <xsl:with-param name="with" select="'\#'" />
+ <xsl:with-param name="disable-output-escaping" select="no" />
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="subst7">
+ <xsl:call-template name="str:subst">
+ <xsl:with-param name="text" select="$subst6" />
+ <xsl:with-param name="replace" select="'~'" />
+ <xsl:with-param name="with" select="'\textasciitilde '" />
+ <xsl:with-param name="disable-output-escaping" select="no" />
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="subst8">
+ <xsl:call-template name="str:subst">
+ <xsl:with-param name="text" select="$subst7" />
+ <xsl:with-param name="replace" select="'&amp;'" />
+ <xsl:with-param name="with" select="'\&amp;'" />
+ <xsl:with-param name="disable-output-escaping" select="no" />
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:value-of select="$subst8" />
+ </xsl:when>
+ <xsl:when test="(name(..)='address') or (name(../..)='address')">
+ <xsl:variable name="subst2">
+ <xsl:call-template name="str:subst">
+ <xsl:with-param name="text" select="$subst1" />
+ <xsl:with-param name="replace" select="'&#x0a;'" />
+ <xsl:with-param name="with" select="' \\'" />
+ <xsl:with-param name="disable-output-escaping" select="no" />
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:value-of select="$subst2" />
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:variable name="subst2">
+ <xsl:call-template name="str:subst">
+ <xsl:with-param name="text" select="$subst1" />
+ <xsl:with-param name="replace" select="'_'" />
+ <xsl:with-param name="with" select="'\_'" />
+ <xsl:with-param name="disable-output-escaping" select="no" />
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="subst3">
+ <xsl:call-template name="str:subst">
+ <xsl:with-param name="text" select="$subst2" />
+ <xsl:with-param name="replace" select="'$'" />
+ <xsl:with-param name="with" select="'\$'" />
+ <xsl:with-param name="disable-output-escaping" select="no" />
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="subst4">
+ <xsl:call-template name="str:subst">
+ <xsl:with-param name="text" select="$subst3" />
+ <xsl:with-param name="replace" select="'%'" />
+ <xsl:with-param name="with" select="'\%'" />
+ <xsl:with-param name="disable-output-escaping" select="no" />
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="subst5">
+ <xsl:call-template name="str:subst">
+ <xsl:with-param name="text" select="$subst4" />
+ <xsl:with-param name="replace" select="'#'" />
+ <xsl:with-param name="with" select="'\#'" />
+ <xsl:with-param name="disable-output-escaping" select="no" />
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="subst6">
+ <xsl:call-template name="str:subst">
+ <xsl:with-param name="text" select="$subst5" />
+ <xsl:with-param name="replace" select="'µ'" />
+ <xsl:with-param name="with" select="'$\mu$'" />
+ <xsl:with-param name="disable-output-escaping" select="no" />
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="subst7">
+ <xsl:call-template name="str:subst">
+ <xsl:with-param name="text" select="$subst6" />
+ <xsl:with-param name="replace" select="'®'" />
+ <xsl:with-param name="with" select="'\texorpdfstring{\textregistered}{}'" />
+ <xsl:with-param name="disable-output-escaping" select="no" />
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="quote">"</xsl:variable>
+ <!-- preparation for pretty quotes: replace all double quotes _outside_ screen
+ sections with "\QUOTE{}" strings, which the makefile will then replace
+ with pretty quotes by invoking sed a few times. Unfortunately there are
+ no regular expressions in XSLT so there's no other way. -->
+ <xsl:variable name="subst8">
+ <xsl:call-template name="str:subst">
+ <xsl:with-param name="text" select="$subst7" />
+ <xsl:with-param name="replace" select="$quote" />
+ <xsl:with-param name="with" select="'\QUOTE{}'" />
+ <xsl:with-param name="disable-output-escaping" select="no" />
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="subst9">
+ <xsl:call-template name="str:subst">
+ <xsl:with-param name="text" select="$subst8" />
+ <xsl:with-param name="replace" select="'~'" />
+ <xsl:with-param name="with" select="'\textasciitilde '" />
+ <xsl:with-param name="disable-output-escaping" select="no" />
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="subst10">
+ <xsl:call-template name="str:subst">
+ <xsl:with-param name="text" select="$subst9" />
+ <xsl:with-param name="replace" select="'&amp;'" />
+ <xsl:with-param name="with" select="'\&amp;'" />
+ <xsl:with-param name="disable-output-escaping" select="no" />
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:value-of select="$subst10" />
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+</xsl:stylesheet>
+
diff --git a/doc/manual/en_US/Makefile.kup b/doc/manual/en_US/Makefile.kup
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/doc/manual/en_US/Makefile.kup
diff --git a/doc/manual/en_US/SDKRef.xml b/doc/manual/en_US/SDKRef.xml
new file mode 100644
index 00000000..40e1559f
--- /dev/null
+++ b/doc/manual/en_US/SDKRef.xml
@@ -0,0 +1,4899 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
+<book>
+ <bookinfo>
+ <title>$VBOX_PRODUCT<superscript>®</superscript></title>
+
+ <subtitle>Programming Guide and Reference</subtitle>
+
+ <edition>Version $VBOX_VERSION_STRING</edition>
+
+ <corpauthor>$VBOX_VENDOR</corpauthor>
+
+ <address>http://www.virtualbox.org</address>
+
+ <copyright>
+ <year>2004-$VBOX_C_YEAR</year>
+
+ <holder>$VBOX_VENDOR</holder>
+ </copyright>
+ </bookinfo>
+
+ <chapter>
+ <title>Introduction</title>
+
+ <para>VirtualBox comes with comprehensive support for third-party
+ developers. This Software Development Kit (SDK) contains all the
+ documentation and interface files that are needed to write code that
+ interacts with VirtualBox.</para>
+
+ <sect1>
+ <title>Modularity: the building blocks of VirtualBox</title>
+
+ <para>VirtualBox is cleanly separated into several layers, which can be
+ visualized like in the picture below:</para>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" fileref="images/vbox-components.png"
+ width="12cm" />
+ </imageobject>
+ </mediaobject>
+
+ <para>The orange area represents code that runs in kernel mode, the blue
+ area represents userspace code.</para>
+
+ <para>At the bottom of the stack resides the hypervisor -- the core of
+ the virtualization engine, controlling execution of the virtual machines
+ and making sure they do not conflict with each other or whatever the
+ host computer is doing otherwise.</para>
+
+ <para>On top of the hypervisor, additional internal modules provide
+ extra functionality. For example, the RDP server, which can deliver the
+ graphical output of a VM remotely to an RDP client, is a separate module
+ that is only loosely tacked into the virtual graphics device. Live
+ Migration and Resource Monitor are additional modules currently in the
+ process of being added to VirtualBox.</para>
+
+ <para>What is primarily of interest for purposes of the SDK is the API
+ layer block that sits on top of all the previously mentioned blocks.
+ This API, which we call the <emphasis role="bold">"Main API"</emphasis>,
+ exposes the entire feature set of the virtualization engine below. It is
+ completely documented in this SDK Reference -- see <xref
+ linkend="sdkref_classes" /> and <xref linkend="sdkref_enums" /> -- and
+ available to anyone who wishes to control VirtualBox programmatically.
+ We chose the name "Main API" to differentiate it from other programming
+ interfaces of VirtualBox that may be publicly accessible.</para>
+
+ <para>With the Main API, you can create, configure, start, stop and
+ delete virtual machines, retrieve performance statistics about running
+ VMs, configure the VirtualBox installation in general, and more. In
+ fact, internally, the front-end programs
+ <computeroutput>VirtualBox</computeroutput> and
+ <computeroutput>VBoxManage</computeroutput> use nothing but this API as
+ well -- there are no hidden backdoors into the virtualization engine for
+ our own front-ends. This ensures the entire Main API is both
+ well-documented and well-tested. (The same applies to
+ <computeroutput>VBoxHeadless</computeroutput>, which is not shown in the
+ image.)</para>
+ </sect1>
+
+ <sect1 id="webservice-or-com">
+ <title>Two guises of the same "Main API": the web service or
+ COM/XPCOM</title>
+
+ <para>There are several ways in which the Main API can be called by
+ other code:<orderedlist>
+ <listitem>
+ <para>VirtualBox comes with a <emphasis role="bold">web
+ service</emphasis> that maps nearly the entire Main API. The web
+ service ships in a stand-alone executable
+ (<computeroutput>vboxwebsrv</computeroutput>) that, when running,
+ acts as an HTTP server, accepts SOAP connections and processes
+ them.</para>
+
+ <para>Since the entire web service API is publicly described in a
+ web service description file (in WSDL format), you can write
+ client programs that call the web service in any language with a
+ toolkit that understands WSDL. These days, that includes most
+ programming languages that are available: Java, C++, .NET, PHP,
+ Python, Perl and probably many more.</para>
+
+ <para>All of this is explained in detail in subsequent chapters of
+ this book.</para>
+
+ <para>There are two ways in which you can write client code that
+ uses the web service:<orderedlist>
+ <listitem>
+ <para>For Java as well as Python, the SDK contains
+ easy-to-use classes that allow you to use the web service in
+ an object-oriented, straightforward manner. We shall refer
+ to this as the <emphasis role="bold">"object-oriented web
+ service (OOWS)"</emphasis>.</para>
+
+ <para>The OO bindings for Java are described in <xref
+ linkend="javaapi" />, those for Python in <xref lang=""
+ linkend="glue-python-ws" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>Alternatively, you can use the web service directly,
+ without the object-oriented client layer. We shall refer to
+ this as the <emphasis role="bold">"raw web
+ service"</emphasis>.</para>
+
+ <para>You will then have neither native object orientation
+ nor full type safety, since web services are neither
+ object-oriented nor stateful. However, in this way, you can
+ write client code even in languages for which we do not ship
+ object-oriented client code; all you need is a programming
+ language with a toolkit that can parse WSDL and generate
+ client wrapper code from it.</para>
+
+ <para>We describe this further in <xref
+ linkend="raw-webservice" />, with samples for Java and
+ Perl.</para>
+ </listitem>
+ </orderedlist></para>
+ </listitem>
+
+ <listitem>
+ <para>Internally, for portability and easier maintenance, the Main
+ API is implemented using the <emphasis role="bold">Component
+ Object Model (COM),</emphasis> an interprocess mechanism for
+ software components originally introduced by Microsoft for
+ Microsoft Windows. On a Windows host, VirtualBox will use
+ Microsoft COM; on other hosts where COM is not present, it ships
+ with XPCOM, a free software implementation of COM originally
+ created by the Mozilla project for their browsers.</para>
+
+ <para>So, if you are familiar with COM and the C++ programming
+ language (or with any other programming language that can handle
+ COM/XPCOM objects, such as Java, Visual Basic or C#), then you can
+ use the COM/XPCOM API directly. VirtualBox comes with all
+ necessary files and documentation to build fully functional COM
+ applications. For an introduction, please see <xref
+ linkend="api_com" /> below.</para>
+
+ <para>The VirtualBox front-ends (the graphical user interfaces as
+ well as the command line), which are all written in C++, use
+ COM/XPCOM to call the Main API. Technically, the web service is
+ another front-end to this COM API, mapping almost all of it to
+ SOAP clients.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>If you wonder which way to choose, here are a few
+ comparisons:<table>
+ <title>Comparison web service vs. COM/XPCOM</title>
+
+ <tgroup cols="2">
+ <tbody>
+ <row>
+ <entry><emphasis role="bold">Web service</emphasis></entry>
+
+ <entry><emphasis role="bold">COM/XPCOM</emphasis></entry>
+ </row>
+
+ <row>
+ <entry><emphasis role="bold">Pro:</emphasis> Easy to use with
+ Java and Python with the object-oriented web service;
+ extensive support even with other languages (C++, .NET, PHP,
+ Perl and others)</entry>
+
+ <entry><emphasis role="bold">Con:</emphasis> Usable from
+ languages where COM bridge available (most languages on
+ Windows platform, Python and C++ on other hosts)</entry>
+ </row>
+
+ <row>
+ <entry><emphasis role="bold">Pro:</emphasis> Client can be on
+ remote machine</entry>
+
+ <entry><emphasis role="bold">Con: </emphasis>Client must be on
+ the same host where virtual machine is executed</entry>
+ </row>
+
+ <row>
+ <entry><emphasis role="bold">Con: </emphasis>Significant
+ overhead due to XML marshalling over the wire for each method
+ call</entry>
+
+ <entry><emphasis role="bold">Pro: </emphasis>Relatively low
+ invocation overhead</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table></para>
+
+ <para>In the following chapters, we will describe the different ways in
+ which to program VirtualBox, starting with the method that is easiest to
+ use and then increase complexity as we go along.</para>
+ </sect1>
+
+ <sect1 id="api_soap_intro">
+ <title>About web services in general</title>
+
+ <para>Web services are a particular type of programming interface.
+ Whereas, with "normal" programming, a program calls an application
+ programming interface (API) defined by another program or the operating
+ system and both sides of the interface have to agree on the calling
+ convention and, in most cases, use the same programming language, web
+ services use Internet standards such as HTTP and XML to
+ communicate.<footnote>
+ <para>In some ways, web services promise to deliver the same thing
+ as CORBA and DCOM did years ago. However, while these previous
+ technologies relied on specific binary protocols and thus proved to
+ be difficult to use between diverging platforms, web services
+ circumvent these incompatibilities by using text-only standards like
+ HTTP and XML. On the downside (and, one could say, typical of things
+ related to XML), a lot of standards are involved before a web
+ service can be implemented. Many of the standards invented around
+ XML are used one way or another. As a result, web services are slow
+ and verbose, and the details can be incredibly messy. The relevant
+ standards here are called SOAP and WSDL, where SOAP describes the
+ format of the messages that are exchanged (an XML document wrapped
+ in an HTTP header), and WSDL is an XML format that describes a
+ complete API provided by a web service. WSDL in turn uses XML Schema
+ to describe types, which is not exactly terse either. However, as
+ you will see from the samples provided in this chapter, the
+ VirtualBox web service shields you from these details and is easy to
+ use.</para>
+ </footnote></para>
+
+ <para>In order to successfully use a web service, a number of things are
+ required -- primarily, a web service accepting connections; service
+ descriptions; and then a client that connects to that web service. The
+ connections are governed by the SOAP standard, which describes how
+ messages are to be exchanged between a service and its clients; the
+ service descriptions are governed by WSDL.</para>
+
+ <para>In the case of VirtualBox, this translates into the following
+ three components:<orderedlist>
+ <listitem>
+ <para>The VirtualBox web service (the "server"): this is the
+ <computeroutput>vboxwebsrv</computeroutput> executable shipped
+ with VirtualBox. Once you start this executable (which acts as a
+ HTTP server on a specific TCP/IP port), clients can connect to the
+ web service and thus control a VirtualBox installation.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox also comes with WSDL files that describe the
+ services provided by the web service. You can find these files in
+ the <computeroutput>sdk/bindings/webservice/</computeroutput>
+ directory. These files are understood by the web service toolkits
+ that are shipped with most programming languages and enable you to
+ easily access a web service even if you don't use our
+ object-oriented client layers. VirtualBox is shipped with
+ pregenerated web service glue code for several languages (Python,
+ Perl, Java).</para>
+ </listitem>
+
+ <listitem>
+ <para>A client that connects to the web service in order to
+ control the VirtualBox installation.</para>
+
+ <para>Unless you play with some of the samples shipped with
+ VirtualBox, this needs to be written by you.</para>
+ </listitem>
+ </orderedlist></para>
+ </sect1>
+
+ <sect1 id="runvboxwebsrv">
+ <title>Running the web service</title>
+
+ <para>The web service ships in an stand-alone executable,
+ <computeroutput>vboxwebsrv</computeroutput>, that, when running, acts as
+ a HTTP server, accepts SOAP connections and processes them -- remotely
+ or from the same machine.<note>
+ <para>The web service executable is not contained with the
+ VirtualBox SDK, but instead ships with the standard VirtualBox
+ binary package for your specific platform. Since the SDK contains
+ only platform-independent text files and documentation, the binaries
+ are instead shipped with the platform-specific packages. For this
+ reason the information how to run it as a service is included in the
+ VirtualBox documentation.</para>
+ </note></para>
+
+ <para>The <computeroutput>vboxwebsrv</computeroutput> program, which
+ implements the web service, is a text-mode (console) program which,
+ after being started, simply runs until it is interrupted with Ctrl-C or
+ a kill command.</para>
+
+ <para>Once the web service is started, it acts as a front-end to the
+ VirtualBox installation of the user account that it is running under. In
+ other words, if the web service is run under the user account of
+ <computeroutput>user1</computeroutput>, it will see and manipulate the
+ virtual machines and other data represented by the VirtualBox data of
+ that user (for example, on a Linux machine, under
+ <computeroutput>/home/user1/.VirtualBox</computeroutput>; see the
+ VirtualBox User Manual for details on where this data is stored).</para>
+
+ <sect2 id="vboxwebsrv-ref">
+ <title>Command line options of vboxwebsrv</title>
+
+ <para>The web service supports the following command line
+ options:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><computeroutput>--help</computeroutput> (or
+ <computeroutput>-h</computeroutput>): print a brief summary of
+ command line options.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--background</computeroutput> (or
+ <computeroutput>-b</computeroutput>): run the web service as a
+ background daemon. This option is not supported on Windows
+ hosts.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--host</computeroutput> (or
+ <computeroutput>-H</computeroutput>): This specifies the host to
+ bind to and defaults to "localhost".</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--port</computeroutput> (or
+ <computeroutput>-p</computeroutput>): This specifies which port to
+ bind to on the host and defaults to 18083.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--ssl</computeroutput> (or
+ <computeroutput>-s</computeroutput>): This enables SSL support.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--keyfile</computeroutput> (or
+ <computeroutput>-K</computeroutput>): This specifies the file name
+ containing the server private key and the certificate. This is a
+ mandatory parameter if SSL is enabled.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--passwordfile</computeroutput> (or
+ <computeroutput>-a</computeroutput>): This specifies the file name
+ containing the password for the server private key. If unspecified
+ or an empty string is specified this is interpreted as an empty
+ password (i.e. the private key is not protected by a password). If
+ the file name <computeroutput>-</computeroutput> is specified then
+ then the password is read from the standard input stream, otherwise
+ from the specified file. The user is responsible for appropriate
+ access rights to protect the confidential password.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--cacert</computeroutput> (or
+ <computeroutput>-c</computeroutput>): This specifies the file name
+ containing the CA certificate appropriate for the server
+ certificate.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--capath</computeroutput> (or
+ <computeroutput>-C</computeroutput>): This specifies the directory
+ containing several CA certificates appropriate for the server
+ certificate.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--dhfile</computeroutput> (or
+ <computeroutput>-D</computeroutput>): This specifies the file name
+ containing the DH key. Alternatively it can contain the number of
+ bits of the DH key to generate. If left empty, RSA is used.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--randfile</computeroutput> (or
+ <computeroutput>-r</computeroutput>): This specifies the file name
+ containing the seed for the random number generator. If left empty,
+ an operating system specific source of the seed.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--timeout</computeroutput> (or
+ <computeroutput>-t</computeroutput>): This specifies the session
+ timeout, in seconds, and defaults to 300 (five minutes). A web
+ service client that has logged on but makes no calls to the web
+ service will automatically be disconnected after the number of
+ seconds specified here, as if it had called the
+ <computeroutput>IWebSessionManager::logoff()</computeroutput>
+ method provided by the web service itself.</para>
+
+ <para>It is normally vital that each web service client call this
+ method, as the web service can accumulate large amounts of memory
+ when running, especially if a web service client does not properly
+ release managed object references. As a result, this timeout value
+ should not be set too high, especially on machines with a high
+ load on the web service, or the web service may eventually deny
+ service.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--check-interval</computeroutput> (or
+ <computeroutput>-i</computeroutput>): This specifies the interval
+ in which the web service checks for timed-out clients, in seconds,
+ and defaults to 5. This normally does not need to be
+ changed.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--threads</computeroutput> (or
+ <computeroutput>-T</computeroutput>): This specifies the maximum
+ number or worker threads, and defaults to 100. This normally does
+ not need to be changed.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--keepalive</computeroutput> (or
+ <computeroutput>-k</computeroutput>): This specifies the maximum
+ number of requests which can be sent in one web service connection,
+ and defaults to 100. This normally does not need to be changed.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--authentication</computeroutput> (or
+ <computeroutput>-A</computeroutput>): This specifies the desired
+ web service authentication method. If the parameter is not
+ specified or the empty string is specified it does not change the
+ authentication method, otherwise it is set to the specified value.
+ Using this parameter is a good measure against accidental
+ misconfiguration, as the web service ensures periodically that it
+ isn't changed.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--verbose</computeroutput> (or
+ <computeroutput>-v</computeroutput>): Normally, the web service
+ outputs only brief messages to the console each time a request is
+ served. With this option, the web service prints much more detailed
+ data about every request and the COM methods that those requests
+ are mapped to internally, which can be useful for debugging client
+ programs.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--pidfile</computeroutput> (or
+ <computeroutput>-P</computeroutput>): Name of the PID file which is
+ created when the daemon was started.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--logfile</computeroutput> (or
+ <computeroutput>-F</computeroutput>)
+ <computeroutput>&lt;file&gt;</computeroutput>: If this is
+ specified, the web service not only prints its output to the
+ console, but also writes it to the specified file. The file is
+ created if it does not exist; if it does exist, new output is
+ appended to it. This is useful if you run the web service
+ unattended and need to debug problems after they have
+ occurred.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--logrotate</computeroutput> (or
+ <computeroutput>-R</computeroutput>): Number of old log files to
+ keep, defaults to 10. Log rotation is disabled if set to 0.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--logsize</computeroutput> (or
+ <computeroutput>-S</computeroutput>): Maximum size of log file in
+ bytes, defaults to 100MB. Log rotation is triggered if the file
+ grows beyond this limit.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--loginterval</computeroutput> (or
+ <computeroutput>-I</computeroutput>): Maximum time interval to be
+ put in a log file before rotation is triggered, in seconds, and
+ defaults to one day.</para>
+ </listitem>
+ </itemizedlist>
+ </sect2>
+
+ <sect2 id="websrv_authenticate">
+ <title>Authenticating at web service logon</title>
+
+ <para>As opposed to the COM/XPCOM variant of the Main API, a client
+ that wants to use the web service must first log on by calling the
+ <computeroutput>IWebsessionManager::logon()</computeroutput> API (see
+ <xref linkend="IWebsessionManager__logon" />) that is specific to the
+ web service. Logon is necessary for the web service to be stateful;
+ internally, it maintains a session for each client that connects to
+ it.</para>
+
+ <para>The <computeroutput>IWebsessionManager::logon()</computeroutput>
+ API takes a user name and a password as arguments, which the web
+ service then passes to a customizable authentication plugin that
+ performs the actual authentication.</para>
+
+ <para>For testing purposes, it is recommended that you first disable
+ authentication with this command:<screen>VBoxManage setproperty websrvauthlibrary null</screen></para>
+
+ <para><warning>
+ <para>This will cause all logons to succeed, regardless of user
+ name or password. This should of course not be used in a
+ production environment.</para>
+ </warning>Generally, the mechanism by which clients are
+ authenticated is configurable by way of the
+ <computeroutput>VBoxManage</computeroutput> command:</para>
+
+ <para><screen>VBoxManage setproperty websrvauthlibrary default|null|&lt;library&gt;</screen></para>
+
+ <para>This way you can specify any shared object/dynamic link module
+ that conforms with the specifications for VirtualBox external
+ authentication modules as laid out in section <emphasis
+ role="bold">VRDE authentication</emphasis> of the VirtualBox User
+ Manual; the web service uses the same kind of modules as the
+ VirtualBox VRDE server. For technical details on VirtualBox external
+ authentication modules see <xref linkend="vbox-auth" /></para>
+
+ <para>By default, after installation, the web service uses the
+ VBoxAuth module that ships with VirtualBox. This module uses PAM on
+ Linux hosts to authenticate users. Any valid username/password
+ combination is accepted, it does not have to be the username and
+ password of the user running the web service daemon. Unless
+ <computeroutput>vboxwebsrv</computeroutput> runs as root, PAM
+ authentication can fail, because sometimes the file
+ <computeroutput>/etc/shadow</computeroutput>, which is used by PAM, is
+ not readable. On most Linux distribution PAM uses a suid root helper
+ internally, so make sure you test this before deploying it. One can
+ override this behavior by setting the environment variable
+ <computeroutput>VBOX_PAM_ALLOW_INACTIVE</computeroutput> which will
+ suppress failures when unable to read the shadow password file. Please
+ use this variable carefully, and only if you fully understand what
+ you're doing.</para>
+ </sect2>
+ </sect1>
+ </chapter>
+
+ <chapter>
+ <title>Environment-specific notes</title>
+
+ <para>The Main API described in <xref linkend="sdkref_classes" /> and
+ <xref linkend="sdkref_enums" /> is mostly identical in all the supported
+ programming environments which have been briefly mentioned in the
+ introduction of this book. As a result, the Main API's general concepts
+ described in <xref linkend="concepts" /> are the same whether you use the
+ object-oriented web service (OOWS) for JAX-WS or a raw web service
+ connection via, say, Perl, or whether you use C++ COM bindings.</para>
+
+ <para>Some things are different depending on your environment, however.
+ These differences are explained in this chapter.</para>
+
+ <sect1 id="glue">
+ <title>Using the object-oriented web service (OOWS)</title>
+
+ <para>As explained in <xref linkend="webservice-or-com" />, VirtualBox
+ ships with client-side libraries for Java, Python and PHP that allow you
+ to use the VirtualBox web service in an intuitive, object-oriented way.
+ These libraries shield you from the client-side complications of managed
+ object references and other implementation details that come with the
+ VirtualBox web service. (If you are interested in these complications,
+ have a look at <xref linkend="raw-webservice" />).</para>
+
+ <para>We recommend that you start your experiments with the VirtualBox
+ web service by using our object-oriented client libraries for JAX-WS, a
+ web service toolkit for Java, which enables you to write code to
+ interact with VirtualBox in the simplest manner possible.</para>
+
+ <para>As "interfaces", "attributes" and "methods" are COM concepts,
+ please read the documentation in <xref linkend="sdkref_classes" /> and
+ <xref linkend="sdkref_enums" /> with the following notes in mind.</para>
+
+ <para>The OOWS bindings attempt to map the Main API as closely as
+ possible to the Java, Python and PHP languages. In other words, objects
+ are objects, interfaces become classes, and you can call methods on
+ objects as you would on local objects.</para>
+
+ <para>The main difference remains with attributes: to read an attribute,
+ call a "getXXX" method, with "XXX" being the attribute name with a
+ capitalized first letter. So when the Main API Reference says that
+ <computeroutput>IMachine</computeroutput> has a "name" attribute (see
+ <xref linkend="IMachine__name" xreflabel="IMachine::name" />), call
+ <computeroutput>getName()</computeroutput> on an IMachine object to
+ obtain a machine's name. Unless the attribute is marked as read-only in
+ the documentation, there will also be a corresponding "set"
+ method.</para>
+
+ <sect2 id="glue-jax-ws">
+ <title>The object-oriented web service for JAX-WS</title>
+
+ <para>JAX-WS is a powerful toolkit by Sun Microsystems to build both
+ server and client code with Java. It is part of Java 6 (JDK 1.6), but
+ can also be obtained separately for Java 5 (JDK 1.5). The VirtualBox
+ SDK comes with precompiled OOWS bindings working with both Java 5 and
+ 6.</para>
+
+ <para>The following sections explain how to get the JAX-WS sample code
+ running and explain a few common practices when using the JAX-WS
+ object-oriented web service.</para>
+
+ <sect3>
+ <title>Preparations</title>
+
+ <para>Since JAX-WS is already integrated into Java 6, no additional
+ preparations are needed for Java 6.</para>
+
+ <para>If you are using Java 5 (JDK 1.5.x), you will first need to
+ download and install an external JAX-WS implementation, as Java 5
+ does not support JAX-WS out of the box; for example, you can
+ download one from here: <ulink
+ url="https://jax-ws.dev.java.net/2.1.4/JAXWS2.1.4-20080502.jar">https://jax-ws.dev.java.net/2.1.4/JAXWS2.1.4-20080502.jar</ulink>.
+ Then perform the installation (<computeroutput>java -jar
+ JAXWS2.1.4-20080502.jar</computeroutput>).</para>
+ </sect3>
+
+ <sect3>
+ <title>Getting started: running the sample code</title>
+
+ <para>To run the OOWS for JAX-WS samples that we ship with the SDK,
+ perform the following steps: <orderedlist>
+ <listitem>
+ <para>Open a terminal and change to the directory where the
+ JAX-WS samples reside.<footnote>
+ <para>In
+ <computeroutput>sdk/bindings/glue/java/</computeroutput>.</para>
+ </footnote> Examine the header of
+ <computeroutput>Makefile</computeroutput> to see if the
+ supplied variables (Java compiler, Java executable) and a few
+ other details match your system settings.</para>
+ </listitem>
+
+ <listitem>
+ <para>To start the VirtualBox web service, open a second
+ terminal and change to the directory where the VirtualBox
+ executables are located. Then type:<screen>./vboxwebsrv -v</screen></para>
+
+ <para>The web service now waits for connections and will run
+ until you press Ctrl+C in this second terminal. The -v
+ argument causes it to log all connections to the terminal.
+ (See <xref linkend="runvboxwebsrv" os="" /> for details on how
+ to run the web service.)</para>
+ </listitem>
+
+ <listitem>
+ <para>Back in the first terminal and still in the samples
+ directory, to start a simple client example just type:<screen>make run16</screen></para>
+
+ <para>if you're on a Java 6 system; on a Java 5 system, run
+ <computeroutput>make run15</computeroutput> instead.</para>
+
+ <para>This should work on all Unix-like systems such as Linux
+ and Solaris. For Windows systems, use commands similar to what
+ is used in the Makefile.</para>
+
+ <para>This will compile the
+ <computeroutput>clienttest.java</computeroutput> code on the
+ first call and then execute the resulting
+ <computeroutput>clienttest</computeroutput> class to show the
+ locally installed VMs (see below).</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>The <computeroutput>clienttest</computeroutput> sample
+ imitates a few typical command line tasks that
+ <computeroutput>VBoxManage</computeroutput>, VirtualBox's regular
+ command-line front-end, would provide (see the VirtualBox User
+ Manual for details). In particular, you can run:<itemizedlist>
+ <listitem>
+ <para><computeroutput>java clienttest show
+ vms</computeroutput>: show the virtual machines that are
+ registered locally.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>java clienttest list
+ hostinfo</computeroutput>: show various information about the
+ host this VirtualBox installation runs on.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>java clienttest startvm
+ &lt;vmname|uuid&gt;</computeroutput>: start the given virtual
+ machine.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>The <computeroutput>clienttest.java</computeroutput> sample
+ code illustrates common basic practices how to use the VirtualBox
+ OOWS for JAX-WS, which we will explain in more detail in the
+ following chapters.</para>
+ </sect3>
+
+ <sect3>
+ <title>Logging on to the web service</title>
+
+ <para>Before a web service client can do anything useful, two
+ objects need to be created, as can be seen in the
+ <computeroutput>clienttest</computeroutput> constructor:<orderedlist>
+ <listitem>
+ <para>An instance of <xref linkend="IWebsessionManager"
+ xreflabel="IWebsessionManager" />, which is an interface
+ provided by the web service to manage "web sessions" -- that
+ is, stateful connections to the web service with persistent
+ objects upon which methods can be invoked.</para>
+
+ <para>In the OOWS for JAX-WS, the IWebsessionManager class
+ must be constructed explicitly, and a URL must be provided in
+ the constructor that specifies where the web service (the
+ server) awaits connections. The code in
+ <computeroutput>clienttest.java</computeroutput> connects to
+ "http://localhost:18083/", which is the default.</para>
+
+ <para>The port number, by default 18083, must match the port
+ number given to the
+ <computeroutput>vboxwebsrv</computeroutput> command line; see
+ <xref linkend="vboxwebsrv-ref" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>After that, the code calls <xref
+ linkend="IWebsessionManager__logon"
+ xreflabel="IWebsessionManager::logon()" />, which is the first
+ call that actually communicates with the server. This
+ authenticates the client with the web service and returns an
+ instance of <xref linkend="IVirtualBox"
+ xreflabel="IVirtualBox" />, the most fundamental interface of
+ the VirtualBox web service, from which all other functionality
+ can be derived.</para>
+
+ <para>If logon doesn't work, please take another look at <xref
+ linkend="websrv_authenticate" />.</para>
+ </listitem>
+ </orderedlist></para>
+ </sect3>
+
+ <sect3>
+ <title>Object management</title>
+
+ <para>The current OOWS for JAX-WS has certain memory management
+ related limitations. When you no longer need an object, call its
+ <xref linkend="IManagedObjectRef__release"
+ xreflabel="IManagedObjectRef::release()" /> method explicitly, which
+ frees appropriate managed reference, as is required by the raw
+ web service; see <xref linkend="managed-object-references" /> for
+ details. This limitation may be reconsidered in a future version of
+ the VirtualBox SDK.</para>
+ </sect3>
+ </sect2>
+
+ <sect2 id="glue-python-ws">
+ <title>The object-oriented web service for Python</title>
+
+ <para>VirtualBox comes with two flavors of a Python API: one for web
+ service, discussed here, and one for the COM/XPCOM API discussed in
+ <xref linkend="pycom" />. The client code is mostly similar, except
+ for the initialization part, so it is up to the application developer
+ to choose the appropriate technology. Moreover, a common Python glue
+ layer exists, abstracting out concrete platform access details, see
+ <xref linkend="glue-python" />.</para>
+
+ <para>As indicated in <xref linkend="webservice-or-com" />, the
+ COM/XPCOM API gives better performance without the SOAP overhead, and
+ does not require a web server to be running. On the other hand, the
+ COM/XPCOM Python API requires a suitable Python bridge for your Python
+ installation (VirtualBox ships the most important ones for each
+ platform<footnote>
+ <para>On On Mac OS X only the Python versions bundled with the OS
+ are officially supported. This means Python 2.3 for 10.4, Python
+ 2.5 for 10.5 and Python 2.5 and 2.6 for 10.6.</para>
+ </footnote>). On Windows, you can use the Main API from Python if the Win32 extensions
+ package for Python<footnote>
+ <para>See <ulink
+ url="http://sourceforge.net/project/showfiles.php?group_id=78018">http://sourceforge.net/project/showfiles.php?group_id=78018</ulink>.</para>
+ </footnote> is installed. Version of Python Win32 extensions earlier than 2.16 are known to have bugs,
+ leading to issues with VirtualBox Python bindings, and also some early builds of Python 2.5 for Windows have issues with
+ reporting platform name on some Windows versions, so please make sure to use latest available Python
+ and Win32 extensions.</para>
+
+ <para>The VirtualBox OOWS for Python relies on the Python ZSI SOAP
+ implementation (see <ulink
+ url="http://pywebsvcs.sourceforge.net/zsi.html">http://pywebsvcs.sourceforge.net/zsi.html</ulink>),
+ which you will need to install locally before trying the examples.
+ Most Linux distributions come with package for ZSI, such as
+ <computeroutput>python-zsi</computeroutput> in Ubuntu.</para>
+
+ <para>To get started, open a terminal and change to the
+ <computeroutput>bindings/glue/python/sample</computeroutput>
+ directory, which contains an example of a simple interactive shell
+ able to control a VirtualBox instance. The shell is written using the
+ API layer, thereby hiding different implementation details, so it is
+ actually an example of code share among XPCOM, MSCOM and web services.
+ If you are interested in how to interact with the web services layer
+ directly, have a look at
+ <computeroutput>install/vboxapi/__init__.py</computeroutput> which
+ contains the glue layer for all target platforms (i.e. XPCOM, MSCOM
+ and web services).</para>
+
+ <para>To start the shell, perform the following commands: <screen>/opt/VirtualBox/vboxwebsrv -t 0
+ # start web service with object autocollection disabled
+export VBOX_PROGRAM_PATH=/opt/VirtualBox
+ # your VirtualBox installation directory
+export VBOX_SDK_PATH=/home/youruser/vbox-sdk
+ # where you've extracted the SDK
+./vboxshell.py -w </screen>See <xref linkend="vboxshell" /> for more
+ details on the shell's functionality. For you, as a VirtualBox
+ application developer, the vboxshell sample could be interesting as an
+ example of how to write code targeting both local and remote cases
+ (COM/XPCOM and SOAP). The common part of the shell is the same -- the
+ only difference is how it interacts with the invocation layer. You can
+ use the <computeroutput>connect</computeroutput> shell command to
+ connect to remote VirtualBox servers; in this case you can skip
+ starting the local web server.</para>
+ </sect2>
+
+ <sect2>
+ <title>The object-oriented web service for PHP</title>
+
+ <para>VirtualBox also comes with object-oriented web service (OOWS)
+ wrappers for PHP5. These wrappers rely on the PHP SOAP
+ Extension<footnote>
+ <para>See <ulink url="???">http://www.php.net/soap</ulink>.</para>
+ </footnote>, which can be installed by configuring PHP with
+ <computeroutput>--enable-soap</computeroutput>.</para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="raw-webservice">
+ <title>Using the raw web service with any language</title>
+
+ <para>The following examples show you how to use the raw web service,
+ without the object-oriented client-side code that was described in the
+ previous chapter.</para>
+
+ <para>Generally, when reading the documentation in <xref
+ linkend="sdkref_classes" /> and <xref linkend="sdkref_enums" />, due to
+ the limitations of SOAP and WSDL lined out in <xref
+ linkend="rawws-conventions" />, please have the following notes in
+ mind:</para>
+
+ <para><orderedlist>
+ <listitem>
+ <para>Any COM method call becomes a <emphasis role="bold">plain
+ function call</emphasis> in the raw web service, with the object
+ as an additional first parameter (before the "real" parameters
+ listed in the documentation). So when the documentation says that
+ the <computeroutput>IVirtualBox</computeroutput> interface
+ supports the <computeroutput>createMachine()</computeroutput>
+ method (see <xref linkend="IVirtualBox__createMachine"
+ xreflabel="IVirtualBox::createMachine()" />), the web service
+ operation is
+ <computeroutput>IVirtualBox_createMachine(...)</computeroutput>,
+ and a managed object reference to an
+ <computeroutput>IVirtualBox</computeroutput> object must be passed
+ as the first argument.</para>
+ </listitem>
+
+ <listitem>
+ <para>For <emphasis role="bold">attributes</emphasis> in
+ interfaces, there will be at least one "get" function; there will
+ also be a "set" function, unless the attribute is "readonly". The
+ attribute name will be appended to the "get" or "set" prefix, with
+ a capitalized first letter. So, the "version" readonly attribute
+ of the <computeroutput>IVirtualBox</computeroutput> interface can
+ be retrieved by calling
+ <computeroutput>IVirtualBox_getVersion(vbox)</computeroutput>,
+ with <computeroutput>vbox</computeroutput> being the VirtualBox
+ object.</para>
+ </listitem>
+
+ <listitem>
+ <para>Whenever the API documentation says that a method (or an
+ attribute getter) returns an <emphasis
+ role="bold">object</emphasis>, it will returned a managed object
+ reference in the web service instead. As said above, managed
+ object references should be released if the web service client
+ does not log off again immediately!</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para></para>
+
+ <sect2 id="webservice-java-sample">
+ <title>Raw web service example for Java with Axis</title>
+
+ <para>Axis is an older web service toolkit created by the Apache
+ foundation. If your distribution does not have it installed, you can
+ get a binary from <ulink
+ url="http://www.apache.org">http://www.apache.org</ulink>. The
+ following examples assume that you have Axis 1.4 installed.</para>
+
+ <para>The VirtualBox SDK ships with an example for Axis that, again,
+ is called <computeroutput>clienttest.java</computeroutput> and that
+ imitates a few of the commands of
+ <computeroutput>VBoxManage</computeroutput> over the wire.</para>
+
+ <para>Then perform the following steps:<orderedlist>
+ <listitem>
+ <para>Create a working directory somewhere. Under your
+ VirtualBox installation directory, find the
+ <computeroutput>sdk/webservice/samples/java/axis/</computeroutput>
+ directory and copy the file
+ <computeroutput>clienttest.java</computeroutput> to your working
+ directory.</para>
+ </listitem>
+
+ <listitem>
+ <para>Open a terminal in your working directory. Execute the
+ following command:<screen> java org.apache.axis.wsdl.WSDL2Java /path/to/vboxwebService.wsdl</screen></para>
+
+ <para>The <computeroutput>vboxwebService.wsdl</computeroutput>
+ file should be located in the
+ <computeroutput>sdk/webservice/</computeroutput>
+ directory.</para>
+
+ <para>If this fails, your Apache Axis may not be located on your
+ system classpath, and you may have to adjust the CLASSPATH
+ environment variable. Something like this:<screen>export CLASSPATH="/path-to-axis-1_4/lib/*":$CLASSPATH</screen></para>
+
+ <para>Use the directory where the Axis JAR files are located.
+ Mind the quotes so that your shell passes the "*" character to
+ the java executable without expanding. Alternatively, add a
+ corresponding <computeroutput>-classpath</computeroutput>
+ argument to the "java" call above.</para>
+
+ <para>If the command executes successfully, you should see an
+ "org" directory with subdirectories containing Java source files
+ in your working directory. These classes represent the
+ interfaces that the VirtualBox web service offers, as described
+ by the WSDL file.</para>
+
+ <para>This is the bit that makes using web services so
+ attractive to client developers: if a language's toolkit
+ understands WSDL, it can generate large amounts of support code
+ automatically. Clients can then easily use this support code and
+ can be done with just a few lines of code.</para>
+ </listitem>
+
+ <listitem>
+ <para>Next, compile the
+ <computeroutput>clienttest.java</computeroutput> source:<screen>javac clienttest.java </screen></para>
+
+ <para>This should yield a "clienttest.class" file.</para>
+ </listitem>
+
+ <listitem>
+ <para>To start the VirtualBox web service, open a second
+ terminal and change to the directory where the VirtualBox
+ executables are located. Then type:<screen>./vboxwebsrv -v</screen></para>
+
+ <para>The web service now waits for connections and will run
+ until you press Ctrl+C in this second terminal. The -v argument
+ causes it to log all connections to the terminal. (See <xref
+ linkend="runvboxwebsrv" os="" /> for details on how to run the
+ web service.)</para>
+ </listitem>
+
+ <listitem>
+ <para>Back in the original terminal where you compiled the Java
+ source, run the resulting binary, which will then connect to the
+ web service:<screen>java clienttest</screen></para>
+
+ <para>The client sample will connect to the web service (on
+ localhost, but the code could be changed to connect remotely if
+ the web service was running on a different machine) and make a
+ number of method calls. It will output the version number of
+ your VirtualBox installation and a list of all virtual machines
+ that are currently registered (with a bit of seemingly random
+ data, which will be explained later).</para>
+ </listitem>
+ </orderedlist></para>
+ </sect2>
+
+ <sect2 id="raw-webservice-perl">
+ <title>Raw web service example for Perl</title>
+
+ <para>We also ship a small sample for Perl. It uses the SOAP::Lite
+ perl module to communicate with the VirtualBox web service.</para>
+
+ <para>The
+ <computeroutput>sdk/bindings/webservice/perl/lib/</computeroutput>
+ directory contains a pre-generated Perl module that allows for
+ communicating with the web service from Perl. You can generate such a
+ module yourself using the "stubmaker" tool that comes with SOAP::Lite,
+ but since that tool is slow as well as sometimes unreliable, we are
+ shipping a working module with the SDK for your convenience.</para>
+
+ <para>Perform the following steps:<orderedlist>
+ <listitem>
+ <para>If SOAP::Lite is not yet installed on your system, you
+ will need to install the package first. On Debian-based systems,
+ the package is called
+ <computeroutput>libsoap-lite-perl</computeroutput>; on Gentoo,
+ it's <computeroutput>dev-perl/SOAP-Lite</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para>Open a terminal in the
+ <computeroutput>sdk/bindings/webservice/perl/samples/</computeroutput>
+ directory.</para>
+ </listitem>
+
+ <listitem>
+ <para>To start the VirtualBox web service, open a second
+ terminal and change to the directory where the VirtualBox
+ executables are located. Then type:<screen>./vboxwebsrv -v</screen></para>
+
+ <para>The web service now waits for connections and will run
+ until you press Ctrl+C in this second terminal. The -v argument
+ causes it to log all connections to the terminal. (See <xref
+ linkend="runvboxwebsrv" os="" /> for details on how to run the
+ web service.)</para>
+ </listitem>
+
+ <listitem>
+ <para>In the first terminal with the Perl sample, run the
+ clienttest.pl script:<screen>perl -I ../lib clienttest.pl</screen></para>
+ </listitem>
+ </orderedlist></para>
+ </sect2>
+
+ <sect2>
+ <title>Programming considerations for the raw web service</title>
+
+ <para>If you use the raw web service, you need to keep a number of
+ things in mind, or you will sooner or later run into issues that are
+ not immediately obvious. By contrast, the object-oriented client-side
+ libraries described in <xref linkend="glue" /> take care of these
+ things automatically and thus greatly simplify using the web
+ service.</para>
+
+ <sect3 id="rawws-conventions">
+ <title>Fundamental conventions</title>
+
+ <para>If you are familiar with other web services, you may find the
+ VirtualBox web service to behave a bit differently to accommodate
+ for the fact that VirtualBox web service more or less maps the
+ VirtualBox Main COM API. The following main differences had to be
+ taken care of:<itemizedlist>
+ <listitem>
+ <para>Web services, as expressed by WSDL, are not
+ object-oriented. Even worse, they are normally stateless (or,
+ in web services terminology, "loosely coupled"). Web service
+ operations are entirely procedural, and one cannot normally
+ make assumptions about the state of a web service between
+ function calls.</para>
+
+ <para>In particular, this normally means that you cannot work
+ on objects in one method call that were created by another
+ call.</para>
+ </listitem>
+
+ <listitem>
+ <para>By contrast, the VirtualBox Main API, being expressed in
+ COM, is object-oriented and works entirely on objects, which
+ are grouped into public interfaces, which in turn have
+ attributes and methods associated with them.</para>
+ </listitem>
+ </itemizedlist> For the VirtualBox web service, this results in
+ three fundamental conventions:<orderedlist>
+ <listitem>
+ <para>All <emphasis role="bold">function names</emphasis> in
+ the VirtualBox web service consist of an interface name and a
+ method name, joined together by an underscore. This is because
+ there are only functions ("operations") in WSDL, but no
+ classes, interfaces, or methods.</para>
+
+ <para>In addition, all calls to the VirtualBox web service
+ (except for logon, see below) take a <emphasis
+ role="bold">managed object reference</emphasis> as the first
+ argument, representing the object upon which the underlying
+ method is invoked. (Managed object references are explained in
+ detail below; see <xref
+ linkend="managed-object-references" />.)</para>
+
+ <para>So, when one would normally code, in the pseudo-code of
+ an object-oriented language, to invoke a method upon an
+ object:<screen>IMachine machine;
+result = machine.getName();</screen></para>
+
+ <para>In the VirtualBox web service, this looks something like
+ this (again, pseudo-code):<screen>IMachineRef machine;
+result = IMachine_getName(machine);</screen></para>
+ </listitem>
+
+ <listitem>
+ <para>To make the web service stateful, and objects persistent
+ between method calls, the VirtualBox web service introduces a
+ <emphasis role="bold">session manager</emphasis> (by way of
+ the <xref linkend="IWebsessionManager"
+ xreflabel="IWebsessionManager" /> interface), which manages
+ object references. Any client wishing to interact with the web
+ service must first log on to the session manager and in turn
+ receives a managed object reference to an object that supports
+ the <xref linkend="IVirtualBox" xreflabel="IVirtualBox" />
+ interface (the basic interface in the Main API).</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>In other words, as opposed to other web services, <emphasis
+ role="bold">the VirtualBox web service is both object-oriented and
+ stateful.</emphasis></para>
+ </sect3>
+
+ <sect3>
+ <title>Example: A typical web service client session</title>
+
+ <para>A typical short web service session to retrieve the version
+ number of the VirtualBox web service (to be precise, the underlying
+ Main API version number) looks like this:<orderedlist>
+ <listitem>
+ <para>A client logs on to the web service by calling <xref
+ linkend="IWebsessionManager__logon"
+ xreflabel="IWebsessionManager::logon()" /> with a valid user
+ name and password. See <xref linkend="websrv_authenticate" />
+ for details about how authentication works.</para>
+ </listitem>
+
+ <listitem>
+ <para>On the server side,
+ <computeroutput>vboxwebsrv</computeroutput> creates a session,
+ which persists until the client calls <xref
+ linkend="IWebsessionManager__logoff"
+ xreflabel="IWebsessionManager::logoff()" /> or the session
+ times out after a configurable period of inactivity (see <xref
+ linkend="vboxwebsrv-ref" />).</para>
+
+ <para>For the new session, the web service creates an instance
+ of <xref linkend="IVirtualBox" xreflabel="IVirtualBox" />.
+ This interface is the most central one in the Main API and
+ allows access to all other interfaces, either through
+ attributes or method calls. For example, IVirtualBox contains
+ a list of all virtual machines that are currently registered
+ (as they would be listed on the left side of the VirtualBox
+ main program).</para>
+
+ <para>The web service then creates a managed object reference
+ for this instance of IVirtualBox and returns it to the calling
+ client, which receives it as the return value of the logon
+ call. Something like this:</para>
+
+ <screen>string oVirtualBox;
+oVirtualBox = webservice.IWebsessionManager_logon("user", "pass");</screen>
+
+ <para>(The managed object reference "oVirtualBox" is just a
+ string consisting of digits and dashes. However, it is a
+ string with a meaning and will be checked by the web service.
+ For details, see below. As hinted above, <xref
+ linkend="IWebsessionManager__logon"
+ xreflabel="IWebsessionManager::logon()" /> is the
+ <emphasis>only</emphasis> operation provided by the web
+ service which does not take a managed object reference as the
+ first argument!)</para>
+ </listitem>
+
+ <listitem>
+ <para>The VirtualBox Main API documentation says that the
+ <computeroutput>IVirtualBox</computeroutput> interface has a
+ <xref linkend="IVirtualBox__version" xreflabel="version" />
+ attribute, which is a string. For each attribute, there is a
+ "get" and a "set" method in COM, which maps to according
+ operations in the web service. So, to retrieve the "version"
+ attribute of this <computeroutput>IVirtualBox</computeroutput>
+ object, the web service client does this:<screen>string version;
+version = webservice.IVirtualBox_getVersion(oVirtualBox);
+
+print version;</screen></para>
+
+ <para>And it will print
+ "$VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILD".</para>
+ </listitem>
+
+ <listitem>
+ <para>The web service client calls <xref
+ linkend="IWebsessionManager__logoff"
+ xreflabel="IWebsessionManager::logoff()" /> with the
+ VirtualBox managed object reference. This will clean up all
+ allocated resources.</para>
+ </listitem>
+ </orderedlist></para>
+ </sect3>
+
+ <sect3 id="managed-object-references">
+ <title>Managed object references</title>
+
+ <para>To a web service client, a managed object reference looks like
+ a string: two 64-bit hex numbers separated by a dash. This string,
+ however, represents a COM object that "lives" in the web service
+ process. The two 64-bit numbers encoded in the managed object
+ reference represent a session ID (which is the same for all objects
+ in the same web service session, i.e. for all objects after one
+ logon) and a unique object ID within that session.</para>
+
+ <para>Managed object references are created in two
+ situations:<orderedlist>
+ <listitem>
+ <para>When a client logs on, by calling <xref
+ linkend="IWebsessionManager__logon"
+ xreflabel="IWebsessionManager::logon()" />.</para>
+
+ <para>Upon logon, the websession manager creates one instance
+ of <xref linkend="IVirtualBox" xreflabel="IVirtualBox" /> and
+ another object of <xref linkend="ISession"
+ xreflabel="ISession" /> representing the web service session.
+ This can be retrieved using <xref
+ linkend="IWebsessionManager__getSessionObject"
+ xreflabel="IWebsessionManager::getSessionObject()" />.</para>
+
+ <para>(Technically, there is always only one <xref
+ linkend="IVirtualBox" xreflabel="IVirtualBox" /> object, which
+ is shared between all sessions and clients, as it is a COM
+ singleton. However, each session receives its own managed
+ object reference to it. The <xref linkend="ISession"
+ xreflabel="ISession" /> object, however, is created and
+ destroyed for each session.)</para>
+ </listitem>
+
+ <listitem>
+ <para>Whenever a web service clients invokes an operation
+ whose COM implementation creates COM objects.</para>
+
+ <para>For example, <xref linkend="IVirtualBox__createMachine"
+ xreflabel="IVirtualBox::createMachine()" /> creates a new
+ instance of <xref linkend="IMachine" xreflabel="IMachine" />;
+ the COM object returned by the COM method call is then wrapped
+ into a managed object reference by the web server, and this
+ reference is returned to the web service client.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>Internally, in the web service process, each managed object
+ reference is simply a small data structure, containing a COM pointer
+ to the "real" COM object, the web session ID and the object ID. This
+ structure is allocated on creation and stored efficiently in hashes,
+ so that the web service can look up the COM object quickly whenever
+ a web service client wishes to make a method call. The random
+ session ID also ensures that one web service client cannot intercept
+ the objects of another.</para>
+
+ <para>Managed object references are not destroyed automatically and
+ must be released by explicitly calling <xref
+ linkend="IManagedObjectRef__release"
+ xreflabel="IManagedObjectRef::release()" />. This is important, as
+ otherwise hundreds or thousands of managed object references (and
+ corresponding COM objects, which can consume much more memory!) can
+ pile up in the web service process and eventually cause it to deny
+ service.</para>
+
+ <para>To reiterate: The underlying COM object, which the reference
+ points to, is only freed if the managed object reference is
+ released. It is therefore vital that web service clients properly
+ clean up after the managed object references that are returned to
+ them.</para>
+
+ <para>When a web service client calls <xref
+ linkend="IWebsessionManager__logoff"
+ xreflabel="IWebsessionManager::logoff()" />, all managed object
+ references created during the session are automatically freed. For
+ short-lived sessions that do not create a lot of objects, logging
+ off may therefore be sufficient, although it is certainly not "best
+ practice".</para>
+ </sect3>
+
+ <sect3>
+ <title>Some more detail about web service operation</title>
+
+ <sect4 id="soap">
+ <title>SOAP messages</title>
+
+ <para>Whenever a client makes a call to a web service, this
+ involves a complicated procedure internally. These calls are
+ remote procedure calls. Each such procedure call typically
+ consists of two "message" being passed, where each message is a
+ plain-text HTTP request with a standard HTTP header and a special
+ XML document following. This XML document encodes the name of the
+ procedure to call and the argument names and values passed to
+ it.</para>
+
+ <para>To give you an idea of what such a message looks like,
+ assuming that a web service provides a procedure called
+ "SayHello", which takes a string "name" as an argument and returns
+ "Hello" with a space and that name appended, the request message
+ could look like this:</para>
+
+ <para><screen>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;SOAP-ENV:Envelope
+ xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
+ xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:test="http://test/"&gt;
+&lt;SOAP-ENV:Body&gt;
+ &lt;test:SayHello&gt;
+ &lt;name&gt;Peter&lt;/name&gt;
+ &lt;/test:SayHello&gt;
+ &lt;/SOAP-ENV:Body&gt;
+&lt;/SOAP-ENV:Envelope&gt;</screen>A similar message -- the "response" message
+ -- would be sent back from the web service to the client,
+ containing the return value "Hello Peter".</para>
+
+ <para>Most programming languages provide automatic support to
+ generate such messages whenever code in that programming language
+ makes such a request. In other words, these programming languages
+ allow for writing something like this (in pseudo-C++ code):</para>
+
+ <para><screen>webServiceClass service("localhost", 18083); // server and port
+string result = service.SayHello("Peter"); // invoke remote procedure</screen>and
+ would, for these two pseudo-lines, automatically perform these
+ steps:</para>
+
+ <para><orderedlist>
+ <listitem>
+ <para>prepare a connection to a web service running on port
+ 18083 of "localhost";</para>
+ </listitem>
+
+ <listitem>
+ <para>for the <computeroutput>SayHello()</computeroutput>
+ function of the web service, generate a SOAP message like in
+ the above example by encoding all arguments of the remote
+ procedure call (which could involve all kinds of type
+ conversions and complex marshalling for arrays and
+ structures);</para>
+ </listitem>
+
+ <listitem>
+ <para>connect to the web service via HTTP and send that
+ message;</para>
+ </listitem>
+
+ <listitem>
+ <para>wait for the web service to send a response
+ message;</para>
+ </listitem>
+
+ <listitem>
+ <para>decode that response message and put the return value
+ of the remote procedure into the "result" variable.</para>
+ </listitem>
+ </orderedlist></para>
+ </sect4>
+
+ <sect4 id="wsdl">
+ <title>Service descriptions in WSDL</title>
+
+ <para>In the above explanations about SOAP, it was left open how
+ the programming language learns about how to translate function
+ calls in its own syntax into proper SOAP messages. In other words,
+ the programming language needs to know what operations the web
+ service supports and what types of arguments are required for the
+ operation's data in order to be able to properly serialize and
+ deserialize the data to and from the web service. For example, if
+ a web service operation expects a number in "double" floating
+ point format for a particular parameter, the programming language
+ cannot send to it a string instead.</para>
+
+ <para>For this, the Web Service Definition Language (WSDL) was
+ invented, another XML substandard that describes exactly what
+ operations the web service supports and, for each operation, which
+ parameters and types are needed with each request and response
+ message. WSDL descriptions can be incredibly verbose, and one of
+ the few good things that can be said about this standard is that
+ it is indeed supported by most programming languages.</para>
+
+ <para>So, if it is said that a programming language "supports" web
+ services, this typically means that a programming language has
+ support for parsing WSDL files and somehow integrating the remote
+ procedure calls into the native language syntax -- for example,
+ like in the Java sample shown in <xref
+ linkend="webservice-java-sample" />.</para>
+
+ <para>For details about how programming languages support web
+ services, please refer to the documentation that comes with the
+ individual languages. Here are a few pointers:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>For <emphasis role="bold">C++,</emphasis> among many
+ others, the gSOAP toolkit is a good option. Parts of gSOAP are
+ also used in VirtualBox to implement the VirtualBox web
+ service.</para>
+ </listitem>
+
+ <listitem>
+ <para>For <emphasis role="bold">Java,</emphasis> there are
+ several implementations already described in this document
+ (see <xref linkend="glue-jax-ws" /> and <xref
+ linkend="webservice-java-sample" />).</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Perl</emphasis> supports WSDL via
+ the SOAP::Lite package. This in turn comes with a tool called
+ <computeroutput>stubmaker.pl</computeroutput> that allows you
+ to turn any WSDL file into a Perl package that you can import.
+ (You can also import any WSDL file "live" by having it parsed
+ every time the script runs, but that can take a while.) You
+ can then code (again, assuming the above example):<screen>my $result = servicename-&gt;sayHello("Peter");</screen></para>
+
+ <para>A sample that uses SOAP::Lite was described in <xref
+ linkend="raw-webservice-perl" />.</para>
+ </listitem>
+ </orderedlist>
+ </sect4>
+ </sect3>
+ </sect2>
+ </sect1>
+
+ <sect1 id="api_com">
+ <title>Using COM/XPCOM directly</title>
+
+ <para>If you do not require <emphasis>remote</emphasis> procedure calls
+ such as those offered by the VirtualBox web service, and if you know
+ Python or C++ as well as COM, you might find it preferable to program
+ VirtualBox's Main API directly via COM.</para>
+
+ <para>COM stands for "Component Object Model" and is a standard
+ originally introduced by Microsoft in the 1990s for Microsoft Windows.
+ It allows for organizing software in an object-oriented way and across
+ processes; code in one process may access objects that live in another
+ process.</para>
+
+ <para>COM has several advantages: it is language-neutral, meaning that
+ even though all of VirtualBox is internally written in C++, programs
+ written in other languages could communicate with it. COM also cleanly
+ separates interface from implementation, so that external programs need
+ not know anything about the messy and complicated details of VirtualBox
+ internals.</para>
+
+ <para>On a Windows host, all parts of VirtualBox will use the COM
+ functionality that is native to Windows. On other hosts (including
+ Linux), VirtualBox comes with a built-in implementation of XPCOM, as
+ originally created by the Mozilla project, which we have enhanced to
+ support interprocess communication on a level comparable to Microsoft
+ COM. Internally, VirtualBox has an abstraction layer that allows the
+ same VirtualBox code to work both with native COM as well as our XPCOM
+ implementation.</para>
+
+ <sect2 id="pycom">
+ <title>Python COM API</title>
+
+ <para>On Windows, Python scripts can use COM and VirtualBox interfaces
+ to control almost all aspects of virtual machine execution. As an
+ example, use the following commands to instantiate the VirtualBox
+ object and start a VM: <screen>
+ vbox = win32com.client.Dispatch("VirtualBox.VirtualBox")
+ session = win32com.client.Dispatch("VirtualBox.Session")
+ mach = vbox.findMachine("uuid or name of machine to start")
+ progress = mach.launchVMProcess(session, "gui", "")
+ progress.waitForCompletion(-1)
+ </screen> Also, see
+ <computeroutput>/bindings/glue/python/samples/vboxshell.py</computeroutput>
+ for more advanced usage scenarious. However, unless you have specific
+ requirements, we strongly recommend to use the generic glue layer
+ described in the next section to access MS COM objects.</para>
+ </sect2>
+
+ <sect2 id="glue-python">
+ <title>Common Python bindings layer</title>
+
+ <para>As different wrappers ultimately provide access to the same
+ underlying API, and to simplify porting and development of Python
+ application using the VirtualBox Main API, we developed a common glue
+ layer that abstracts out most platform-specific details from the
+ application and allows the developer to focus on application logic.
+ The VirtualBox installer automatically sets up this glue layer for the
+ system default Python install. See below for details on how to set up
+ the glue layer if you want to use a different Python
+ installation.</para>
+
+ <para>In this layer, the class
+ <computeroutput>VirtualBoxManager</computeroutput> hides most
+ platform-specific details. It can be used to access both the local
+ (COM) and the web service based API. The following code can be used by
+ an application to use the glue layer.</para>
+
+ <screen># This code assumes vboxapi.py from VirtualBox distribution
+# being in PYTHONPATH, or installed system-wide
+from vboxapi import VirtualBoxManager
+
+# This code initializes VirtualBox manager with default style
+# and parameters
+virtualBoxManager = VirtualBoxManager(None, None)
+
+# Alternatively, one can be more verbose, and initialize
+# glue with web service backend, and provide authentication
+# information
+virtualBoxManager = VirtualBoxManager("WEBSERVICE",
+ {'url':'http://myhost.com::18083/',
+ 'user':'me',
+ 'password':'secret'}) </screen>
+
+ <para>We supply the <computeroutput>VirtualBoxManager</computeroutput>
+ constructor with 2 arguments: style and parameters. Style defines
+ which bindings style to use (could be "MSCOM", "XPCOM" or
+ "WEBSERVICE"), and if set to <computeroutput>None</computeroutput>
+ defaults to usable platform bindings (MS COM on Windows, XPCOM on
+ other platforms). The second argument defines parameters, passed to
+ the platform-specific module, as we do in the second example, where we
+ pass username and password to be used to authenticate against the web
+ service.</para>
+
+ <para>After obtaining the
+ <computeroutput>VirtualBoxManager</computeroutput> instance, one can
+ perform operations on the IVirtualBox class. For example, the
+ following code will a start virtual machine by name or ID:</para>
+
+ <screen>from vboxapi import VirtualBoxManager
+mgr = VirtualBoxManager(None, None)
+vbox = mgr.vbox
+name = "Linux"
+mach = vbox.findMachine(name)
+session = mgr.mgr.getSessionObject(vbox)
+progress = mach.launchVMProcess(session, "gui", "")
+progress.waitForCompletion(-1)
+mgr.closeMachineSession(session)
+ </screen>
+ <para>
+ Following code will print all registered machines and their log folders
+ </para>
+ <screen>from vboxapi import VirtualBoxManager
+mgr = VirtualBoxManager(None, None)
+vbox = mgr.vbox
+
+for m in mgr.getArray(vbox, 'machines'):
+print "Machine '%s' logs in '%s'" %(m.name, m.logFolder)
+ </screen>
+
+ <para>Code above demonstartes cross-platform access to array properties
+ (certain limitations prevent one from using
+ <computeroutput>vbox.machines</computeroutput> to access a list of
+ available virtual machines in case of XPCOM), and a mechanism of
+ uniform session creation and closing
+ (<computeroutput>mgr.mgr.getSessionObject()</computeroutput>).</para>
+
+ <para>In case you want to use the glue layer with a different Python
+ installation, use these steps in a shell to add the necessary
+ files:</para>
+
+ <screen> # cd VBOX_INSTALL_PATH/sdk/installer
+ # PYTHON vboxapisetup.py install</screen>
+ </sect2>
+
+ <sect2 id="cppcom">
+ <title>C++ COM API</title>
+
+ <para>C++ is the language that VirtualBox itself is written in, so C++
+ is the most direct way to use the Main API -- but it is not
+ necessarily the easiest, as using COM and XPCOM has its own set of
+ complications.</para>
+
+ <para>VirtualBox ships with sample programs that demonstrate how to
+ use the Main API to implement a number of tasks on your host platform.
+ These samples can be found in the
+ <computeroutput>/bindings/xpcom/samples</computeroutput> directory for
+ Linux, Mac OS X and Solaris and
+ <computeroutput>/bindings/mscom/samples</computeroutput> for Windows.
+ The two samples are actually different, because the one for Windows
+ uses native COM, whereas the other uses our XPCOM implementation, as
+ described above.</para>
+
+ <para>Since COM and XPCOM are conceptually very similar but vary in
+ the implementation details, we have created a "glue" layer that
+ shields COM client code from these differences. All VirtualBox uses is
+ this glue layer, so the same code written once works on both Windows
+ hosts (with native COM) as well as on other hosts (with our XPCOM
+ implementation). It is recommended to always use this glue code
+ instead of using the COM and XPCOM APIs directly, as it is very easy
+ to make your code completely independent from the platform it is
+ running on.<!-- A third sample,
+ <computeroutput>tstVBoxAPIGlue.cpp</computeroutput>, illustrates how to
+ use the glue layer.
+--></para>
+
+ <para>In order to encapsulate platform differences between Microsoft
+ COM and XPCOM, the following items should be kept in mind when using
+ the glue layer:</para>
+
+ <para><orderedlist>
+ <listitem>
+ <para><emphasis role="bold">Attribute getters and
+ setters.</emphasis> COM has the notion of "attributes" in
+ interfaces, which roughly compare to C++ member variables in
+ classes. The difference is that for each attribute declared in
+ an interface, COM automatically provides a "get" method to
+ return the attribute's value. Unless the attribute has been
+ marked as "readonly", a "set" attribute is also provided.</para>
+
+ <para>To illustrate, the IVirtualBox interface has a "version"
+ attribute, which is read-only and of the "wstring" type (the
+ standard string type in COM). As a result, you can call the
+ "get" method for this attribute to retrieve the version number
+ of VirtualBox.</para>
+
+ <para>Unfortunately, the implementation differs between COM and
+ XPCOM. Microsoft COM names the "get" method like this:
+ <computeroutput>get_Attribute()</computeroutput>, whereas XPCOM
+ uses this syntax:
+ <computeroutput>GetAttribute()</computeroutput> (and accordingly
+ for "set" methods). To hide these differences, the VirtualBox
+ glue code provides the
+ <computeroutput>COMGETTER(attrib)</computeroutput> and
+ <computeroutput>COMSETTER(attrib)</computeroutput> macros. So,
+ <computeroutput>COMGETTER(version)()</computeroutput> (note, two
+ pairs of brackets) expands to
+ <computeroutput>get_Version()</computeroutput> on Windows and
+ <computeroutput>GetVersion()</computeroutput> on other
+ platforms.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Unicode conversions.</emphasis>
+ While the rest of the modern world has pretty much settled on
+ encoding strings in UTF-8, COM, unfortunately, uses UCS-16
+ encoding. This requires a lot of conversions, in particular
+ between the VirtualBox Main API and the Qt GUI, which, like the
+ rest of Qt, likes to use UTF-8.</para>
+
+ <para>To facilitate these conversions, VirtualBox provides the
+ <computeroutput>com::Bstr</computeroutput> and
+ <computeroutput>com::Utf8Str</computeroutput> classes, which
+ support all kinds of conversions back and forth.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">COM autopointers.</emphasis>
+ Possibly the greatest pain of using COM -- reference counting --
+ is alleviated by the
+ <computeroutput>ComPtr&lt;&gt;</computeroutput> template
+ provided by the <computeroutput>ptr.h</computeroutput> file in
+ the glue layer.</para>
+ </listitem>
+ </orderedlist></para>
+ </sect2>
+
+ <sect2 id="event-queue">
+ <title>Event queue processing</title>
+
+ <para>Both VirtualBox client programs and frontends should
+ periodically perform processing of the main event queue, and do that
+ on the application's main thread. In case of a typical GUI Windows/Mac
+ OS application this happens automatically in the GUI's dispatch loop.
+ However, for CLI only application, the appropriate actions have to be
+ taken. For C++ applications, the VirtualBox SDK provided glue method
+ <screen>
+ int EventQueue::processEventQueue(uint32_t cMsTimeout)
+ </screen> can be used for both blocking and non-blocking operations.
+ For the Python bindings, a common layer provides the method <screen>
+ VirtualBoxManager.waitForEvents(ms)
+ </screen> with similar semantics.</para>
+
+ <para>Things get somewhat more complicated for situations where an
+ application using VirtualBox cannot directly control the main event
+ loop and the main event queue is separated from the event queue of the
+ programming librarly (for example in case of Qt on Unix platforms). In
+ such a case, the application developer is advised to use a
+ platform/toolkit specific event injection mechanism to force event
+ queue checks either based on periodical timer events delivered to the
+ main thread, or by using custom platform messages to notify the main
+ thread when events are available. See the VBoxSDL and Qt (VirtualBox)
+ frontends as examples.</para>
+ </sect2>
+
+ <sect2 id="vbcom">
+ <title>Visual Basic and Visual Basic Script (VBS) on Windows
+ hosts</title>
+
+ <para>On Windows hosts, one can control some of the VirtualBox Main
+ API functionality from VBS scripts, and pretty much everything from
+ Visual Basic programs.<footnote>
+ <para>The difference results from the way VBS treats COM
+ safearrays, which are used to keep lists in the Main API. VBS
+ expects every array element to be a
+ <computeroutput>VARIANT</computeroutput>, which is too strict a
+ limitation for any high performance API. We may lift this
+ restriction for interface APIs in a future version, or
+ alternatively provide conversion APIs.</para>
+ </footnote></para>
+
+ <para>VBS is scripting language available in any recent Windows
+ environment. As an example, the following VBS code will print
+ VirtualBox version: <screen>
+ set vb = CreateObject("VirtualBox.VirtualBox")
+ Wscript.Echo "VirtualBox version " &amp; vb.version
+ </screen> See
+ <computeroutput>bindings/mscom/vbs/sample/vboxinfo.vbs</computeroutput>
+ for the complete sample.</para>
+
+ <para>Visual Basic is a popular high level language capable of
+ accessing COM objects. The following VB code will iterate over all
+ available virtual machines:<screen>
+ Dim vb As VirtualBox.IVirtualBox
+
+ vb = CreateObject("VirtualBox.VirtualBox")
+ machines = ""
+ For Each m In vb.Machines
+ m = m &amp; " " &amp; m.Name
+ Next
+ </screen> See
+ <computeroutput>bindings/mscom/vb/sample/vboxinfo.vb</computeroutput>
+ for the complete sample.</para>
+ </sect2>
+
+ <sect2 id="cbinding">
+ <title>C binding to XPCOM API</title>
+
+ <note>
+ <para>This section currently applies to Linux hosts only.</para>
+ </note>
+
+ <para>Starting with version 2.2, VirtualBox offers a C binding for the
+ XPCOM API.</para>
+
+ <para>The C binding provides a layer enabling object creation, method
+ invocation and attribute access from C.</para>
+
+ <sect3 id="c-gettingstarted">
+ <title>Getting started</title>
+
+ <para>The following sections describe how to use the C binding in a
+ C program.</para>
+
+ <para>For Linux, a sample program is provided which demonstrates use
+ of the C binding to initialize XPCOM, get handles for VirtualBox and
+ Session objects, make calls to list and start virtual machines, and
+ uninitialize resources when done. The program uses the VBoxGlue
+ library to open the C binding layer during runtime.</para>
+
+ <para>The sample program
+ <computeroutput>tstXPCOMCGlue</computeroutput> is located in the bin
+ directory and can be run without arguments. It lists registered
+ machines on the host along with some additional information and ask
+ for a machine to start. The source for this program is available in
+ <computeroutput>sdk/bindings/xpcom/cbinding/samples/</computeroutput>
+ directory. The source for the VBoxGlue library is available in the
+ <computeroutput>sdk/bindings/xpcom/cbinding/</computeroutput>
+ directory.</para>
+ </sect3>
+
+ <sect3 id="c-initialization">
+ <title>XPCOM initialization</title>
+
+ <para>Just like in C++, XPCOM needs to be initialized before it can
+ be used. The <computeroutput>VBoxCAPI_v2_5.h</computeroutput> header
+ provides the interface to the C binding. Here's how to initialize
+ XPCOM:</para>
+
+ <screen>#include "VBoxCAPI_v2_5.h"
+...
+PCVBOXXPCOM g_pVBoxFuncs = NULL;
+IVirtualBox *vbox = NULL;
+ISession *session = NULL;
+
+/*
+ * VBoxGetXPCOMCFunctions() is the only function exported by
+ * VBoxXPCOMC.so and the only one needed to make virtualbox
+ * work with C. This functions gives you the pointer to the
+ * function table (g_pVBoxFuncs).
+ *
+ * Once you get the function table, then how and which functions
+ * to use is explained below.
+ *
+ * g_pVBoxFuncs-&gt;pfnComInitialize does all the necessary startup
+ * action and provides us with pointers to vbox and session handles.
+ * It should be matched by a call to g_pVBoxFuncs-&gt;pfnComUninitialize()
+ * when done.
+ */
+
+g_pVBoxFuncs = VBoxGetXPCOMCFunctions(VBOX_XPCOMC_VERSION);
+g_pVBoxFuncs-&gt;pfnComInitialize(&amp;vbox, &amp;session);</screen>
+
+ <para>If either <computeroutput>vbox</computeroutput> or
+ <computeroutput>session</computeroutput> is still
+ <computeroutput>NULL</computeroutput>, initialization failed and the
+ XPCOM API cannot be used.</para>
+ </sect3>
+
+ <sect3 id="c-invocation">
+ <title>XPCOM method invocation</title>
+
+ <para>Method invocation is straightforward. It looks pretty much
+ like the C++ way, augmented with an extra indirection due to
+ accessing the vtable and passing a pointer to the object as the
+ first argument to serve as the <computeroutput>this</computeroutput>
+ pointer.</para>
+
+ <para>Using the C binding, all method invocations return a numeric
+ result code.</para>
+
+ <para>If an interface is specified as returning an object, a pointer
+ to a pointer to the appropriate object must be passed as the last
+ argument. The method will then store an object pointer in that
+ location.</para>
+
+ <para>In other words, to call an object's method what you need
+ is</para>
+
+ <screen>IObject *object;
+nsresult rc;
+...
+/*
+ * Calling void IObject::method(arg, ...)
+ */
+rc = object-&gt;vtbl-&gt;Method(object, arg, ...);
+
+...
+IFoo *foo;
+/*
+ * Calling IFoo IObject::method(arg, ...)
+ */
+rc = object-&gt;vtbl-&gt;Method(object, args, ..., &amp;foo);</screen>
+
+ <para>As a real-world example of a method invocation, let's call
+ <xref linkend="IMachine__launchVMProcess"
+ xreflabel="IMachine::launchVMProcess" /> which returns an
+ IProgress object. Note again that the method name is
+ capitalized.</para>
+
+ <screen>IProgress *progress;
+...
+rc = vbox-&gt;vtbl-&gt;LaunchVMProcess(
+ machine, /* this */
+ session, /* arg 1 */
+ sessionType, /* arg 2 */
+ env, /* arg 3 */
+ &amp;progress /* Out */
+);
+</screen>
+ </sect3>
+
+ <sect3 id="c-attributes">
+ <title>XPCOM attribute access</title>
+
+ <para>A construct similar to calling non-void methods is used to
+ access object attributes. For each attribute there exists a getter
+ method, the name of which is composed of
+ <computeroutput>Get</computeroutput> followed by the capitalized
+ attribute name. Unless the attribute is read-only, an analogous
+ <computeroutput>Set</computeroutput> method exists. Let's apply
+ these rules to read the <xref linkend="IVirtualBox__revision"
+ xreflabel="IVirtualBox::revision" /> attribute.</para>
+
+ <para>Using the <computeroutput>IVirtualBox</computeroutput> handle
+ <computeroutput>vbox</computeroutput> obtained above, calling its
+ <computeroutput>GetRevision</computeroutput> method looks like
+ this:</para>
+
+ <screen>PRUint32 rev;
+
+rc = vbox-&gt;vtbl-&gt;GetRevision(vbox, &amp;rev);
+if (NS_SUCCEEDED(rc))
+{
+ printf("Revision: %u\n", (unsigned)rev);
+}
+</screen>
+
+ <para>All objects with their methods and attributes are documented
+ in <xref linkend="sdkref_classes" />.</para>
+ </sect3>
+
+ <sect3 id="c-string-handling">
+ <title>String handling</title>
+
+ <para>When dealing with strings you have to be aware of a string's
+ encoding and ownership.</para>
+
+ <para>Internally, XPCOM uses UTF-16 encoded strings. A set of
+ conversion functions is provided to convert other encodings to and
+ from UTF-16. The type of a UTF-16 character is
+ <computeroutput>PRUnichar</computeroutput>. Strings of UTF-16
+ characters are arrays of that type. Most string handling functions
+ take pointers to that type. Prototypes for the following conversion
+ functions are declared in
+ <computeroutput>VBoxCAPI_v2_5.h</computeroutput>.</para>
+
+ <sect4>
+ <title>Conversion of UTF-16 to and from UTF-8</title>
+
+ <screen>int (*pfnUtf16ToUtf8)(const PRUnichar *pwszString, char **ppszString);
+int (*pfnUtf8ToUtf16)(const char *pszString, PRUnichar **ppwszString);
+</screen>
+ </sect4>
+
+ <sect4>
+ <title>Ownership</title>
+
+ <para>The ownership of a string determines who is responsible for
+ releasing resources associated with the string. Whenever XPCOM
+ creates a string, ownership is transferred to the caller. To avoid
+ resource leaks, the caller should release resources once the
+ string is no longer needed.</para>
+ </sect4>
+ </sect3>
+
+ <sect3 id="c-uninitialization">
+ <title>XPCOM uninitialization</title>
+
+ <para>Uninitialization is performed by
+ <computeroutput>g_pVBoxFuncs-&gt;pfnComUninitialize().</computeroutput>
+ If your program can exit from more than one place, it is a good idea
+ to install this function as an exit handler with Standard C's
+ <computeroutput>atexit()</computeroutput> just after calling
+ <computeroutput>g_pVBoxFuncs-&gt;pfnComInitialize()</computeroutput>
+ , e.g. <screen>#include &lt;stdlib.h&gt;
+#include &lt;stdio.h&gt;
+
+...
+
+/*
+ * Make sure g_pVBoxFuncs-&gt;pfnComUninitialize() is called at exit, no
+ * matter if we return from the initial call to main or call exit()
+ * somewhere else. Note that atexit registered functions are not
+ * called upon abnormal termination, i.e. when calling abort() or
+ * signal(). Separate provisions must be taken for these cases.
+ */
+
+if (atexit(g_pVBoxFuncs-&gt;pfnComUninitialize()) != 0) {
+ fprintf(stderr, "failed to register g_pVBoxFuncs-&gt;pfnComUninitialize()\n");
+ exit(EXIT_FAILURE);
+}
+</screen></para>
+
+ <para>Another idea would be to write your own <computeroutput>void
+ myexit(int status)</computeroutput> function, calling
+ <computeroutput>g_pVBoxFuncs-&gt;pfnComUninitialize()</computeroutput>
+ followed by the real <computeroutput>exit()</computeroutput>, and
+ use it instead of <computeroutput>exit()</computeroutput> throughout
+ your program and at the end of
+ <computeroutput>main.</computeroutput></para>
+
+ <para>If you expect the program to be terminated by a signal (e.g.
+ user types CTRL-C sending SIGINT) you might want to install a signal
+ handler setting a flag noting that a signal was sent and then
+ calling
+ <computeroutput>g_pVBoxFuncs-&gt;pfnComUninitialize()</computeroutput>
+ later on (usually <emphasis>not</emphasis> from the handler itself
+ .)</para>
+
+ <para>That said, if a client program forgets to call
+ <computeroutput>g_pVBoxFuncs-&gt;pfnComUninitialize()</computeroutput>
+ before it terminates, there is a mechanism in place which will
+ eventually release references held by the client. You should not
+ rely on this, however.</para>
+ </sect3>
+
+ <sect3 id="c-linking">
+ <title>Compiling and linking</title>
+
+ <para>A program using the C binding has to open the library during
+ runtime using the help of glue code provided and as shown in the
+ example <computeroutput>tstXPCOMCGlue.c</computeroutput>.
+ Compilation and linking can be achieved, e.g., with a makefile
+ fragment similar to</para>
+
+ <screen># Where is the XPCOM include directory?
+INCS_XPCOM = -I../../include
+# Where is the glue code directory?
+GLUE_DIR = ..
+GLUE_INC = -I..
+
+#Compile Glue Library
+VBoxXPCOMCGlue.o: $(GLUE_DIR)/VBoxXPCOMCGlue.c
+ $(CC) $(CFLAGS) $(INCS_XPCOM) $(GLUE_INC) -o $@ -c $&lt;
+
+# Compile.
+program.o: program.c VBoxCAPI_v2_5.h
+ $(CC) $(CFLAGS) $(INCS_XPCOM) $(GLUE_INC) -o $@ -c $&lt;
+
+# Link.
+program: program.o VBoxXPCOMCGlue.o
+ $(CC) -o $@ $^ -ldl</screen>
+ </sect3>
+ </sect2>
+ </sect1>
+ </chapter>
+
+ <chapter id="concepts">
+ <title>Basic VirtualBox concepts; some examples</title>
+
+ <para>The following explains some basic VirtualBox concepts such as the
+ VirtualBox object, sessions and how virtual machines are manipulated and
+ launched using the Main API. The coding examples use a pseudo-code style
+ closely related to the object-oriented web service (OOWS) for JAX-WS.
+ Depending on which environment you are using, you will need to adjust the
+ examples.</para>
+
+ <sect1>
+ <title>Obtaining basic machine information. Reading attributes</title>
+
+ <para>Any program using the Main API will first need access to the
+ global VirtualBox object (see <xref linkend="IVirtualBox"
+ xreflabel="IVirtualBox" />), from which all other functionality of the
+ API is derived. With the OOWS for JAX-WS, this is returned from the
+ <xref linkend="IWebsessionManager__logon"
+ xreflabel="IWebsessionManager::logon()" /> call.</para>
+
+ <para>To enumerate virtual machines, one would look at the "machines"
+ array attribute in the VirtualBox object (see <xref
+ linkend="IVirtualBox__machines" xreflabel="IVirtualBox::machines" />).
+ This array contains all virtual machines currently registered with the
+ host, each of them being an instance of <xref linkend="IMachine"
+ xreflabel="IMachine" />. From each such instance, one can query
+ additional information, such as the UUID, the name, memory, operating
+ system and more by looking at the attributes; see the attributes list in
+ <xref linkend="IMachine" xreflabel="IMachine documentation" />.</para>
+
+ <para>As mentioned in the preceding chapters, depending on your
+ programming environment, attributes are mapped to corresponding "get"
+ and (if the attribute is not read-only) "set" methods. So when the
+ documentation says that IMachine has a "<xref linkend="IMachine__name"
+ xreflabel="name" />" attribute, this means you need to code something
+ like the following to get the machine's name:<screen>IMachine machine = ...;
+String name = machine.getName();</screen>Boolean attribute getters can
+ sometimes be called <computeroutput>isAttribute()</computeroutput> due
+ to JAX-WS naming conventions.</para>
+ </sect1>
+
+ <sect1>
+ <title>Changing machine settings. Sessions</title>
+
+ <para>As said in the previous section, to read a machine's attribute,
+ one invokes the corresponding "get" method. One would think that to
+ change settings of a machine, it would suffice to call the corresponding
+ "set" method -- for example, to set a VM's memory to 1024 MB, one would
+ call <computeroutput>setMemorySize(1024)</computeroutput>. Try that, and
+ you will get an error: "The machine is not mutable."</para>
+
+ <para>So unfortunately, things are not that easy. VirtualBox is a
+ complicated environment in which multiple processes compete for possibly
+ the same resources, especially machine settings. As a result, machines
+ must be "locked" before they can either be modified or started. This is
+ to prevent multiple processes from making conflicting changes to a
+ machine: it should, for example, not be allowed to change the memory
+ size of a virtual machine while it is running. (You can't add more
+ memory to a real computer while it is running either, at least not to an
+ ordinary PC.) Also, two processes must not change settings at the same
+ time, or start a machine at the same time.</para>
+
+ <para>These requirements are implemented in the Main API by way of
+ "sessions", in particular, the <xref linkend="ISession"
+ xreflabel="ISession" /> interface. Each process which talks to
+ VirtualBox needs its own instance of ISession. In the web service, you
+ cannot create such an object, but
+ <computeroutput>vboxwebsrv</computeroutput> creates one for you when you
+ log on, which you can obtain by calling <xref
+ linkend="IWebsessionManager__getSessionObject"
+ xreflabel="IWebsessionManager::getSessionObject()" />.</para>
+
+ <para>This session object must then be used like a mutex semaphore in
+ common programming environments. Before you can change machine settings,
+ you must write-lock the machine by calling <xref
+ linkend="IMachine__lockMachine" xreflabel="IMachine::lockMachine()" />
+ with your process's session object.</para>
+
+ <para>After the machine has been locked, the <xref
+ linkend="ISession__machine" xreflabel="ISession::machine" /> attribute
+ contains a copy of the original IMachine object upon which the session
+ was opened, but this copy is "mutable": you can invoke "set" methods on
+ it.</para>
+
+ <para>When done making the changes to the machine, you must call <xref
+ linkend="IMachine__saveSettings"
+ xreflabel="IMachine::saveSettings()" />, which will copy the changes you
+ have made from your "mutable" machine back to the real machine and write
+ them out to the machine settings XML file. This will make your changes
+ permanent.</para>
+
+ <para>Finally, it is important to always unlock the machine again, by
+ calling <xref linkend="ISession__unlockMachine"
+ xreflabel="ISession::unlockMachine()" />. Otherwise, when the calling
+ process end, the machine will receive the "aborted" state, which can
+ lead to loss of data.</para>
+
+ <para>So, as an example, the sequence to change a machine's memory to
+ 1024 MB is something like this:<screen>IWebsessionManager mgr ...;
+IVirtualBox vbox = mgr.logon(user, pass);
+...
+IMachine machine = ...; // read-only machine
+ISession session = mgr.getSessionObject();
+machine.lockMachine(session, LockType.Write); // machine is now locked for writing
+IMachine mutable = session.getMachine(); // obtain the mutable machine copy
+mutable.setMemorySize(1024);
+mutable.saveSettings(); // write settings to XML
+session.unlockMachine();</screen></para>
+ </sect1>
+
+ <sect1>
+ <title>Launching virtual machines</title>
+
+ <para>To launch a virtual machine, you call <xref
+ linkend="IMachine__launchVMProcess"
+ xreflabel="IMachine::launchVMProcess()" />. In doing so, the caller
+ instructs the VirtualBox engine to start a new process with the virtual
+ machine in it, since to the host, each virtual machine looks like a
+ single process, even if it has hundreds of its own processes inside.
+ (This new VM process in turn obtains a write lock on the machine, as
+ described above, to prevent conflicting changes from other processes;
+ this is why opening another session will fail while the VM is
+ running.)</para>
+
+ <para>Starting a machine looks something like this:<screen>IWebsessionManager mgr ...;
+IVirtualBox vbox = mgr.logon(user, pass);
+...
+IMachine machine = ...; // read-only machine
+ISession session = mgr.getSessionObject();
+IProgress prog = machine.launchVMProcess(session,
+ "gui", // session type
+ ""); // possibly environment setting
+prog.waitForCompletion(10000); // give the process 10 secs
+if (prog.getResultCode() != 0) // check success
+ System.out.println("Cannot launch VM!")</screen></para>
+
+ <para>The caller's session object can then be used as a sort of remote
+ control to the VM process that was launched. It contains a "console"
+ object (see <xref linkend="ISession__console"
+ xreflabel="ISession::console" />) with which the VM can be paused,
+ stopped, snapshotted or other things.</para>
+ </sect1>
+
+ <sect1>
+ <title>VirtualBox events</title>
+
+ <para>In VirtualBox, "events" provide a uniform mechanism to register
+ for and consume specific events. A VirtualBox client can register an
+ "event listener" (represented by the <xref linkend="IEventListener"
+ xreflabel="IEventListener" /> interface), which will then get notified
+ by the server when an event (represented by the <xref linkend="IEvent"
+ xreflabel="IEvent" /> interface) happens.</para>
+
+ <para>The IEvent interface is an abstract parent interface for all
+ events that can occur in VirtualBox. The actual events that the server
+ sends out are then of one of the specific subclasses, for example <xref
+ linkend="IMachineStateChangedEvent"
+ xreflabel="IMachineStateChangedEvent" /> or <xref
+ linkend="IMediumChangedEvent" xreflabel="IMediumChangedEvent" />.</para>
+
+ <para>As an example, the VirtualBox GUI waits for machine events and can
+ thus update its display when the machine state changes or machine
+ settings are modified, even if this happens in another client. This is
+ how the GUI can automatically refresh its display even if you manipulate
+ a machine from another client, for example, from VBoxManage.</para>
+
+ <para>To register an event listener to listen to events, use code like
+ this:<screen>EventSource es = console.getEventSource();
+IEventListener listener = es.createListener();
+VBoxEventType aTypes[] = (VBoxEventType.OnMachineStateChanged);
+ // list of event types to listen for
+es.registerListener(listener, aTypes, false /* active */);
+ // register passive listener
+IEvent ev = es.getEvent(listener, 1000);
+ // wait up to one second for event to happen
+if (ev != null)
+{
+ // downcast to specific event interface (in this case we have only registered
+ // for one type, otherwise IEvent::type would tell us)
+ IMachineStateChangedEvent mcse = IMachineStateChangedEvent.queryInterface(ev);
+ ... // inspect and do something
+ es.eventProcessed(listener, ev);
+}
+...
+es.unregisterListener(listener); </screen></para>
+
+ <para>A graphical user interface would probably best start its own
+ thread to wait for events and then process these in a loop.</para>
+
+ <para>The events mechanism was introduced with VirtualBox 3.3 and
+ replaces various callback interfaces which were called for each event in
+ the interface. The callback mechanism was not compatible with scripting
+ languages, local Java bindings and remote web services as they do not
+ support callbacks. The new mechanism with events and event listeners
+ works with all of these.</para>
+
+ <para>To simplify developement of application using events, concept of
+ event aggregator was introduced. Essentially it's mechanism to aggregate
+ multiple event sources into single one, and then work with this single
+ aggregated event source instead of original sources. As an example, one
+ can evaluate demo recorder in VirtualBox Python shell, shipped with SDK
+ - it records mouse and keyboard events, represented as separate event
+ sources. Code is essentially like this:<screen>
+ listener = console.eventSource.createListener()
+ agg = console.eventSource.createAggregator([console.keyboard.eventSource, console.mouse.eventSource])
+ agg.registerListener(listener, [ctx['global'].constants.VBoxEventType_Any], False)
+ registered = True
+ end = time.time() + dur
+ while time.time() &lt; end:
+ ev = agg.getEvent(listener, 1000)
+ processEent(ev)
+ agg.unregisterListener(listener)</screen> Without using aggregators
+ consumer have to poll on both sources, or start multiple threads to
+ block on those sources.</para>
+ </sect1>
+ </chapter>
+
+ <chapter id="vboxshell">
+ <title>The VirtualBox shell</title>
+
+ <para>VirtualBox comes with an extensible shell, which allows you to
+ control your virtual machines from the command line. It is also a
+ nontrivial example of how to use the VirtualBox APIs from Python, for all
+ three COM/XPCOM/WS styles of the API.</para>
+
+ <para>You can easily extend this shell with your own commands. Create a
+ subdirectory named <computeroutput>.VirtualBox/shexts</computeroutput>
+ below your home directory and put a Python file implementing your shell
+ extension commands in this directory. This file must contain an array
+ named <computeroutput>commands</computeroutput> containing your command
+ definitions: <screen>
+ commands = {
+ 'cmd1': ['Command cmd1 help', cmd1],
+ 'cmd2': ['Command cmd2 help', cmd2]
+ }
+ </screen> For example, to create a command for creating hard drive
+ images, the following code can be used: <screen>
+ def createHdd(ctx,args):
+ # Show some meaningful error message on wrong input
+ if (len(args) &lt; 3):
+ print "usage: createHdd sizeM location type"
+ return 0
+
+ # Get arguments
+ size = int(args[1])
+ loc = args[2]
+ if len(args) &gt; 3:
+ format = args[3]
+ else:
+ # And provide some meaningful defaults
+ format = "vdi"
+
+ # Call VirtualBox API, using context's fields
+ hdd = ctx['vb'].createHardDisk(format, loc)
+ # Access constants using ctx['global'].constants
+ progress = hdd.createBaseStorage(size, ctx['global'].constants.HardDiskVariant_Standard)
+ # use standard progress bar mechanism
+ ctx['progressBar'](progress)
+
+
+ # Report errors
+ if not hdd.id:
+ print "cannot create disk (file %s exist?)" %(loc)
+ return 0
+
+ # Give user some feedback on success too
+ print "created HDD with id: %s" %(hdd.id)
+
+ # 0 means continue execution, other values mean exit from the interpreter
+ return 0
+
+ commands = {
+ 'myCreateHDD': ['Create virtual HDD, createHdd size location type', createHdd]
+ }
+ </screen> Just store the above text in the file
+ <computeroutput>createHdd</computeroutput> (or any other meaningful name)
+ in <computeroutput>.VirtualBox/shexts/</computeroutput>. Start the
+ VirtualBox shell, or just issue the
+ <computeroutput>reloadExts</computeroutput> command, if the shell is
+ already running. Your new command will now be available.</para>
+ </chapter>
+
+ <!--$VIRTUALBOX_MAIN_API_REFERENCE-->
+
+ <chapter id="hgcm">
+ <title>Host-Guest Communication Manager</title>
+
+ <para>The VirtualBox Host-Guest Communication Manager (HGCM) allows a
+ guest application or a guest driver to call a host shared library. The
+ following features of VirtualBox are implemented using HGCM: <itemizedlist>
+ <listitem>
+ <para>Shared Folders</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared Clipboard</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest configuration interface</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>The shared library contains a so called HGCM service. The guest HGCM
+ clients establish connections to the service to call it. When calling a
+ HGCM service the client supplies a function code and a number of
+ parameters for the function.</para>
+
+ <sect1>
+ <title>Virtual hardware implementation</title>
+
+ <para>HGCM uses the VMM virtual PCI device to exchange data between the
+ guest and the host. The guest always acts as an initiator of requests. A
+ request is constructed in the guest physical memory, which must be
+ locked by the guest. The physical address is passed to the VMM device
+ using a 32 bit <computeroutput>out edx, eax</computeroutput>
+ instruction. The physical memory must be allocated below 4GB by 64 bit
+ guests.</para>
+
+ <para>The host parses the request header and data and queues the request
+ for a host HGCM service. The guest continues execution and usually waits
+ on a HGCM event semaphore.</para>
+
+ <para>When the request has been processed by the HGCM service, the VMM
+ device sets the completion flag in the request header, sets the HGCM
+ event and raises an IRQ for the guest. The IRQ handler signals the HGCM
+ event semaphore and all HGCM callers check the completion flag in the
+ corresponding request header. If the flag is set, the request is
+ considered completed.</para>
+ </sect1>
+
+ <sect1>
+ <title>Protocol specification</title>
+
+ <para>The HGCM protocol definitions are contained in the
+ <computeroutput>VBox/VBoxGuest.h</computeroutput></para>
+
+ <sect2>
+ <title>Request header</title>
+
+ <para>HGCM request structures contains a generic header
+ (VMMDevHGCMRequestHeader): <table>
+ <title>HGCM Request Generic Header</title>
+
+ <tgroup cols="2">
+ <tbody>
+ <row>
+ <entry><emphasis role="bold">Name</emphasis></entry>
+
+ <entry><emphasis role="bold">Description</emphasis></entry>
+ </row>
+
+ <row>
+ <entry>size</entry>
+
+ <entry>Size of the entire request.</entry>
+ </row>
+
+ <row>
+ <entry>version</entry>
+
+ <entry>Version of the header, must be set to
+ <computeroutput>0x10001</computeroutput>.</entry>
+ </row>
+
+ <row>
+ <entry>type</entry>
+
+ <entry>Type of the request.</entry>
+ </row>
+
+ <row>
+ <entry>rc</entry>
+
+ <entry>HGCM return code, which will be set by the VMM
+ device.</entry>
+ </row>
+
+ <row>
+ <entry>reserved1</entry>
+
+ <entry>A reserved field 1.</entry>
+ </row>
+
+ <row>
+ <entry>reserved2</entry>
+
+ <entry>A reserved field 2.</entry>
+ </row>
+
+ <row>
+ <entry>flags</entry>
+
+ <entry>HGCM flags, set by the VMM device.</entry>
+ </row>
+
+ <row>
+ <entry>result</entry>
+
+ <entry>The HGCM result code, set by the VMM device.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table> <note>
+ <itemizedlist>
+ <listitem>
+ <para>All fields are 32 bit.</para>
+ </listitem>
+
+ <listitem>
+ <para>Fields from <computeroutput>size</computeroutput> to
+ <computeroutput>reserved2</computeroutput> are a standard VMM
+ device request header, which is used for other interfaces as
+ well.</para>
+ </listitem>
+ </itemizedlist>
+ </note></para>
+
+ <para>The <emphasis role="bold">type</emphasis> field indicates the
+ type of the HGCM request: <table>
+ <title>Request Types</title>
+
+ <tgroup cols="2">
+ <tbody>
+ <row>
+ <entry><emphasis role="bold">Name (decimal
+ value)</emphasis></entry>
+
+ <entry><emphasis role="bold">Description</emphasis></entry>
+ </row>
+
+ <row>
+ <entry>VMMDevReq_HGCMConnect
+ (<computeroutput>60</computeroutput>)</entry>
+
+ <entry>Connect to a HGCM service.</entry>
+ </row>
+
+ <row>
+ <entry>VMMDevReq_HGCMDisconnect
+ (<computeroutput>61</computeroutput>)</entry>
+
+ <entry>Disconnect from the service.</entry>
+ </row>
+
+ <row>
+ <entry>VMMDevReq_HGCMCall32
+ (<computeroutput>62</computeroutput>)</entry>
+
+ <entry>Call a HGCM function using the 32 bit
+ interface.</entry>
+ </row>
+
+ <row>
+ <entry>VMMDevReq_HGCMCall64
+ (<computeroutput>63</computeroutput>)</entry>
+
+ <entry>Call a HGCM function using the 64 bit
+ interface.</entry>
+ </row>
+
+ <row>
+ <entry>VMMDevReq_HGCMCancel
+ (<computeroutput>64</computeroutput>)</entry>
+
+ <entry>Cancel a HGCM request currently being processed by a
+ host HGCM service.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table></para>
+
+ <para>The <emphasis role="bold">flags</emphasis> field may contain:
+ <table>
+ <title>Flags</title>
+
+ <tgroup cols="2">
+ <tbody>
+ <row>
+ <entry><emphasis role="bold">Name (hexadecimal
+ value)</emphasis></entry>
+
+ <entry><emphasis role="bold">Description</emphasis></entry>
+ </row>
+
+ <row>
+ <entry>VBOX_HGCM_REQ_DONE
+ (<computeroutput>0x00000001</computeroutput>)</entry>
+
+ <entry>The request has been processed by the host
+ service.</entry>
+ </row>
+
+ <row>
+ <entry>VBOX_HGCM_REQ_CANCELLED
+ (<computeroutput>0x00000002</computeroutput>)</entry>
+
+ <entry>This request was cancelled.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table></para>
+ </sect2>
+
+ <sect2>
+ <title>Connect</title>
+
+ <para>The connection request must be issued by the guest HGCM client
+ before it can call the HGCM service (VMMDevHGCMConnect): <table>
+ <title>Connect request</title>
+
+ <tgroup cols="2">
+ <tbody>
+ <row>
+ <entry><emphasis role="bold">Name</emphasis></entry>
+
+ <entry><emphasis role="bold">Description</emphasis></entry>
+ </row>
+
+ <row>
+ <entry>header</entry>
+
+ <entry>The generic HGCM request header with type equal to
+ VMMDevReq_HGCMConnect
+ (<computeroutput>60</computeroutput>).</entry>
+ </row>
+
+ <row>
+ <entry>type</entry>
+
+ <entry>The type of the service location information (32
+ bit).</entry>
+ </row>
+
+ <row>
+ <entry>location</entry>
+
+ <entry>The service location information (128 bytes).</entry>
+ </row>
+
+ <row>
+ <entry>clientId</entry>
+
+ <entry>The client identifier assigned to the connecting
+ client by the HGCM subsystem (32 bit).</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table> The <emphasis role="bold">type</emphasis> field tells the
+ HGCM how to look for the requested service: <table>
+ <title>Location Information Types</title>
+
+ <tgroup cols="2">
+ <tbody>
+ <row>
+ <entry><emphasis role="bold">Name (hexadecimal
+ value)</emphasis></entry>
+
+ <entry><emphasis role="bold">Description</emphasis></entry>
+ </row>
+
+ <row>
+ <entry>VMMDevHGCMLoc_LocalHost
+ (<computeroutput>0x1</computeroutput>)</entry>
+
+ <entry>The requested service is a shared library located on
+ the host and the location information contains the library
+ name.</entry>
+ </row>
+
+ <row>
+ <entry>VMMDevHGCMLoc_LocalHost_Existing
+ (<computeroutput>0x2</computeroutput>)</entry>
+
+ <entry>The requested service is a preloaded one and the
+ location information contains the service name.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table> <note>
+ <para>Currently preloaded HGCM services are hard-coded in
+ VirtualBox: <itemizedlist>
+ <listitem>
+ <para>VBoxSharedFolders</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxSharedClipboard</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxGuestPropSvc</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxSharedOpenGL</para>
+ </listitem>
+ </itemizedlist></para>
+ </note> There is no difference between both types of HGCM services,
+ only the location mechanism is different.</para>
+
+ <para>The client identifier is returned by the host and must be used
+ in all subsequent requests by the client.</para>
+ </sect2>
+
+ <sect2>
+ <title>Disconnect</title>
+
+ <para>This request disconnects the client and makes the client
+ identifier invalid (VMMDevHGCMDisconnect): <table>
+ <title>Disconnect request</title>
+
+ <tgroup cols="2">
+ <tbody>
+ <row>
+ <entry><emphasis role="bold">Name</emphasis></entry>
+
+ <entry><emphasis role="bold">Description</emphasis></entry>
+ </row>
+
+ <row>
+ <entry>header</entry>
+
+ <entry>The generic HGCM request header with type equal to
+ VMMDevReq_HGCMDisconnect
+ (<computeroutput>61</computeroutput>).</entry>
+ </row>
+
+ <row>
+ <entry>clientId</entry>
+
+ <entry>The client identifier previously returned by the
+ connect request (32 bit).</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table></para>
+ </sect2>
+
+ <sect2>
+ <title>Call32 and Call64</title>
+
+ <para>Calls the HGCM service entry point (VMMDevHGCMCall) using 32 bit
+ or 64 bit addresses: <table>
+ <title>Call request</title>
+
+ <tgroup cols="2">
+ <tbody>
+ <row>
+ <entry><emphasis role="bold">Name</emphasis></entry>
+
+ <entry><emphasis role="bold">Description</emphasis></entry>
+ </row>
+
+ <row>
+ <entry>header</entry>
+
+ <entry>The generic HGCM request header with type equal to
+ either VMMDevReq_HGCMCall32
+ (<computeroutput>62</computeroutput>) or
+ VMMDevReq_HGCMCall64
+ (<computeroutput>63</computeroutput>).</entry>
+ </row>
+
+ <row>
+ <entry>clientId</entry>
+
+ <entry>The client identifier previously returned by the
+ connect request (32 bit).</entry>
+ </row>
+
+ <row>
+ <entry>function</entry>
+
+ <entry>The function code to be processed by the service (32
+ bit).</entry>
+ </row>
+
+ <row>
+ <entry>cParms</entry>
+
+ <entry>The number of following parameters (32 bit). This
+ value is 0 if the function requires no parameters.</entry>
+ </row>
+
+ <row>
+ <entry>parms</entry>
+
+ <entry>An array of parameter description structures
+ (HGCMFunctionParameter32 or
+ HGCMFunctionParameter64).</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table></para>
+
+ <para>The 32 bit parameter description (HGCMFunctionParameter32)
+ consists of 32 bit type field and 8 bytes of an opaque value, so 12
+ bytes in total. The 64 bit variant (HGCMFunctionParameter64) consists
+ of the type and 12 bytes of a value, so 16 bytes in total.</para>
+
+ <para><table>
+ <title>Parameter types</title>
+
+ <tgroup cols="2">
+ <tbody>
+ <row>
+ <entry><emphasis role="bold">Type</emphasis></entry>
+
+ <entry><emphasis role="bold">Format of the
+ value</emphasis></entry>
+ </row>
+
+ <row>
+ <entry>VMMDevHGCMParmType_32bit (1)</entry>
+
+ <entry>A 32 bit value.</entry>
+ </row>
+
+ <row>
+ <entry>VMMDevHGCMParmType_64bit (2)</entry>
+
+ <entry>A 64 bit value.</entry>
+ </row>
+
+ <row>
+ <entry>VMMDevHGCMParmType_PhysAddr (3)</entry>
+
+ <entry>A 32 bit size followed by a 32 bit or 64 bit guest
+ physical address.</entry>
+ </row>
+
+ <row>
+ <entry>VMMDevHGCMParmType_LinAddr (4)</entry>
+
+ <entry>A 32 bit size followed by a 32 bit or 64 bit guest
+ linear address. The buffer is used both for guest to host
+ and for host to guest data.</entry>
+ </row>
+
+ <row>
+ <entry>VMMDevHGCMParmType_LinAddr_In (5)</entry>
+
+ <entry>Same as VMMDevHGCMParmType_LinAddr but the buffer is
+ used only for host to guest data.</entry>
+ </row>
+
+ <row>
+ <entry>VMMDevHGCMParmType_LinAddr_Out (6)</entry>
+
+ <entry>Same as VMMDevHGCMParmType_LinAddr but the buffer is
+ used only for guest to host data.</entry>
+ </row>
+
+ <row>
+ <entry>VMMDevHGCMParmType_LinAddr_Locked (7)</entry>
+
+ <entry>Same as VMMDevHGCMParmType_LinAddr but the buffer is
+ already locked by the guest.</entry>
+ </row>
+
+ <row>
+ <entry>VMMDevHGCMParmType_LinAddr_Locked_In (1)</entry>
+
+ <entry>Same as VMMDevHGCMParmType_LinAddr_In but the buffer
+ is already locked by the guest.</entry>
+ </row>
+
+ <row>
+ <entry>VMMDevHGCMParmType_LinAddr_Locked_Out (1)</entry>
+
+ <entry>Same as VMMDevHGCMParmType_LinAddr_Out but the buffer
+ is already locked by the guest.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table></para>
+
+ <para>The</para>
+ </sect2>
+
+ <sect2>
+ <title>Cancel</title>
+
+ <para>This request cancels a call request (VMMDevHGCMCancel): <table>
+ <title>Cancel request</title>
+
+ <tgroup cols="2">
+ <tbody>
+ <row>
+ <entry><emphasis role="bold">Name</emphasis></entry>
+
+ <entry><emphasis role="bold">Description</emphasis></entry>
+ </row>
+
+ <row>
+ <entry>header</entry>
+
+ <entry>The generic HGCM request header with type equal to
+ VMMDevReq_HGCMCancel
+ (<computeroutput>64</computeroutput>).</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table></para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Guest software interface</title>
+
+ <para>The guest HGCM clients can call HGCM services from both drivers
+ and applications.</para>
+
+ <sect2>
+ <title>The guest driver interface</title>
+
+ <para>The driver interface is implemented in the VirtualBox guest
+ additions driver (VBoxGuest), which works with the VMM virtual device.
+ Drivers must use the VBox Guest Library (VBGL), which provides an API
+ for HGCM clients (<computeroutput>VBox/VBoxGuestLib.h</computeroutput>
+ and <computeroutput>VBox/VBoxGuest.h</computeroutput>).</para>
+
+ <para><screen>
+DECLVBGL(int) VbglHGCMConnect (VBGLHGCMHANDLE *pHandle, VBoxGuestHGCMConnectInfo *pData);
+ </screen> Connects to the service: <screen>
+ VBoxGuestHGCMConnectInfo data;
+
+ memset (&amp;data, sizeof (VBoxGuestHGCMConnectInfo));
+
+ data.result = VINF_SUCCESS;
+ data.Loc.type = VMMDevHGCMLoc_LocalHost_Existing;
+ strcpy (data.Loc.u.host.achName, "VBoxSharedFolders");
+
+ rc = VbglHGCMConnect (&amp;handle, &amp;data);
+
+ if (RT_SUCCESS (rc))
+ {
+ rc = data.result;
+ }
+
+ if (RT_SUCCESS (rc))
+ {
+ /* Get the assigned client identifier. */
+ ulClientID = data.u32ClientID;
+ }
+ </screen></para>
+
+ <para><screen>
+DECLVBGL(int) VbglHGCMDisconnect (VBGLHGCMHANDLE handle, VBoxGuestHGCMDisconnectInfo *pData);
+ </screen> Disconnects from the service. <screen>
+ VBoxGuestHGCMDisconnectInfo data;
+
+ RtlZeroMemory (&amp;data, sizeof (VBoxGuestHGCMDisconnectInfo));
+
+ data.result = VINF_SUCCESS;
+ data.u32ClientID = ulClientID;
+
+ rc = VbglHGCMDisconnect (handle, &amp;data);
+ </screen></para>
+
+ <para><screen>
+DECLVBGL(int) VbglHGCMCall (VBGLHGCMHANDLE handle, VBoxGuestHGCMCallInfo *pData, uint32_t cbData);
+ </screen> Calls a function in the service. <screen>
+typedef struct _VBoxSFRead
+{
+ VBoxGuestHGCMCallInfo callInfo;
+
+ /** pointer, in: SHFLROOT
+ * Root handle of the mapping which name is queried.
+ */
+ HGCMFunctionParameter root;
+
+ /** value64, in:
+ * SHFLHANDLE of object to read from.
+ */
+ HGCMFunctionParameter handle;
+
+ /** value64, in:
+ * Offset to read from.
+ */
+ HGCMFunctionParameter offset;
+
+ /** value64, in/out:
+ * Bytes to read/How many were read.
+ */
+ HGCMFunctionParameter cb;
+
+ /** pointer, out:
+ * Buffer to place data to.
+ */
+ HGCMFunctionParameter buffer;
+
+} VBoxSFRead;
+
+/** Number of parameters */
+#define SHFL_CPARMS_READ (5)
+
+...
+
+ VBoxSFRead data;
+
+ /* The call information. */
+ data.callInfo.result = VINF_SUCCESS; /* Will be returned by HGCM. */
+ data.callInfo.u32ClientID = ulClientID; /* Client identifier. */
+ data.callInfo.u32Function = SHFL_FN_READ; /* The function code. */
+ data.callInfo.cParms = SHFL_CPARMS_READ; /* Number of parameters. */
+
+ /* Initialize parameters. */
+ data.root.type = VMMDevHGCMParmType_32bit;
+ data.root.u.value32 = pMap-&gt;root;
+
+ data.handle.type = VMMDevHGCMParmType_64bit;
+ data.handle.u.value64 = hFile;
+
+ data.offset.type = VMMDevHGCMParmType_64bit;
+ data.offset.u.value64 = offset;
+
+ data.cb.type = VMMDevHGCMParmType_32bit;
+ data.cb.u.value32 = *pcbBuffer;
+
+ data.buffer.type = VMMDevHGCMParmType_LinAddr_Out;
+ data.buffer.u.Pointer.size = *pcbBuffer;
+ data.buffer.u.Pointer.u.linearAddr = (uintptr_t)pBuffer;
+
+ rc = VbglHGCMCall (handle, &amp;data.callInfo, sizeof (data));
+
+ if (RT_SUCCESS (rc))
+ {
+ rc = data.callInfo.result;
+ *pcbBuffer = data.cb.u.value32; /* This is returned by the HGCM service. */
+ }
+ </screen></para>
+ </sect2>
+
+ <sect2>
+ <title>Guest application interface</title>
+
+ <para>Applications call the VirtualBox Guest Additions driver to
+ utilize the HGCM interface. There are IOCTL's which correspond to the
+ <computeroutput>Vbgl*</computeroutput> functions: <itemizedlist>
+ <listitem>
+ <para><computeroutput>VBOXGUEST_IOCTL_HGCM_CONNECT</computeroutput></para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>VBOXGUEST_IOCTL_HGCM_DISCONNECT</computeroutput></para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>VBOXGUEST_IOCTL_HGCM_CALL</computeroutput></para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>These IOCTL's get the same input buffer as
+ <computeroutput>VbglHGCM*</computeroutput> functions and the output
+ buffer has the same format as the input buffer. The same address can
+ be used as the input and output buffers.</para>
+
+ <para>For example see the guest part of shared clipboard, which runs
+ as an application and uses the HGCM interface.</para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>HGCM Service Implementation</title>
+
+ <para>The HGCM service is a shared library with a specific set of entry
+ points. The library must export the
+ <computeroutput>VBoxHGCMSvcLoad</computeroutput> entry point: <screen>
+extern "C" DECLCALLBACK(DECLEXPORT(int)) VBoxHGCMSvcLoad (VBOXHGCMSVCFNTABLE *ptable)
+ </screen></para>
+
+ <para>The service must check the
+ <computeroutput>ptable-&gt;cbSize</computeroutput> and
+ <computeroutput>ptable-&gt;u32Version</computeroutput> fields of the
+ input structure and fill the remaining fields with function pointers of
+ entry points and the size of the required client buffer size.</para>
+
+ <para>The HGCM service gets a dedicated thread, which calls service
+ entry points synchronously, that is the service will be called again
+ only when a previous call has returned. However, the guest calls can be
+ processed asynchronously. The service must call a completion callback
+ when the operation is actually completed. The callback can be issued
+ from another thread as well.</para>
+
+ <para>Service entry points are listed in the
+ <computeroutput>VBox/hgcmsvc.h</computeroutput> in the
+ <computeroutput>VBOXHGCMSVCFNTABLE</computeroutput> structure. <table>
+ <title>Service entry points</title>
+
+ <tgroup cols="2">
+ <tbody>
+ <row>
+ <entry><emphasis role="bold">Entry</emphasis></entry>
+
+ <entry><emphasis role="bold">Description</emphasis></entry>
+ </row>
+
+ <row>
+ <entry>pfnUnload</entry>
+
+ <entry>The service is being unloaded.</entry>
+ </row>
+
+ <row>
+ <entry>pfnConnect</entry>
+
+ <entry>A client <computeroutput>u32ClientID</computeroutput>
+ is connected to the service. The
+ <computeroutput>pvClient</computeroutput> parameter points to
+ an allocated memory buffer which can be used by the service to
+ store the client information.</entry>
+ </row>
+
+ <row>
+ <entry>pfnDisconnect</entry>
+
+ <entry>A client is being disconnected.</entry>
+ </row>
+
+ <row>
+ <entry>pfnCall</entry>
+
+ <entry>A guest client calls a service function. The
+ <computeroutput>callHandle</computeroutput> must be used in
+ the VBOXHGCMSVCHELPERS::pfnCallComplete callback when the call
+ has been processed.</entry>
+ </row>
+
+ <row>
+ <entry>pfnHostCall</entry>
+
+ <entry>Called by the VirtualBox host components to perform
+ functions which should be not accessible by the guest. Usually
+ this entry point is used by VirtualBox to configure the
+ service.</entry>
+ </row>
+
+ <row>
+ <entry>pfnSaveState</entry>
+
+ <entry>The VM state is being saved and the service must save
+ relevant information using the SSM API
+ (<computeroutput>VBox/ssm.h</computeroutput>).</entry>
+ </row>
+
+ <row>
+ <entry>pfnLoadState</entry>
+
+ <entry>The VM is being restored from the saved state and the
+ service must load the saved information and be able to
+ continue operations from the saved state.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table></para>
+ </sect1>
+ </chapter>
+
+ <chapter id="rdpweb">
+ <title>RDP Web Control</title>
+
+ <para>The VirtualBox <emphasis>RDP Web Control</emphasis> (RDPWeb)
+ provides remote access to a running VM. RDPWeb is a RDP (Remote Desktop
+ Protocol) client based on Flash technology and can be used from a Web
+ browser with a Flash plugin.</para>
+
+ <sect1>
+ <title>RDPWeb features</title>
+
+ <para>RDPWeb is embedded into a Web page and can connect to VRDP server
+ in order to displays the VM screen and pass keyboard and mouse events to
+ the VM.</para>
+ </sect1>
+
+ <sect1>
+ <title>RDPWeb reference</title>
+
+ <para>RDPWeb consists of two required components:<itemizedlist>
+ <listitem>
+ <para>Flash movie
+ <computeroutput>RDPClientUI.swf</computeroutput></para>
+ </listitem>
+
+ <listitem>
+ <para>JavaScript helpers
+ <computeroutput>webclient.js</computeroutput></para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>The VirtualBox SDK contains sample HTML code
+ including:<itemizedlist>
+ <listitem>
+ <para>JavaScript library for embedding Flash content
+ <computeroutput>SWFObject.js</computeroutput></para>
+ </listitem>
+
+ <listitem>
+ <para>Sample HTML page
+ <computeroutput>webclient3.html</computeroutput></para>
+ </listitem>
+ </itemizedlist></para>
+
+ <sect2>
+ <title>RDPWeb functions</title>
+
+ <para><computeroutput>RDPClientUI.swf</computeroutput> and
+ <computeroutput>webclient.js</computeroutput> work with each other.
+ JavaScript code is responsible for a proper SWF initialization,
+ delivering mouse events to the SWF and processing resize requests from
+ the SWF. On the other hand, the SWF contains a few JavaScript callable
+ methods, which are used both from
+ <computeroutput>webclient.js</computeroutput> and the user HTML
+ page.</para>
+
+ <sect3>
+ <title>JavaScript functions</title>
+
+ <para><computeroutput>webclient.js</computeroutput> contains helper
+ functions. In the following table ElementId refers to an HTML
+ element name or attribute, and Element to the HTML element itself.
+ HTML code<programlisting>
+ &lt;div id="FlashRDP"&gt;
+ &lt;/div&gt;
+</programlisting> would have ElementId equal to FlashRDP and Element equal to
+ the div element.</para>
+
+ <para><itemizedlist>
+ <listitem>
+ <programlisting>RDPWebClient.embedSWF(SWFFileName, ElementId)</programlisting>
+
+ <para>Uses SWFObject library to replace the HTML element with
+ the Flash movie.</para>
+ </listitem>
+
+ <listitem>
+ <programlisting>RDPWebClient.isRDPWebControlById(ElementId)</programlisting>
+
+ <para>Returns true if the given id refers to a RDPWeb Flash
+ element.</para>
+ </listitem>
+
+ <listitem>
+ <programlisting>RDPWebClient.isRDPWebControlByElement(Element)</programlisting>
+
+ <para>Returns true if the given element is a RDPWeb Flash
+ element.</para>
+ </listitem>
+
+ <listitem>
+ <programlisting>RDPWebClient.getFlashById(ElementId)</programlisting>
+
+ <para>Returns an element, which is referenced by the given id.
+ This function will try to resolve any element, event if it is
+ not a Flash movie.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect3>
+
+ <sect3>
+ <title>Flash methods callable from JavaScript</title>
+
+ <para><computeroutput>RDPWebClienUI.swf</computeroutput> methods can
+ be called directly from JavaScript code on a HTML page.</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>getProperty(Name)</para>
+ </listitem>
+
+ <listitem>
+ <para>setProperty(Name)</para>
+ </listitem>
+
+ <listitem>
+ <para>connect()</para>
+ </listitem>
+
+ <listitem>
+ <para>disconnect()</para>
+ </listitem>
+
+ <listitem>
+ <para>keyboardSendCAD()</para>
+ </listitem>
+ </itemizedlist>
+ </sect3>
+
+ <sect3>
+ <title>Flash JavaScript callbacks</title>
+
+ <para><computeroutput>RDPWebClienUI.swf</computeroutput> calls
+ JavaScript functions provided by the HTML page.</para>
+ </sect3>
+ </sect2>
+
+ <sect2>
+ <title>Embedding RDPWeb in an HTML page</title>
+
+ <para>It is necessary to include
+ <computeroutput>webclient.js</computeroutput> helper script. If
+ SWFObject library is used, the
+ <computeroutput>swfobject.js</computeroutput> must be also included
+ and RDPWeb flash content can be embedded to a Web page using dynamic
+ HTML. The HTML must include a "placeholder", which consists of 2
+ <computeroutput>div</computeroutput> elements.</para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>RDPWeb change log</title>
+
+ <sect2>
+ <title>Version 1.2.28</title>
+
+ <itemizedlist>
+ <listitem>
+ <para><computeroutput>keyboardLayout</computeroutput>,
+ <computeroutput>keyboardLayouts</computeroutput>,
+ <computeroutput>UUID</computeroutput> properties.</para>
+ </listitem>
+
+ <listitem>
+ <para>Support for German keyboard layout on the client.</para>
+ </listitem>
+
+ <listitem>
+ <para>Rebranding to Oracle.</para>
+ </listitem>
+ </itemizedlist>
+ </sect2>
+
+ <sect2>
+ <title>Version 1.1.26</title>
+
+ <itemizedlist>
+ <listitem>
+ <para><computeroutput>webclient.js</computeroutput> is a part of
+ the distribution package.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>lastError</computeroutput> property.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>keyboardSendScancodes</computeroutput> and
+ <computeroutput>keyboardSendCAD</computeroutput> methods.</para>
+ </listitem>
+ </itemizedlist>
+ </sect2>
+
+ <sect2>
+ <title>Version 1.0.24</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>Initial release.</para>
+ </listitem>
+ </itemizedlist>
+ </sect2>
+ </sect1>
+ </chapter>
+
+ <chapter id="vbox-auth">
+ <title>VirtualBox external authentication modules</title>
+
+ <para>VirtualBox supports arbitrary external modules to perform
+ authentication. The module is used when the authentication method is set
+ to "external" for a particular VM VRDE access and the library was
+ specified with <computeroutput>VBoxManage setproperty
+ vrdeauthlibrary</computeroutput>. Web service also use the authentication
+ module which was specified with <computeroutput>VBoxManage setproperty
+ websrvauthlibrary</computeroutput>.</para>
+
+ <para>This library will be loaded by the VM or web service process on
+ demand, i.e. when the first remote desktop connection is made by a client
+ or when a client that wants to use the web service logs on.</para>
+
+ <para>External authentication is the most flexible as the external handler
+ can both choose to grant access to everyone (like the "null"
+ authentication method would) and delegate the request to the guest
+ authentication component. When delegating the request to the guest
+ component, the handler will still be called afterwards with the option to
+ override the result.</para>
+
+ <para>An authentication library is required to implement exactly one entry
+ point:</para>
+
+ <screen>#include "VBoxAuth.h"
+
+/**
+ * Authentication library entry point.
+ *
+ * Parameters:
+ *
+ * szCaller The name of the component which calls the library (UTF8).
+ * pUuid Pointer to the UUID of the accessed virtual machine. Can be NULL.
+ * guestJudgement Result of the guest authentication.
+ * szUser User name passed in by the client (UTF8).
+ * szPassword Password passed in by the client (UTF8).
+ * szDomain Domain passed in by the client (UTF8).
+ * fLogon Boolean flag. Indicates whether the entry point is called
+ * for a client logon or the client disconnect.
+ * clientId Server side unique identifier of the client.
+ *
+ * Return code:
+ *
+ * AuthResultAccessDenied Client access has been denied.
+ * AuthResultAccessGranted Client has the right to use the
+ * virtual machine.
+ * AuthResultDelegateToGuest Guest operating system must
+ * authenticate the client and the
+ * library must be called again with
+ * the result of the guest
+ * authentication.
+ *
+ * Note: When 'fLogon' is 0, only pszCaller, pUuid and clientId are valid and the return
+ * code is ignored.
+ */
+AuthResult AUTHCALL AuthEntry(
+ const char *szCaller,
+ PAUTHUUID pUuid,
+ AuthGuestJudgement guestJudgement,
+ const char *szUser,
+ const char *szPassword
+ const char *szDomain
+ int fLogon,
+ unsigned clientId)
+{
+ /* Process request against your authentication source of choice. */
+ // if (authSucceeded(...))
+ // return AuthResultAccessGranted;
+ return AuthResultAccessDenied;
+}</screen>
+
+ <para>A note regarding the UUID implementation of the
+ <computeroutput>pUuid</computeroutput> argument: VirtualBox uses a
+ consistent binary representation of UUIDs on all platforms. For this
+ reason the integer fields comprising the UUID are stored as little endian
+ values. If you want to pass such UUIDs to code which assumes that the
+ integer fields are big endian (often also called network byte order), you
+ need to adjust the contents of the UUID to e.g. achieve the same string
+ representation. The required changes are:<itemizedlist>
+ <listitem>
+ <para>reverse the order of byte 0, 1, 2 and 3</para>
+ </listitem>
+
+ <listitem>
+ <para>reverse the order of byte 4 and 5</para>
+ </listitem>
+
+ <listitem>
+ <para>reverse the order of byte 6 and 7.</para>
+ </listitem>
+ </itemizedlist>Using this conversion you will get identical results when
+ converting the binary UUID to the string representation.</para>
+
+ <para>The <computeroutput>guestJudgement</computeroutput> argument
+ contains information about the guest authentication status. For the first
+ call, it is always set to
+ <computeroutput>AuthGuestNotAsked</computeroutput>. In case the
+ <computeroutput>AuthEntry</computeroutput> function returns
+ <computeroutput>AuthResultDelegateToGuest</computeroutput>, a guest
+ authentication will be attempted and another call to the
+ <computeroutput>AuthEntry</computeroutput> is made with its result. This
+ can be either granted / denied or no judgement (the guest component chose
+ for whatever reason to not make a decision). In case there is a problem
+ with the guest authentication module (e.g. the Additions are not installed
+ or not running or the guest did not respond within a timeout), the "not
+ reacted" status will be returned.</para>
+ </chapter>
+
+ <chapter id="javaapi">
+ <title>Using Java API</title>
+
+ <sect1>
+ <title>Introduction</title>
+
+ <para>VirtualBox can be controlled by a Java API, both locally
+ (COM/XPCOM) and from remote (SOAP) clients. As with the Python bindings,
+ a generic glue layer tries to hide all platform differences, allowing
+ for source and binary compatibility on different platforms.</para>
+ </sect1>
+
+ <sect1>
+ <title>Requirements</title>
+
+ <para>To use the Java bindings, there are certain requirements depending
+ on the platform. First of all, you need JDK 1.5 (Java 5) or later. Also
+ please make sure that the version of the VirtualBox API .jar file
+ exactly matches the version of VirtualBox you use. To avoid confusion,
+ the VirtualBox API provides versioning in the Java package name, e.g.
+ the package is named <computeroutput>org.virtualbox_3_2</computeroutput>
+ for VirtualBox version 3.2. <itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">XPCOM:</emphasis> - for all platforms,
+ but Microsoft Windows. A Java bridge based on JavaXPCOM is shipped
+ with VirtualBox. The classpath must contain
+ <computeroutput>vboxjxpcom.jar</computeroutput> and the
+ <computeroutput>vbox.home</computeroutput> property must be set to
+ location where the VirtualBox binaries are. Please make sure that
+ the JVM bitness matches bitness of VirtualBox you use as the XPCOM
+ bridge relies on native libraries.</para>
+
+ <para>Start your application like this: <programlisting>
+ java -cp vboxjxpcom.jar -Dvbox.home=/opt/virtualbox MyProgram
+ </programlisting></para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">COM:</emphasis> - for Microsoft
+ Windows. We rely on <computeroutput>Jacob</computeroutput> - a
+ generic Java to COM bridge - which has to be installed seperately.
+ See <ulink
+ url="http://sourceforge.net/projects/jacob-project/">http://sourceforge.net/projects/jacob-project/</ulink>
+ for installation instructions. Also, the VirtualBox provided
+ <computeroutput>vboxjmscom.jar</computeroutput> must be in the
+ class path.</para>
+
+ <para>Start your application like this: <programlisting>
+ java -cp vboxjmscom.jar;c:\jacob\jacob.jar -Djava.library.path=c:\jacob MyProgram
+ </programlisting></para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">SOAP</emphasis> - all platforms. Java
+ 6 is required, as it comes with builtin support for SOAP via the
+ JAX-WS library. Also, the VirtualBox provided
+ <computeroutput>vbojws.jar</computeroutput> must be in the class
+ path. In the SOAP case it's possible to create several
+ VirtualBoxManager instances to communicate with multiple
+ VirtualBox hosts.</para>
+
+ <para>Start your application like this: <programlisting>
+ java -cp vboxjws.jar MyProgram
+ </programlisting></para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>Exception handling is also generalized by the generic glue layer,
+ so that all methods could throw
+ <computeroutput>VBoxException</computeroutput> containing human-readable
+ text message (see <computeroutput>getMessage()</computeroutput> method)
+ along with wrapped original exception (see
+ <computeroutput>getWrapped()</computeroutput> method).</para>
+ </sect1>
+
+ <sect1>
+ <title>Example</title>
+
+ <para>This example shows a simple use case of the Java API. Differences
+ for SOAP vs. local version are minimal, and limited to the connection
+ setup phase (see <computeroutput>ws</computeroutput> variable). In the
+ SOAP case it's possible to create several VirtualBoxManager instances to
+ communicate with multiple VirtualBox hosts. <programlisting>
+ import org.virtualbox_3_3.*;
+ ....
+ VirtualBoxManager mgr = VirtualBoxManager.createInstance(null);
+ boolean ws = false; // or true, if we need the SOAP version
+ if (ws)
+ {
+ String url = "http://myhost:18034";
+ String user = "test";
+ String passwd = "test";
+ mgr.connect(url, user, passwd);
+ }
+ IVirtualBox vbox = mgr.getVBox();
+ System.out.println("VirtualBox version: " + vbox.getVersion() + "\n");
+ // get first VM name
+ String m = vbox.getMachines().get(0).getName();
+ System.out.println("\nAttempting to start VM '" + m + "'");
+ // start it
+ mgr.startVm(m, null, 7000);
+
+ if (ws)
+ mgr.disconnect();
+
+ mgr.cleanup();
+ </programlisting> For more a complete example, see
+ <computeroutput>TestVBox.java</computeroutput>, shipped with the
+ SDK.</para>
+ </sect1>
+ </chapter>
+
+ <chapter>
+ <title>License information</title>
+
+ <para>The sample code files shipped with the SDK are generally licensed
+ liberally to make it easy for anyone to use this code for their own
+ application code.</para>
+
+ <para>The Java files under
+ <computeroutput>bindings/webservice/java/jax-ws/</computeroutput> (library
+ files for the object-oriented web service) are, by contrast, licensed
+ under the GNU Lesser General Public License (LGPL) V2.1.</para>
+
+ <para>See
+ <computeroutput>sdk/bindings/webservice/java/jax-ws/src/COPYING.LIB</computeroutput>
+ for the full text of the LGPL 2.1.</para>
+
+ <para>When in doubt, please refer to the individual source code files
+ shipped with this SDK.</para>
+ </chapter>
+
+ <chapter>
+ <title>Main API change log</title>
+
+ <para>Generally, VirtualBox will maintain API compatibility within a major
+ release; a major release occurs when the first or the second of the three
+ version components of VirtualBox change (that is, in the x.y.z scheme, a
+ major release is one where x or y change, but not when only z
+ changes).</para>
+
+ <para>In other words, updates like those from 2.0.0 to 2.0.2 will not come
+ with API breakages.</para>
+
+ <para>Migration between major releases most likely will lead to API
+ breakage, so please make sure you updated code accordingly. The OOWS Java
+ wrappers enforce that mechanism by putting VirtualBox classes into
+ version-specific packages such as
+ <computeroutput>org.virtualbox_2_2</computeroutput>. This approach allows
+ for connecting to multiple VirtualBox versions simultaneously from the
+ same Java application.</para>
+
+ <para>The following sections list incompatible changes that the Main API
+ underwent since the original release of this SDK Reference with VirtualBox
+ 2.0. A change is deemed "incompatible" only if it breaks existing client
+ code (e.g. changes in method parameter lists, renamed or removed
+ interfaces and similar). In other words, the list does not contain new
+ interfaces, methods or attributes or other changes that do not affect
+ existing client code.</para>
+
+ <sect1>
+ <title>Incompatible API changes with version 4.2</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>Guest control APIs for executing guest processes, working with
+ guest files or directories have been moved to the newly introduced
+ <xref linkend="IGuestSession" xreflabel="IGuestSession" /> interface which
+ can be created by calling <xref linkend="IGuest__createSession"
+ xreflabel="IGuest::createSession()" />.</para>
+
+ <para>A guest session will act as a
+ guest user's impersonation so that the guest credentials only have to
+ be provided when creating a new guest session. There can be up to 32
+ guest sessions at once per VM, each session serving up to 2048 guest
+ processes running or files opened.</para>
+
+ <para>Instead of working with process or directory handles before
+ version 4.2, there now are the dedicated interfaces
+ <xref linkend="IGuestProcess" xreflabel="IGuestProcess" />,
+ <xref linkend="IGuestDirectory" xreflabel="IGuestDirectory" /> and
+ <xref linkend="IGuestFile" xreflabel="IGuestFile" />. To retrieve more
+ information of a file system object the new interface
+ <xref linkend="IGuestFsObjInfo" xreflabel="IGuestFsObjInfo" /> has been
+ introduced.</para>
+
+ <para>Even though the guest control API was changed it is backwards
+ compatible so that it can be used with older installed Guest
+ Additions. However, to use upcoming features like process termination
+ or waiting for input / output new Guest Additions must be installed when
+ these features got implemented.</para>
+
+ <para>The following limitations apply:
+ <itemizedlist>
+ <listitem><para>The <xref linkend="IGuestFile" xreflabel="IGuestFile" />
+ interface is not fully implemented yet.</para>
+ </listitem>
+ <listitem><para>The symbolic link APIs
+ <xref linkend="IGuestSession__symlinkCreate"
+ xreflabel="IGuestSession::symlinkCreate()" />,
+ <xref linkend="IGuestSession__symlinkExists"
+ xreflabel="IGuestSession::symlinkExists()" />,
+ <xref linkend="IGuestSession__symlinkRead"
+ xreflabel="IGuestSession::symlinkRead()" />,
+ <xref linkend="IGuestSession__symlinkRemoveDirectory"
+ xreflabel="IGuestSession::symlinkRemoveDirectory()" /> and
+ <xref linkend="IGuestSession__symlinkRemoveFile"
+ xreflabel="IGuestSession::symlinkRemoveFile()" /> are not
+ implemented yet.</para>
+ </listitem>
+ <listitem><para>The directory APIs
+ <xref linkend="IGuestSession__directoryRemove"
+ xreflabel="IGuestSession::directoryRemove()" />,
+ <xref linkend="IGuestSession__directoryRemoveRecursive"
+ xreflabel="IGuestSession::directoryRemoveRecursive()" />,
+ <xref linkend="IGuestSession__directoryRename"
+ xreflabel="IGuestSession::directoryRename()" /> and
+ <xref linkend="IGuestSession__directorySetACL"
+ xreflabel="IGuestSession::directorySetACL()" /> are not
+ implemented yet.</para>
+ </listitem>
+ <listitem><para>The temporary file creation API
+ <xref linkend="IGuestSession__fileCreateTemp"
+ xreflabel="IGuestSession::fileCreateTemp()" /> is not
+ implemented yet.</para>
+ </listitem>
+ <listitem><para>Guest process termination via
+ <xref linkend="IProcess__terminate"
+ xreflabel="IProcess::terminate()" /> is not
+ implemented yet.</para>
+ </listitem>
+ <listitem><para>Waiting for guest process output via
+ <xref linkend="ProcessWaitForFlag__StdOut" xreflabel="ProcessWaitForFlag::StdOut" />
+ and <xref linkend="ProcessWaitForFlag__StdErr" xreflabel="ProcessWaitForFlag::StdErr" />
+ is not implemented yet.</para><para>To wait for process output, <xref linkend="IProcess__read"
+ xreflabel="IProcess::read()" /> with appropriate flags still can be used to periodically
+ check for new output data to arrive. Note that <xref linkend="ProcessCreateFlag__WaitForStdOut"
+ xreflabel="ProcessCreateFlag::WaitForStdOut" /> and / or
+ <xref linkend="ProcessCreateFlag__WaitForStdErr" xreflabel="ProcessCreateFlag::WaitForStdErr" />
+ need to be specified when creating a guest process via <xref linkend="IGuestSession__processCreate"
+ xreflabel="IGuestSession::processCreate()" /> or <xref linkend="IGuestSession__processCreateEx"
+ xreflabel="IGuestSession::processCreateEx()" />.</para>
+ </listitem>
+ <listitem>
+ <para>ACL (Access Control List) handling in general is not implemented yet.</para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>The <xref linkend="LockType" xreflabel="LockType" />
+ enumeration now has an additional value <computeroutput>VM</computeroutput>
+ which tells <xref linkend="IMachine__lockMachine"
+ xreflabel="IMachine::lockMachine()" /> to create a full-blown
+ object structure for running a VM. This was the previous behavior
+ with <computeroutput>Write</computeroutput>, which now only creates
+ the minimal object structure to save time and resources (at the
+ moment the Console object is still created, but all sub-objects
+ such as Display, Keyboard, Mouse, Guest are not.</para>
+ </listitem>
+
+ <listitem>
+ <para>Machines can be put in groups (actually an array of groups).
+ The primary group affects the default placement of files belonging
+ to a VM. <xref linkend="IVirtualBox__createMachine"
+ xreflabel="IVirtualBox::createMachine()"/> and
+ <xref linkend="IVirtualBox__composeMachineFilename"
+ xreflabel="IVirtualBox::composeMachineFilename()"/> have been
+ adjusted accordingly, the former taking an array of groups as an
+ additional parameter and the latter taking a group as an additional
+ parameter. The create option handling has been changed for those two
+ methods, too.</para>
+ </listitem>
+
+ <listitem>
+ <para>The method IVirtualBox::findMedium() has been removed, since
+ it provides a subset of the functionality of <xref linkend="IVirtualBox__openMedium"
+ xreflabel="IVirtualBox::openMedium()" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>The use of acronyms in API enumeration, interface, attribute
+ and method names has been made much more consistent, previously they
+ sometimes were lowercase and sometimes mixed case. They are now
+ consistently all caps:<table>
+ <title>Renamed identifiers in VirtualBox 4.2</title>
+
+ <tgroup cols="2" style="verywide">
+ <tbody>
+ <row>
+ <entry><emphasis role="bold">Old name</emphasis></entry>
+
+ <entry><emphasis role="bold">New name</emphasis></entry>
+ </row>
+ <row>
+ <entry>PointingHidType</entry>
+ <entry><xref linkend="PointingHIDType" xreflabel="PointingHIDType"/></entry>
+ </row>
+ <row>
+ <entry>KeyboardHidType</entry>
+ <entry><xref linkend="KeyboardHIDType" xreflabel="KeyboardHIDType"/></entry>
+ </row>
+ <row>
+ <entry>IPciAddress</entry>
+ <entry><xref linkend="IPCIAddress" xreflabel="IPCIAddress"/></entry>
+ </row>
+ <row>
+ <entry>IPciDeviceAttachment</entry>
+ <entry><xref linkend="IPCIDeviceAttachment" xreflabel="IPCIDeviceAttachment"/></entry>
+ </row>
+ <row>
+ <entry>IMachine::pointingHidType</entry>
+ <entry><xref linkend="IMachine__pointingHIDType" xreflabel="IMachine::pointingHIDType"/></entry>
+ </row>
+ <row>
+ <entry>IMachine::keyboardHidType</entry>
+ <entry><xref linkend="IMachine__keyboardHIDType" xreflabel="IMachine::keyboardHIDType"/></entry>
+ </row>
+ <row>
+ <entry>IMachine::hpetEnabled</entry>
+ <entry><xref linkend="IMachine__HPETEnabled" xreflabel="IMachine::HPETEnabled"/></entry>
+ </row>
+ <row>
+ <entry>IMachine::sessionPid</entry>
+ <entry><xref linkend="IMachine__sessionPID" xreflabel="IMachine::sessionPID"/></entry>
+ </row>
+ <row>
+ <entry>IMachine::ioCacheEnabled</entry>
+ <entry><xref linkend="IMachine__IOCacheEnabled" xreflabel="IMachine::IOCacheEnabled"/></entry>
+ </row>
+ <row>
+ <entry>IMachine::ioCacheSize</entry>
+ <entry><xref linkend="IMachine__IOCacheSize" xreflabel="IMachine::IOCacheSize"/></entry>
+ </row>
+ <row>
+ <entry>IMachine::pciDeviceAssignments</entry>
+ <entry><xref linkend="IMachine__PCIDeviceAssignments" xreflabel="IMachine::PCIDeviceAssignments"/></entry>
+ </row>
+ <row>
+ <entry>IMachine::attachHostPciDevice()</entry>
+ <entry><xref linkend="IMachine__attachHostPCIDevice" xreflabel="IMachine::attachHostPCIDevice"/></entry>
+ </row>
+ <row>
+ <entry>IMachine::detachHostPciDevice()</entry>
+ <entry><xref linkend="IMachine__detachHostPCIDevice" xreflabel="IMachine::detachHostPCIDevice()"/></entry>
+ </row>
+ <row>
+ <entry>IConsole::attachedPciDevices</entry>
+ <entry><xref linkend="IConsole__attachedPCIDevices" xreflabel="IConsole::attachedPCIDevices"/></entry>
+ </row>
+ <row>
+ <entry>IHostNetworkInterface::dhcpEnabled</entry>
+ <entry><xref linkend="IHostNetworkInterface__DHCPEnabled" xreflabel="IHostNetworkInterface::DHCPEnabled"/></entry>
+ </row>
+ <row>
+ <entry>IHostNetworkInterface::enableStaticIpConfig()</entry>
+ <entry><xref linkend="IHostNetworkInterface__enableStaticIPConfig" xreflabel="IHostNetworkInterface::enableStaticIPConfig()"/></entry>
+ </row>
+ <row>
+ <entry>IHostNetworkInterface::enableStaticIpConfigV6()</entry>
+ <entry><xref linkend="IHostNetworkInterface__enableStaticIPConfigV6" xreflabel="IHostNetworkInterface::enableStaticIPConfigV6()"/></entry>
+ </row>
+ <row>
+ <entry>IHostNetworkInterface::enableDynamicIpConfig()</entry>
+ <entry><xref linkend="IHostNetworkInterface__enableDynamicIPConfig" xreflabel="IHostNetworkInterface::enableDynamicIPConfig()"/></entry>
+ </row>
+ <row>
+ <entry>IHostNetworkInterface::dhcpRediscover()</entry>
+ <entry><xref linkend="IHostNetworkInterface__DHCPRediscover" xreflabel="IHostNetworkInterface::DHCPRediscover()"/></entry>
+ </row>
+ <row>
+ <entry>IHost::Acceleration3DAvailable</entry>
+ <entry><xref linkend="IHost__acceleration3DAvailable" xreflabel="IHost::acceleration3DAvailable"/></entry>
+ </row>
+ <row>
+ <entry>IGuestOSType::recommendedPae</entry>
+ <entry><xref linkend="IGuestOSType__recommendedPAE" xreflabel="IGuestOSType::recommendedPAE"/></entry>
+ </row>
+ <row>
+ <entry>IGuestOSType::recommendedDvdStorageController</entry>
+ <entry><xref linkend="IGuestOSType__recommendedDVDStorageController" xreflabel="IGuestOSType::recommendedDVDStorageController"/></entry>
+ </row>
+ <row>
+ <entry>IGuestOSType::recommendedDvdStorageBus</entry>
+ <entry><xref linkend="IGuestOSType__recommendedDVDStorageBus" xreflabel="IGuestOSType::recommendedDVDStorageBus"/></entry>
+ </row>
+ <row>
+ <entry>IGuestOSType::recommendedHdStorageController</entry>
+ <entry><xref linkend="IGuestOSType__recommendedHDStorageController" xreflabel="IGuestOSType::recommendedHDStorageController"/></entry>
+ </row>
+ <row>
+ <entry>IGuestOSType::recommendedHdStorageBus</entry>
+ <entry><xref linkend="IGuestOSType__recommendedHDStorageBus" xreflabel="IGuestOSType::recommendedHDStorageBus"/></entry>
+ </row>
+ <row>
+ <entry>IGuestOSType::recommendedUsbHid</entry>
+ <entry><xref linkend="IGuestOSType__recommendedUSBHID" xreflabel="IGuestOSType::recommendedUSBHID"/></entry>
+ </row>
+ <row>
+ <entry>IGuestOSType::recommendedHpet</entry>
+ <entry><xref linkend="IGuestOSType__recommendedHPET" xreflabel="IGuestOSType::recommendedHPET"/></entry>
+ </row>
+ <row>
+ <entry>IGuestOSType::recommendedUsbTablet</entry>
+ <entry><xref linkend="IGuestOSType__recommendedUSBTablet" xreflabel="IGuestOSType::recommendedUSBTablet"/></entry>
+ </row>
+ <row>
+ <entry>IGuestOSType::recommendedRtcUseUtc</entry>
+ <entry><xref linkend="IGuestOSType__recommendedRTCUseUTC" xreflabel="IGuestOSType::recommendedRTCUseUTC"/></entry>
+ </row>
+ <row>
+ <entry>IGuestOSType::recommendedUsb</entry>
+ <entry><xref linkend="IGuestOSType__recommendedUSB" xreflabel="IGuestOSType::recommendedUSB"/></entry>
+ </row>
+ <row>
+ <entry>INetworkAdapter::natDriver</entry>
+ <entry><xref linkend="INetworkAdapter__NATEngine" xreflabel="INetworkAdapter::NATEngine"/></entry>
+ </row>
+ <row>
+ <entry>IUSBController::enabledEhci</entry>
+ <entry><xref linkend="IUSBController__enabledEHCI" xreflabel="IUSBController::enabledEHCI"/></entry>
+ </row>
+ <row>
+ <entry>INATEngine::tftpPrefix</entry>
+ <entry><xref linkend="INATEngine__TFTPPrefix" xreflabel="INATEngine::TFTPPrefix"/></entry>
+ </row>
+ <row>
+ <entry>INATEngine::tftpBootFile</entry>
+ <entry><xref linkend="INATEngine__TFTPBootFile" xreflabel="INATEngine::TFTPBootFile"/></entry>
+ </row>
+ <row>
+ <entry>INATEngine::tftpNextServer</entry>
+ <entry><xref linkend="INATEngine__TFTPNextServer" xreflabel="INATEngine::TFTPNextServer"/></entry>
+ </row>
+ <row>
+ <entry>INATEngine::dnsPassDomain</entry>
+ <entry><xref linkend="INATEngine__DNSPassDomain" xreflabel="INATEngine::DNSPassDomain"/></entry>
+ </row>
+ <row>
+ <entry>INATEngine::dnsProxy</entry>
+ <entry><xref linkend="INATEngine__DNSProxy" xreflabel="INATEngine::DNSProxy"/></entry>
+ </row>
+ <row>
+ <entry>INATEngine::dnsUseHostResolver</entry>
+ <entry><xref linkend="INATEngine__DNSUseHostResolver" xreflabel="INATEngine::DNSUseHostResolver"/></entry>
+ </row>
+ <row>
+ <entry>VBoxEventType::OnHostPciDevicePlug</entry>
+ <entry><xref linkend="VBoxEventType__OnHostPCIDevicePlug" xreflabel="VBoxEventType::OnHostPCIDevicePlug"/></entry>
+ </row>
+ <row>
+ <entry>ICPUChangedEvent::cpu</entry>
+ <entry><xref linkend="ICPUChangedEvent__CPU" xreflabel="ICPUChangedEvent::CPU"/></entry>
+ </row>
+ <row>
+ <entry>INATRedirectEvent::hostIp</entry>
+ <entry><xref linkend="INATRedirectEvent__hostIP" xreflabel="INATRedirectEvent::hostIP"/></entry>
+ </row>
+ <row>
+ <entry>INATRedirectEvent::guestIp</entry>
+ <entry><xref linkend="INATRedirectEvent__guestIP" xreflabel="INATRedirectEvent::guestIP"/></entry>
+ </row>
+ <row>
+ <entry>IHostPciDevicePlugEvent</entry>
+ <entry><xref linkend="IHostPCIDevicePlugEvent" xreflabel="IHostPCIDevicePlugEvent"/></entry>
+ </row>
+ </tbody>
+ </tgroup></table></para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+
+ <sect1>
+ <title>Incompatible API changes with version 4.1</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>The method <xref linkend="IAppliance__importMachines"
+ xreflabel="IAppliance::importMachines()" /> has one more parameter
+ now, which allows to configure the import process in more detail.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>The method <xref linkend="IVirtualBox__openMedium"
+ xreflabel="IVirtualBox::openMedium()" /> has one more parameter
+ now, which allows resolving duplicate medium UUIDs without the need
+ for external tools.</para>
+ </listitem>
+
+ <listitem>
+ <para>The <xref linkend="INetworkAdapter" xreflabel="INetworkAdapter"/>
+ interface has been cleaned up. The various methods to activate an
+ attachment type have been replaced by the
+ <xref linkend="INetworkAdapter__attachmentType" xreflabel="INetworkAdapter::attachmentType"/> setter.</para>
+ <para>Additionally each attachment mode now has its own attribute,
+ which means that host only networks no longer share the settings with
+ bridged interfaces.</para>
+ <para>To allow introducing new network attachment implementations
+ without making API changes, the concept of a generic network
+ attachment driver has been introduced, which is configurable through
+ key/value properties.</para>
+ </listitem>
+
+ <listitem>
+ <para>This version introduces the guest facilities concept. A guest
+ facility either represents a module or feature the guest is running or
+ offering, which is defined by <xref linkend="AdditionsFacilityType"
+ xreflabel="AdditionsFacilityType"/>. Each facility is member of a
+ <xref linkend="AdditionsFacilityClass" xreflabel="AdditionsFacilityClass"/>
+ and has a current status indicated by <xref linkend="AdditionsFacilityStatus"
+ xreflabel="AdditionsFacilityStatus"/>, together with a timestamp (in ms) of
+ the last status update.</para>
+ <para>To address the above concept, the following changes were made:
+ <itemizedlist>
+ <listitem>
+ <para>
+ In the <xref linkend="IGuest" xreflabel="IGuest"/> interface, the following were removed:
+ <itemizedlist>
+ <listitem>
+ <para>the <computeroutput>supportsSeamless</computeroutput> attribute;</para>
+ </listitem>
+ <listitem>
+ <para>the <computeroutput>supportsGraphics</computeroutput> attribute;</para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The function <xref linkend="IGuest__getFacilityStatus" xreflabel="IGuest::getFacilityStatus()"/>
+ was added. It quickly provides a facility's status without the need to get the facility
+ collection with <xref linkend="IGuest__facilities" xreflabel="IGuest::facilities"/>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The attribute <xref linkend="IGuest__facilities" xreflabel="IGuest::facilities"/>
+ was added to provide an easy to access collection of all currently known guest
+ facilities, that is, it contains all facilies where at least one status update was
+ made since the guest was started.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The interface <xref linkend="IAdditionsFacility" xreflabel="IAdditionsFacility"/>
+ was added to represent a single facility returned by
+ <xref linkend="IGuest__facilities" xreflabel="IGuest::facilities"/>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <xref linkend="AdditionsFacilityStatus" xreflabel="AdditionsFacilityStatus"/>
+ was added to represent a facility's overall status.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <xref linkend="AdditionsFacilityType" xreflabel="AdditionsFacilityType"/> and
+ <xref linkend="AdditionsFacilityClass" xreflabel="AdditionsFacilityClass"/> were
+ added to represent the facility's type and class.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Incompatible API changes with version 4.0</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>A new Java glue layer replacing the previous OOWS JAX-WS
+ bindings was introduced. The new library allows for uniform code
+ targeting both local (COM/XPCOM) and remote (SOAP) transports. Now,
+ instead of <computeroutput>IWebsessionManager</computeroutput>, the
+ new class <computeroutput>VirtualBoxManager</computeroutput> must be
+ used. See <xref linkend="javaapi" xreflabel="Java API chapter" />
+ for details.</para>
+ </listitem>
+
+ <listitem>
+ <para>The confusingly named and impractical session APIs were
+ changed. In existing client code, the following changes need to be
+ made:<itemizedlist>
+ <listitem>
+ <para>Replace any
+ <computeroutput>IVirtualBox::openSession(uuidMachine,
+ ...)</computeroutput> API call with the machine's <xref
+ linkend="IMachine__lockMachine"
+ xreflabel="IMachine::lockMachine()" /> call and a
+ <computeroutput>LockType.Write</computeroutput> argument. The
+ functionality is unchanged, but instead of "opening a direct
+ session on a machine" all documentation now refers to
+ "obtaining a write lock on a machine for the client
+ session".</para>
+ </listitem>
+
+ <listitem>
+ <para>Similarly, replace any
+ <computeroutput>IVirtualBox::openExistingSession(uuidMachine,
+ ...)</computeroutput> call with the machine's <xref
+ linkend="IMachine__lockMachine"
+ xreflabel="IMachine::lockMachine()" /> call and a
+ <computeroutput>LockType.Shared</computeroutput> argument.
+ Whereas it was previously impossible to connect a client
+ session to a running VM process in a race-free manner, the new
+ API will atomically either write-lock the machine for the
+ current session or establish a remote link to an existing
+ session. Existing client code which tried calling both
+ <computeroutput>openSession()</computeroutput> and
+ <computeroutput>openExistingSession()</computeroutput> can now
+ use this one call instead.</para>
+ </listitem>
+
+ <listitem>
+ <para>Third, replace any
+ <computeroutput>IVirtualBox::openRemoteSession(uuidMachine,
+ ...)</computeroutput> call with the machine's <xref
+ linkend="IMachine__launchVMProcess"
+ xreflabel="IMachine::launchVMProcess()" /> call. The
+ functionality is unchanged.</para>
+ </listitem>
+
+ <listitem>
+ <para>The <xref linkend="SessionState"
+ xreflabel="SessionState" /> enum was adjusted accordingly:
+ "Open" is now "Locked", "Closed" is now "Unlocked", "Closing"
+ is now "Unlocking".</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para>Virtual machines created with VirtualBox 4.0 or later no
+ longer register their media in the global media registry in the
+ <computeroutput>VirtualBox.xml</computeroutput> file. Instead, such
+ machines list all their media in their own machine XML files. As a
+ result, a number of media-related APIs had to be modified again.
+ <itemizedlist>
+ <listitem>
+ <para>Neither <xref linkend="IVirtualBox__createHardDisk"
+ xreflabel="IVirtualBox::createHardDisk()" /> nor <xref
+ linkend="IVirtualBox__openMedium"
+ xreflabel="IVirtualBox::openMedium()" /> register media
+ automatically any more.</para>
+ </listitem>
+
+ <listitem>
+ <para><xref linkend="IMachine__attachDevice"
+ xreflabel="IMachine::attachDevice()" /> and <xref
+ linkend="IMachine__mountMedium"
+ xreflabel="IMachine::mountMedium()" /> now take an IMedium
+ object instead of a UUID as an argument. It is these two calls
+ which add media to a registry now (either a machine registry
+ for machines created with VirtualBox 4.0 or later or the
+ global registry otherwise). As a consequence, if a medium is
+ opened but never attached to a machine, it is no longer added
+ to any registry any more.</para>
+ </listitem>
+
+ <listitem>
+ <para>To reduce code duplication, the APIs
+ IVirtualBox::findHardDisk(), getHardDisk(), findDVDImage(),
+ getDVDImage(), findFloppyImage() and getFloppyImage() have all
+ been merged into IVirtualBox::findMedium(), and
+ IVirtualBox::openHardDisk(), openDVDImage() and
+ openFloppyImage() have all been merged into <xref
+ linkend="IVirtualBox__openMedium"
+ xreflabel="IVirtualBox::openMedium()" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>The rare use case of changing the UUID and parent UUID
+ of a medium previously handled by
+ <computeroutput>openHardDisk()</computeroutput> is now in a
+ separate IMedium::setIDs method.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>ISystemProperties::get/setDefaultHardDiskFolder()</computeroutput>
+ have been removed since disk images are now by default placed
+ in each machine's folder.</para>
+ </listitem>
+
+ <listitem>
+ <para>The <xref linkend="ISystemProperties__infoVDSize"
+ xreflabel="ISystemProperties::infoVDSize" /> attribute
+ replaces the <computeroutput>getMaxVDISize()</computeroutput>
+ API call; this now uses bytes instead of megabytes.</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para>Machine management APIs were enhanced as follows:<itemizedlist>
+ <listitem>
+ <para><xref linkend="IVirtualBox__createMachine"
+ xreflabel="IVirtualBox::createMachine()" /> is no longer
+ restricted to creating machines in the default "Machines"
+ folder, but can now create machines at arbitrary locations.
+ For this to work, the parameter list had to be changed.</para>
+ </listitem>
+
+ <listitem>
+ <para>The long-deprecated
+ <computeroutput>IVirtualBox::createLegacyMachine()</computeroutput>
+ API has been removed.</para>
+ </listitem>
+
+ <listitem>
+ <para>To reduce code duplication and for consistency with the
+ aforementioned media APIs,
+ <computeroutput>IVirtualBox::getMachine()</computeroutput> has
+ been merged with <xref linkend="IVirtualBox__findMachine"
+ xreflabel="IVirtualBox::findMachine()" />, and
+ <computeroutput>IMachine::getSnapshot()</computeroutput> has
+ been merged with <xref linkend="IMachine__findSnapshot"
+ xreflabel="IMachine::findSnapshot()" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>IVirtualBox::unregisterMachine()</computeroutput>
+ was replaced with <xref linkend="IMachine__unregister"
+ xreflabel="IMachine::unregister()" /> with additional
+ functionality for cleaning up machine files.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>IConsole::forgetSavedState</computeroutput>
+ has been renamed to <xref
+ linkend="IConsole__discardSavedState"
+ xreflabel="IConsole::discardSavedState()" />.</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para>All event callbacks APIs were replaced with a new, generic
+ event mechanism that can be used both locally (COM, XPCOM) and
+ remotely (web services). Also, the new mechanism is usable from
+ scripting languages and a local Java. See <xref linkend="IEvent"
+ xreflabel="events" /> for details. The new concept will require
+ changes to all clients that used event callbacks.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>additionsActive()</computeroutput> was
+ replaced with <xref linkend="IGuest__additionsRunLevel"
+ xreflabel="additionsRunLevel()" /> and <xref
+ linkend="IGuest__getAdditionsStatus"
+ xreflabel="getAdditionsStatus()" /> in order to support a more
+ detailed status of the current Guest Additions loading/readiness
+ state. <xref linkend="IGuest__additionsVersion"
+ xreflabel="IGuest::additionsVersion()" /> no longer returns the
+ Guest Additions interface version but the installed Guest Additions
+ version and revision in form of
+ <computeroutput>3.3.0r12345</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para>To address shared folders auto-mounting support, the following
+ APIs were extended to require an additional
+ <computeroutput>automount</computeroutput> parameter: <itemizedlist>
+ <listitem>
+ <para><xref linkend="IVirtualBox__createSharedFolder"
+ xreflabel="IVirtualBox::createSharedFolder()" /></para>
+ </listitem>
+
+ <listitem>
+ <para><xref linkend="IMachine__createSharedFolder"
+ xreflabel="IMachine::createSharedFolder()" /></para>
+ </listitem>
+
+ <listitem>
+ <para><xref linkend="IConsole__createSharedFolder"
+ xreflabel="IConsole::createSharedFolder()" /></para>
+ </listitem>
+ </itemizedlist> Also, a new property named
+ <computeroutput>autoMount</computeroutput> was added to the <xref
+ linkend="ISharedFolder" xreflabel="ISharedFolder" />
+ interface.</para>
+ </listitem>
+
+ <listitem>
+ <para>The appliance (OVF) APIs were enhanced as
+ follows:<itemizedlist>
+ <listitem>
+ <para><xref linkend="IMachine__export"
+ xreflabel="IMachine::export()" /> received an extra parameter
+ <computeroutput>location</computeroutput>, which is used to
+ decide for the disk naming.</para>
+ </listitem>
+
+ <listitem>
+ <para><xref linkend="IAppliance__write"
+ xreflabel="IAppliance::write()" /> received an extra parameter
+ <computeroutput>manifest</computeroutput>, which can suppress
+ creating the manifest file on export.</para>
+ </listitem>
+
+ <listitem>
+ <para><xref linkend="IVFSExplorer__entryList"
+ xreflabel="IVFSExplorer::entryList()" /> received two extra
+ parameters <computeroutput>sizes</computeroutput> and
+ <computeroutput>modes</computeroutput>, which contains the
+ sizes (in bytes) and the file access modes (in octal form) of
+ the returned files.</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para>Support for remote desktop access to virtual machines has been
+ cleaned up to allow third party implementations of the remote
+ desktop server. This is called the VirtualBox Remote Desktop
+ Extension (VRDE) and can be added to VirtualBox by installing the
+ corresponding extension package; see the VirtualBox User Manual for
+ details.</para>
+
+ <para>The following API changes were made to support the VRDE
+ interface: <itemizedlist>
+ <listitem>
+ <para><computeroutput>IVRDPServer</computeroutput> has been
+ renamed to <xref linkend="IVRDEServer"
+ xreflabel="IVRDEServer" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>IRemoteDisplayInfo</computeroutput> has
+ been renamed to <xref linkend="IVRDEServerInfo"
+ xreflabel="IVRDEServerInfo" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><xref linkend="IMachine__VRDEServer"
+ xreflabel="IMachine::VRDEServer" /> replaces
+ <computeroutput>VRDPServer.</computeroutput></para>
+ </listitem>
+
+ <listitem>
+ <para><xref linkend="IConsole__VRDEServerInfo"
+ xreflabel="IConsole::VRDEServerInfo" /> replaces
+ <computeroutput>RemoteDisplayInfo</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para><xref linkend="ISystemProperties__VRDEAuthLibrary"
+ xreflabel="ISystemProperties::VRDEAuthLibrary" /> replaces
+ <computeroutput>RemoteDisplayAuthLibrary</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para>The following methods have been implemented in
+ <computeroutput>IVRDEServer</computeroutput> to support
+ generic VRDE properties: <itemizedlist>
+ <listitem>
+ <para><xref linkend="IVRDEServer__setVRDEProperty"
+ xreflabel="IVRDEServer::setVRDEProperty" /></para>
+ </listitem>
+
+ <listitem>
+ <para><xref linkend="IVRDEServer__getVRDEProperty"
+ xreflabel="IVRDEServer::getVRDEProperty" /></para>
+ </listitem>
+
+ <listitem>
+ <para><xref linkend="IVRDEServer__VRDEProperties"
+ xreflabel="IVRDEServer::VRDEProperties" /></para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>A few implementation-specific attributes of the old
+ <computeroutput>IVRDPServer</computeroutput> interface have
+ been removed and replaced with properties: <itemizedlist>
+ <listitem>
+ <para><computeroutput>IVRDPServer::Ports</computeroutput>
+ has been replaced with the
+ <computeroutput>"TCP/Ports"</computeroutput> property.
+ The property value is a string, which contains a
+ comma-separated list of ports or ranges of ports. Use a
+ dash between two port numbers to specify a range.
+ Example:
+ <computeroutput>"5000,5010-5012"</computeroutput></para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>IVRDPServer::NetAddress</computeroutput>
+ has been replaced with the
+ <computeroutput>"TCP/Address"</computeroutput> property.
+ The property value is an IP address string. Example:
+ <computeroutput>"127.0.0.1"</computeroutput></para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>IVRDPServer::VideoChannel</computeroutput>
+ has been replaced with the
+ <computeroutput>"VideoChannel/Enabled"</computeroutput>
+ property. The property value is either
+ <computeroutput>"true"</computeroutput> or
+ <computeroutput>"false"</computeroutput></para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>IVRDPServer::VideoChannelQuality</computeroutput>
+ has been replaced with the
+ <computeroutput>"VideoChannel/Quality"</computeroutput>
+ property. The property value is a string which contain a
+ decimal number in range 10..100. Invalid values are
+ ignored and the quality is set to the default value 75.
+ Example: <computeroutput>"50"</computeroutput></para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para>The VirtualBox external authentication module interface has
+ been updated and made more generic. Because of that,
+ <computeroutput>VRDPAuthType</computeroutput> enumeration has been
+ renamed to <xref linkend="AuthType" xreflabel="AuthType" />.</para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Incompatible API changes with version 3.2</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>The following interfaces were renamed for consistency:
+ <itemizedlist>
+ <listitem>
+ <para>IMachine::getCpuProperty() is now <xref
+ linkend="IMachine__getCPUProperty"
+ xreflabel="IMachine::getCPUProperty()" />;</para>
+ </listitem>
+
+ <listitem>
+ <para>IMachine::setCpuProperty() is now <xref
+ linkend="IMachine__setCPUProperty"
+ xreflabel="IMachine::setCPUProperty()" />;</para>
+ </listitem>
+
+ <listitem>
+ <para>IMachine::getCpuIdLeaf() is now <xref
+ linkend="IMachine__getCPUIDLeaf"
+ xreflabel="IMachine::getCPUIDLeaf()" />;</para>
+ </listitem>
+
+ <listitem>
+ <para>IMachine::setCpuIdLeaf() is now <xref
+ linkend="IMachine__setCPUIDLeaf"
+ xreflabel="IMachine::setCPUIDLeaf()" />;</para>
+ </listitem>
+
+ <listitem>
+ <para>IMachine::removeCpuIdLeaf() is now <xref
+ linkend="IMachine__removeCPUIDLeaf"
+ xreflabel="IMachine::removeCPUIDLeaf()" />;</para>
+ </listitem>
+
+ <listitem>
+ <para>IMachine::removeAllCpuIdLeafs() is now <xref
+ linkend="IMachine__removeAllCPUIDLeaves"
+ xreflabel="IMachine::removeAllCPUIDLeaves()" />;</para>
+ </listitem>
+
+ <listitem>
+ <para>the CpuPropertyType enum is now <xref
+ linkend="CPUPropertyType"
+ xreflabel="CPUPropertyType" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>IVirtualBoxCallback::onSnapshotDiscarded() is now
+ IVirtualBoxCallback::onSnapshotDeleted.</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para>When creating a VM configuration with <xref
+ linkend="IVirtualBox__createMachine"
+ xreflabel="IVirtualBox::createMachine" />) it is now possible to
+ ignore existing configuration files which would previously have
+ caused a failure. For this the
+ <computeroutput>override</computeroutput> parameter was
+ added.</para>
+ </listitem>
+
+ <listitem>
+ <para>Deleting snapshots via <xref
+ linkend="IConsole__deleteSnapshot"
+ xreflabel="IConsole::deleteSnapshot()" /> is now possible while the
+ associated VM is running in almost all cases. The API is unchanged,
+ but client code that verifies machine states to determine whether
+ snapshots can be deleted may need to be adjusted.</para>
+ </listitem>
+
+ <listitem>
+ <para>The IoBackendType enumeration was replaced with a boolean flag
+ (see <xref linkend="IStorageController__useHostIOCache"
+ xreflabel="IStorageController::useHostIOCache" />).</para>
+ </listitem>
+
+ <listitem>
+ <para>To address multi-monitor support, the following APIs were
+ extended to require an additional
+ <computeroutput>screenId</computeroutput> parameter: <itemizedlist>
+ <listitem>
+ <para><xref linkend="IMachine__querySavedThumbnailSize"
+ xreflabel="IMachine::querySavedThumbnailSize()" /></para>
+ </listitem>
+
+ <listitem>
+ <para><xref linkend="IMachine__readSavedThumbnailToArray"
+ xreflabel="IMachine::readSavedThumbnailToArray()" /></para>
+ </listitem>
+
+ <listitem>
+ <para><xref linkend="IMachine__querySavedScreenshotPNGSize"
+ xreflabel="IMachine::querySavedScreenshotPNGSize()" /></para>
+ </listitem>
+
+ <listitem>
+ <para><xref linkend="IMachine__readSavedScreenshotPNGToArray"
+ xreflabel="IMachine::readSavedScreenshotPNGToArray()" /></para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para>The <computeroutput>shape</computeroutput> parameter of
+ IConsoleCallback::onMousePointerShapeChange was changed from a
+ implementation-specific pointer to a safearray, enabling scripting
+ languages to process pointer shapes.</para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Incompatible API changes with version 3.1</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>Due to the new flexibility in medium attachments that was
+ introduced with version 3.1 (in particular, full flexibility with
+ attaching CD/DVD drives to arbitrary controllers), we seized the
+ opportunity to rework all interfaces dealing with storage media to
+ make the API more flexible as well as logical. The <xref
+ linkend="IStorageController" xreflabel="IStorageController" />,
+ <xref linkend="IMedium" xreflabel="IMedium" />, <xref
+ linkend="IMediumAttachment" xreflabel="IMediumAttachment" /> and,
+ <xref linkend="IMachine" xreflabel="IMachine" /> interfaces were
+ affected the most. Existing code using them to configure storage and
+ media needs to be carefully checked.</para>
+
+ <para>All media (hard disks, floppies and CDs/DVDs) are now
+ uniformly handled through the <xref linkend="IMedium"
+ xreflabel="IMedium" /> interface. The device-specific interfaces
+ (<code>IHardDisk</code>, <code>IDVDImage</code>,
+ <code>IHostDVDDrive</code>, <code>IFloppyImage</code> and
+ <code>IHostFloppyDrive</code>) have been merged into IMedium; CD/DVD
+ and floppy media no longer need special treatment. The device type
+ of a medium determines in which context it can be used. Some
+ functionality was moved to the other storage-related
+ interfaces.</para>
+
+ <para><code>IMachine::attachHardDisk</code> and similar methods have
+ been renamed and generalized to deal with any type of drive and
+ medium. <xref linkend="IMachine__attachDevice"
+ xreflabel="IMachine::attachDevice()" /> is the API method for adding
+ any drive to a storage controller. The floppy and DVD/CD drives are
+ no longer handled specially, and that means you can have more than
+ one of them. As before, drives can only be changed while the VM is
+ powered off. Mounting (or unmounting) removable media at runtime is
+ possible with <xref linkend="IMachine__mountMedium"
+ xreflabel="IMachine::mountMedium()" />.</para>
+
+ <para>Newly created virtual machines have no storage controllers
+ associated with them. Even the IDE Controller needs to be created
+ explicitly. The floppy controller is now visible as a separate
+ controller, with a new storage bus type. For each storage bus type
+ you can query the device types which can be attached, so that it is
+ not necessary to hardcode any attachment rules.</para>
+
+ <para>This required matching changes e.g. in the callback interfaces
+ (the medium specific change notification was replaced by a generic
+ medium change notification) and removing associated enums (e.g.
+ <code>DriveState</code>). In many places the incorrect use of the
+ plural form "media" was replaced by "medium", to improve
+ consistency.</para>
+ </listitem>
+
+ <listitem>
+ <para>Reading the <xref linkend="IMedium__state"
+ xreflabel="IMedium::state" xrefstyle="" /> attribute no longer
+ automatically performs an accessibility check; a new method <xref
+ linkend="IMedium__refreshState"
+ xreflabel="IMedium::refreshState()" /> does this. The attribute only
+ returns the state any more.</para>
+ </listitem>
+
+ <listitem>
+ <para>There were substantial changes related to snapshots, triggered
+ by the "branched snapshots" functionality introduced with version
+ 3.1. IConsole::discardSnapshot was renamed to <xref
+ linkend="IConsole__deleteSnapshot"
+ xreflabel="IConsole::deleteSnapshot()" />.
+ IConsole::discardCurrentState and
+ IConsole::discardCurrentSnapshotAndState were removed; corresponding
+ new functionality is in <xref linkend="IConsole__restoreSnapshot"
+ xreflabel="IConsole::restoreSnapshot()" />. Also, when <xref
+ linkend="IConsole__takeSnapshot"
+ xreflabel="IConsole::takeSnapshot()" /> is called on a running
+ virtual machine, a live snapshot will be created. The old behavior
+ was to temporarily pause the virtual machine while creating an
+ online snapshot.</para>
+ </listitem>
+
+ <listitem>
+ <para>The <computeroutput>IVRDPServer</computeroutput>,
+ <computeroutput>IRemoteDisplayInfo"</computeroutput> and
+ <computeroutput>IConsoleCallback</computeroutput> interfaces were
+ changed to reflect VRDP server ability to bind to one of available
+ ports from a list of ports.</para>
+
+ <para>The <computeroutput>IVRDPServer::port</computeroutput>
+ attribute has been replaced with
+ <computeroutput>IVRDPServer::ports</computeroutput>, which is a
+ comma-separated list of ports or ranges of ports.</para>
+
+ <para>An <computeroutput>IRemoteDisplayInfo::port"</computeroutput>
+ attribute has been added for querying the actual port VRDP server
+ listens on.</para>
+
+ <para>An IConsoleCallback::onRemoteDisplayInfoChange() notification
+ callback has been added.</para>
+ </listitem>
+
+ <listitem>
+ <para>The parameter lists for the following functions were
+ modified:<itemizedlist>
+ <listitem>
+ <para><xref linkend="IHost__removeHostOnlyNetworkInterface"
+ xreflabel="IHost::removeHostOnlyNetworkInterface()" /></para>
+ </listitem>
+
+ <listitem>
+ <para><xref linkend="IHost__removeUSBDeviceFilter"
+ xreflabel="IHost::removeUSBDeviceFilter()" /></para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para>In the OOWS bindings for JAX-WS, the behavior of structures
+ changed: for one, we implemented natural structures field access so
+ you can just call a "get" method to obtain a field. Secondly,
+ setters in structures were disabled as they have no expected effect
+ and were at best misleading.</para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Incompatible API changes with version 3.0</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>In the object-oriented web service bindings for JAX-WS, proper
+ inheritance has been introduced for some classes, so explicit
+ casting is no longer needed to call methods from a parent class. In
+ particular, IHardDisk and other classes now properly derive from
+ <xref linkend="IMedium" xreflabel="IMedium" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>All object identifiers (machines, snapshots, disks, etc)
+ switched from GUIDs to strings (now still having string
+ representation of GUIDs inside). As a result, no particular internal
+ structure can be assumed for object identifiers; instead, they
+ should be treated as opaque unique handles. This change mostly
+ affects Java and C++ programs; for other languages, GUIDs are
+ transparently converted to strings.</para>
+ </listitem>
+
+ <listitem>
+ <para>The uses of NULL strings have been changed greatly. All out
+ parameters now use empty strings to signal a null value. For in
+ parameters both the old NULL and empty string is allowed. This
+ change was necessary to support more client bindings, especially
+ using the web service API. Many of them either have no special NULL
+ value or have trouble dealing with it correctly in the respective
+ library code.</para>
+ </listitem>
+
+ <listitem>
+ <para>Accidentally, the <code>TSBool</code> interface still appeared
+ in 3.0.0, and was removed in 3.0.2. This is an SDK bug, do not use
+ the SDK for VirtualBox 3.0.0 for developing clients.</para>
+ </listitem>
+
+ <listitem>
+ <para>The type of <xref linkend="IVirtualBoxErrorInfo__resultCode"
+ xreflabel="IVirtualBoxErrorInfo::resultCode" /> changed from
+ <computeroutput>result</computeroutput> to
+ <computeroutput>long</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para>The parameter list of IVirtualBox::openHardDisk was
+ changed.</para>
+ </listitem>
+
+ <listitem>
+ <para>The method IConsole::discardSavedState was renamed to
+ IConsole::forgetSavedState, and a parameter was added.</para>
+ </listitem>
+
+ <listitem>
+ <para>The method IConsole::powerDownAsync was renamed to <xref
+ linkend="IConsole__powerDown" xreflabel="IConsole::powerDown" />,
+ and the previous method with that name was deleted. So effectively a
+ parameter was added.</para>
+ </listitem>
+
+ <listitem>
+ <para>In the <xref linkend="IFramebuffer"
+ xreflabel="IFramebuffer" /> interface, the following were
+ removed:<itemizedlist>
+ <listitem>
+ <para>the <computeroutput>operationSupported</computeroutput>
+ attribute;</para>
+
+ <para>(as a result, the
+ <computeroutput>FramebufferAccelerationOperation</computeroutput>
+ enum was no longer needed and removed as well);</para>
+ </listitem>
+
+ <listitem>
+ <para>the <computeroutput>solidFill()</computeroutput>
+ method;</para>
+ </listitem>
+
+ <listitem>
+ <para>the <computeroutput>copyScreenBits()</computeroutput>
+ method.</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para>In the <xref linkend="IDisplay" xreflabel="IDisplay" />
+ interface, the following were removed:<itemizedlist>
+ <listitem>
+ <para>the
+ <computeroutput>setupInternalFramebuffer()</computeroutput>
+ method;</para>
+ </listitem>
+
+ <listitem>
+ <para>the <computeroutput>lockFramebuffer()</computeroutput>
+ method;</para>
+ </listitem>
+
+ <listitem>
+ <para>the <computeroutput>unlockFramebuffer()</computeroutput>
+ method;</para>
+ </listitem>
+
+ <listitem>
+ <para>the
+ <computeroutput>registerExternalFramebuffer()</computeroutput>
+ method.</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Incompatible API changes with version 2.2</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>Added explicit version number into JAX-WS Java package names,
+ such as <computeroutput>org.virtualbox_2_2</computeroutput>,
+ allowing connect to multiple VirtualBox clients from single Java
+ application.</para>
+ </listitem>
+
+ <listitem>
+ <para>The interfaces having a "2" suffix attached to them with
+ version 2.1 were renamed again to have that suffix removed. This
+ time around, this change involves only the name, there are no
+ functional differences.</para>
+
+ <para>As a result, IDVDImage2 is now IDVDImage; IHardDisk2 is now
+ IHardDisk; IHardDisk2Attachment is now IHardDiskAttachment.</para>
+
+ <para>Consequentially, all related methods and attributes that had a
+ "2" suffix have been renamed; for example, IMachine::attachHardDisk2
+ now becomes IMachine::attachHardDisk().</para>
+ </listitem>
+
+ <listitem>
+ <para>IVirtualBox::openHardDisk has an extra parameter for opening a
+ disk read/write or read-only.</para>
+ </listitem>
+
+ <listitem>
+ <para>The remaining collections were replaced by more performant
+ safe-arrays. This affects the following collections:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>IGuestOSTypeCollection</para>
+ </listitem>
+
+ <listitem>
+ <para>IHostDVDDriveCollection</para>
+ </listitem>
+
+ <listitem>
+ <para>IHostFloppyDriveCollection</para>
+ </listitem>
+
+ <listitem>
+ <para>IHostUSBDeviceCollection</para>
+ </listitem>
+
+ <listitem>
+ <para>IHostUSBDeviceFilterCollection</para>
+ </listitem>
+
+ <listitem>
+ <para>IProgressCollection</para>
+ </listitem>
+
+ <listitem>
+ <para>ISharedFolderCollection</para>
+ </listitem>
+
+ <listitem>
+ <para>ISnapshotCollection</para>
+ </listitem>
+
+ <listitem>
+ <para>IUSBDeviceCollection</para>
+ </listitem>
+
+ <listitem>
+ <para>IUSBDeviceFilterCollection</para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+
+ <listitem>
+ <para>Since "Host Interface Networking" was renamed to "bridged
+ networking" and host-only networking was introduced, all associated
+ interfaces needed renaming as well. In detail:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>The HostNetworkInterfaceType enum has been renamed to
+ <xref linkend="HostNetworkInterfaceMediumType"
+ xreflabel="HostNetworkInterfaceMediumType" /></para>
+ </listitem>
+
+ <listitem>
+ <para>The IHostNetworkInterface::type attribute has been renamed
+ to <xref linkend="IHostNetworkInterface__mediumType"
+ xreflabel="IHostNetworkInterface::mediumType" /></para>
+ </listitem>
+
+ <listitem>
+ <para>INetworkAdapter::attachToHostInterface() has been renamed
+ to INetworkAdapter::attachToBridgedInterface</para>
+ </listitem>
+
+ <listitem>
+ <para>In the IHost interface, createHostNetworkInterface() has
+ been renamed to <xref
+ linkend="IHost__createHostOnlyNetworkInterface"
+ xreflabel="createHostOnlyNetworkInterface()" /></para>
+ </listitem>
+
+ <listitem>
+ <para>Similarly, removeHostNetworkInterface() has been renamed
+ to <xref linkend="IHost__removeHostOnlyNetworkInterface"
+ xreflabel="removeHostOnlyNetworkInterface()" /></para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Incompatible API changes with version 2.1</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>With VirtualBox 2.1, error codes were added to many error
+ infos that give the caller a machine-readable (numeric) feedback in
+ addition to the error string that has always been available. This is
+ an ongoing process, and future versions of this SDK reference will
+ document the error codes for each method call.</para>
+ </listitem>
+
+ <listitem>
+ <para>The hard disk and other media interfaces were completely
+ redesigned. This was necessary to account for the support of VMDK,
+ VHD and other image types; since backwards compatibility had to be
+ broken anyway, we seized the moment to redesign the interfaces in a
+ more logical way.</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Previously, the old IHardDisk interface had several
+ derivatives called IVirtualDiskImage, IVMDKImage, IVHDImage,
+ IISCSIHardDisk and ICustomHardDisk for the various disk formats
+ supported by VirtualBox. The new IHardDisk2 interface that comes
+ with version 2.1 now supports all hard disk image formats
+ itself.</para>
+ </listitem>
+
+ <listitem>
+ <para>IHardDiskFormat is a new interface to describe the
+ available back-ends for hard disk images (e.g. VDI, VMDK, VHD or
+ iSCSI). The IHardDisk2::format attribute can be used to find out
+ the back-end that is in use for a particular hard disk image.
+ ISystemProperties::hardDiskFormats[] contains a list of all
+ back-ends supported by the system. <xref
+ linkend="ISystemProperties__defaultHardDiskFormat"
+ xreflabel="ISystemProperties::defaultHardDiskFormat" /> contains
+ the default system format.</para>
+ </listitem>
+
+ <listitem>
+ <para>In addition, the new <xref linkend="IMedium"
+ xreflabel="IMedium" /> interface is a generic interface for hard
+ disk, DVD and floppy images that contains the attributes and
+ methods shared between them. It can be considered a parent class
+ of the more specific interfaces for those images, which are now
+ IHardDisk2, IDVDImage2 and IFloppyImage2.</para>
+
+ <para>In each case, the "2" versions of these interfaces replace
+ the earlier versions that did not have the "2" suffix.
+ Previously, the IDVDImage and IFloppyImage interfaces were
+ entirely unrelated to IHardDisk.</para>
+ </listitem>
+
+ <listitem>
+ <para>As a result, all parts of the API that previously
+ referenced IHardDisk, IDVDImage or IFloppyImage or any of the
+ old subclasses are gone and will have replacements that use
+ IHardDisk2, IDVDImage2 and IFloppyImage2; see, for example,
+ IMachine::attachHardDisk2.</para>
+ </listitem>
+
+ <listitem>
+ <para>In particular, the IVirtualBox::hardDisks2 array replaces
+ the earlier IVirtualBox::hardDisks collection.</para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+
+ <listitem>
+ <para><xref linkend="IGuestOSType" xreflabel="IGuestOSType" /> was
+ extended to group operating systems into families and for 64-bit
+ support.</para>
+ </listitem>
+
+ <listitem>
+ <para>The <xref linkend="IHostNetworkInterface"
+ xreflabel="IHostNetworkInterface" /> interface was completely
+ rewritten to account for the changes in how Host Interface
+ Networking is now implemented in VirtualBox 2.1.</para>
+ </listitem>
+
+ <listitem>
+ <para>The IVirtualBox::machines2[] array replaces the former
+ IVirtualBox::machines collection.</para>
+ </listitem>
+
+ <listitem>
+ <para>Added <xref linkend="IHost__getProcessorFeature"
+ xreflabel="IHost::getProcessorFeature()" /> and <xref
+ linkend="ProcessorFeature" xreflabel="ProcessorFeature" />
+ enumeration.</para>
+ </listitem>
+
+ <listitem>
+ <para>The parameter list for <xref
+ linkend="IVirtualBox__createMachine"
+ xreflabel="IVirtualBox::createMachine()" /> was modified.</para>
+ </listitem>
+
+ <listitem>
+ <para>Added IMachine::pushGuestProperty.</para>
+ </listitem>
+
+ <listitem>
+ <para>New attributes in IMachine: <xref
+ linkend="IMachine__accelerate3DEnabled"
+ xreflabel="accelerate3DEnabled" />, HWVirtExVPIDEnabled, <xref
+ linkend="IMachine__guestPropertyNotificationPatterns"
+ xreflabel="guestPropertyNotificationPatterns" />, <xref
+ linkend="IMachine__CPUCount" xreflabel="CPUCount" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>Added <xref linkend="IConsole__powerUpPaused"
+ xreflabel="IConsole::powerUpPaused()" /> and <xref
+ linkend="IConsole__getGuestEnteredACPIMode"
+ xreflabel="IConsole::getGuestEnteredACPIMode()" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>Removed ResourceUsage enumeration.</para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+ </chapter>
+</book>
+<!-- vim: set shiftwidth=2 tabstop=2 expandtab: -->
diff --git a/doc/manual/en_US/UserManual.xml b/doc/manual/en_US/UserManual.xml
new file mode 100644
index 00000000..383abc84
--- /dev/null
+++ b/doc/manual/en_US/UserManual.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+ "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<book>
+ <bookinfo>
+ <title>$VBOX_PRODUCT<superscript>®</superscript></title>
+
+ <subtitle>User Manual</subtitle>
+
+ <edition>Version
+ $VBOX_VERSION_STRING</edition>
+
+ <corpauthor>$VBOX_VENDOR</corpauthor>
+
+ <address>http://www.virtualbox.org</address>
+
+ <copyright>
+ <year>2004-$VBOX_C_YEAR</year>
+
+ <holder>$VBOX_VENDOR</holder>
+ </copyright>
+ </bookinfo>
+
+ <xi:include href="user_Introduction.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="user_Installation.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="user_BasicConcepts.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="user_GuestAdditions.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="user_Storage.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="user_Networking.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="user_Frontends.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="user_VBoxManage.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="user_AdvancedTopics.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="user_Technical.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="user_VirtualBoxAPI.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="user_Troubleshooting.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="user_Security.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="user_KnownIssues.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="user_ChangeLog.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="user_ThirdParty.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="user_PrivacyPolicy.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="user_Glossary.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+</book>
diff --git a/doc/manual/en_US/images/clone-vm.png b/doc/manual/en_US/images/clone-vm.png
new file mode 100644
index 00000000..5b0b8274
--- /dev/null
+++ b/doc/manual/en_US/images/clone-vm.png
Binary files differ
diff --git a/doc/manual/en_US/images/create-vdi-1.png b/doc/manual/en_US/images/create-vdi-1.png
new file mode 100644
index 00000000..75f77000
--- /dev/null
+++ b/doc/manual/en_US/images/create-vdi-1.png
Binary files differ
diff --git a/doc/manual/en_US/images/create-vm-1.png b/doc/manual/en_US/images/create-vm-1.png
new file mode 100644
index 00000000..42c98288
--- /dev/null
+++ b/doc/manual/en_US/images/create-vm-1.png
Binary files differ
diff --git a/doc/manual/en_US/images/create-vm-2.png b/doc/manual/en_US/images/create-vm-2.png
new file mode 100644
index 00000000..948ba90d
--- /dev/null
+++ b/doc/manual/en_US/images/create-vm-2.png
Binary files differ
diff --git a/doc/manual/en_US/images/ovf-import.png b/doc/manual/en_US/images/ovf-import.png
new file mode 100644
index 00000000..f6671e67
--- /dev/null
+++ b/doc/manual/en_US/images/ovf-import.png
Binary files differ
diff --git a/doc/manual/en_US/images/seamless.png b/doc/manual/en_US/images/seamless.png
new file mode 100644
index 00000000..502aebd2
--- /dev/null
+++ b/doc/manual/en_US/images/seamless.png
Binary files differ
diff --git a/doc/manual/en_US/images/snapshots-1.png b/doc/manual/en_US/images/snapshots-1.png
new file mode 100644
index 00000000..fd8198d7
--- /dev/null
+++ b/doc/manual/en_US/images/snapshots-1.png
Binary files differ
diff --git a/doc/manual/en_US/images/vbox-components.png b/doc/manual/en_US/images/vbox-components.png
new file mode 100644
index 00000000..441192cd
--- /dev/null
+++ b/doc/manual/en_US/images/vbox-components.png
Binary files differ
diff --git a/doc/manual/en_US/images/vbox-sdl.png b/doc/manual/en_US/images/vbox-sdl.png
new file mode 100644
index 00000000..bae1f9f5
--- /dev/null
+++ b/doc/manual/en_US/images/vbox-sdl.png
Binary files differ
diff --git a/doc/manual/en_US/images/vboxlogo.png b/doc/manual/en_US/images/vboxlogo.png
new file mode 100644
index 00000000..1fcdd79c
--- /dev/null
+++ b/doc/manual/en_US/images/vboxlogo.png
Binary files differ
diff --git a/doc/manual/en_US/images/virtual-disk-manager.png b/doc/manual/en_US/images/virtual-disk-manager.png
new file mode 100644
index 00000000..8557bacb
--- /dev/null
+++ b/doc/manual/en_US/images/virtual-disk-manager.png
Binary files differ
diff --git a/doc/manual/en_US/images/virtual-disk-manager2.png b/doc/manual/en_US/images/virtual-disk-manager2.png
new file mode 100644
index 00000000..ed34f60c
--- /dev/null
+++ b/doc/manual/en_US/images/virtual-disk-manager2.png
Binary files differ
diff --git a/doc/manual/en_US/images/virtualbox-main-empty.png b/doc/manual/en_US/images/virtualbox-main-empty.png
new file mode 100644
index 00000000..d4ce6515
--- /dev/null
+++ b/doc/manual/en_US/images/virtualbox-main-empty.png
Binary files differ
diff --git a/doc/manual/en_US/images/virtualbox-main.png b/doc/manual/en_US/images/virtualbox-main.png
new file mode 100644
index 00000000..de0dacba
--- /dev/null
+++ b/doc/manual/en_US/images/virtualbox-main.png
Binary files differ
diff --git a/doc/manual/en_US/images/vm-close.png b/doc/manual/en_US/images/vm-close.png
new file mode 100644
index 00000000..166f7033
--- /dev/null
+++ b/doc/manual/en_US/images/vm-close.png
Binary files differ
diff --git a/doc/manual/en_US/images/vm-hostkey.png b/doc/manual/en_US/images/vm-hostkey.png
new file mode 100644
index 00000000..44e78753
--- /dev/null
+++ b/doc/manual/en_US/images/vm-hostkey.png
Binary files differ
diff --git a/doc/manual/en_US/images/vm-settings-harddisk.png b/doc/manual/en_US/images/vm-settings-harddisk.png
new file mode 100644
index 00000000..0b4290f0
--- /dev/null
+++ b/doc/manual/en_US/images/vm-settings-harddisk.png
Binary files differ
diff --git a/doc/manual/en_US/images/vm-vista-running.png b/doc/manual/en_US/images/vm-vista-running.png
new file mode 100644
index 00000000..bf31290e
--- /dev/null
+++ b/doc/manual/en_US/images/vm-vista-running.png
Binary files differ
diff --git a/doc/manual/en_US/user_AdvancedTopics.xml b/doc/manual/en_US/user_AdvancedTopics.xml
new file mode 100644
index 00000000..9b935f34
--- /dev/null
+++ b/doc/manual/en_US/user_AdvancedTopics.xml
@@ -0,0 +1,2404 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<chapter id="AdvancedTopics">
+ <title>Advanced topics</title>
+
+ <sect1 id="vboxsdl">
+ <title>VBoxSDL, the simplified VM displayer</title>
+
+ <sect2>
+ <title>Introduction</title>
+
+ <para>VBoxSDL is a simple graphical user interface (GUI) that lacks the
+ nice point-and-click support which VirtualBox, our main GUI, provides.
+ VBoxSDL is currently primarily used internally for debugging VirtualBox
+ and therefore not officially supported. Still, you may find it useful
+ for environments where the virtual machines are not necessarily
+ controlled by the same person that uses the virtual machine.<note>
+ <para>VBoxSDL is not available on the Mac OS X host platform.</para>
+ </note></para>
+
+ <para>As you can see in the following screenshot, VBoxSDL does indeed
+ only provide a simple window that contains only the "pure" virtual
+ machine, without menus or other controls to click upon and no additional
+ indicators of virtual machine activity:</para>
+
+ <para><mediaobject>
+ <imageobject>
+ <imagedata align="center" fileref="images/vbox-sdl.png"
+ width="10cm" />
+ </imageobject>
+ </mediaobject></para>
+
+ <para>To start a virtual machine with VBoxSDL instead of the VirtualBox
+ GUI, enter the following on a command line:<screen>VBoxSDL --startvm &lt;vm&gt;</screen></para>
+
+ <para>where <computeroutput>&lt;vm&gt;</computeroutput> is, as usual
+ with VirtualBox command line parameters, the name or UUID of an existing
+ virtual machine.</para>
+ </sect2>
+
+ <sect2>
+ <title>Secure labeling with VBoxSDL</title>
+
+ <para>When running guest operating systems in full screen mode, the guest
+ operating system usually has control over the whole screen. This could
+ present a security risk as the guest operating system might fool the
+ user into thinking that it is either a different system (which might
+ have a higher security level) or it might present messages on the screen
+ that appear to stem from the host operating system.</para>
+
+ <para>In order to protect the user against the above mentioned security
+ risks, the secure labeling feature has been developed. Secure labeling
+ is currently available only for VBoxSDL. When enabled, a portion of the
+ display area is reserved for a label in which a user defined message is
+ displayed. The label height in set to 20 pixels in VBoxSDL. The label
+ font color and background color can be optionally set as hexadecimal RGB
+ color values. The following syntax is used to enable secure
+ labeling:</para>
+
+ <screen>VBoxSDL --startvm "VM name"
+ --securelabel --seclabelfnt ~/fonts/arial.ttf
+ --seclabelsiz 14 --seclabelfgcol 00FF00 --seclabelbgcol 00FFFF</screen>
+
+ <para>In addition to enabling secure labeling, a TrueType font has to be
+ supplied. To use another font size than 12 point use the parameter
+ <computeroutput>--seclabelsiz</computeroutput>.</para>
+
+ <para>The label text can be set with <screen>VBoxManage setextradata "VM name" "VBoxSDL/SecureLabel" "The Label"</screen>
+ Changing this label will take effect immediately.</para>
+
+ <para>Typically, full screen resolutions are limited to certain
+ "standard" geometries such as 1024 x 768. Increasing this by twenty
+ lines is not usually feasible, so in most cases, VBoxSDL will chose the
+ next higher resolution, e.g. 1280 x 1024 and the guest's screen will not
+ cover the whole display surface. If VBoxSDL is unable to choose a higher
+ resolution, the secure label will be painted on top of the guest's
+ screen surface. In order to address the problem of the bottom part of
+ the guest screen being hidden, VBoxSDL can provide custom video modes to
+ the guest that are reduced by the height of the label. For Windows
+ guests and recent Solaris and Linux guests, the VirtualBox Guest
+ Additions automatically provide the reduced video modes. Additionally,
+ the VESA BIOS has been adjusted to duplicate its standard mode table
+ with adjusted resolutions. The adjusted mode IDs can be calculated using
+ the following formula:</para>
+
+ <screen>reduced_modeid = modeid + 0x30</screen>
+
+ <para>For example, in order to start Linux with 1024 x 748 x 16, the
+ standard mode 0x117 (1024 x 768 x 16) is used as a base. The Linux video
+ mode kernel parameter can then be calculated using:</para>
+
+ <screen>vga = 0x200 | 0x117 + 0x30
+vga = 839</screen>
+
+ <para>The reason for duplicating the standard modes instead of only
+ supplying the adjusted modes is that most guest operating systems
+ require the standard VESA modes to be fixed and refuse to start with
+ different modes.</para>
+
+ <para>When using the X.org VESA driver, custom modelines have to be
+ calculated and added to the configuration (usually in
+ <literal>/etc/X11/xorg.conf</literal>. A handy tool to determine
+ modeline entries can be found at <literal><ulink
+ url="http://www.tkk.fi/Misc/Electronics/faq/vga2rgb/calc.html">http://www.tkk.fi/Misc/Electronics/faq/vga2rgb/calc.html</ulink></literal>.)</para>
+ </sect2>
+
+ <sect2>
+ <title>Releasing modifiers with VBoxSDL on Linux</title>
+
+ <para>When switching from a X virtual terminal (VT) to another VT using
+ Ctrl-Alt-Fx while the VBoxSDL window has the input focus, the guest will
+ receive Ctrl and Alt keypress events without receiving the corresponding
+ key release events. This is an architectural limitation of Linux. In
+ order to reset the modifier keys, it is possible to send
+ <computeroutput>SIGUSR1</computeroutput> to the VBoxSDL main thread
+ (first entry in the <computeroutput>ps</computeroutput> list). For
+ example, when switching away to another VT and saving the virtual
+ machine from this terminal, the following sequence can be used to make
+ sure the VM is not saved with stuck modifiers:</para>
+
+ <para><screen>kill -usr1 &lt;pid&gt;
+VBoxManage controlvm "Windows 2000" savestate</screen></para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title id="autologon">Automated guest logons</title>
+
+ <para>VirtualBox provides Guest Addition modules for Windows, Linux and
+ Solaris to enable automated logons on the guest.</para>
+
+ <para>When a guest operating system is running in a virtual machine, it
+ might be desirable to perform coordinated and automated logons using
+ credentials from a master logon system. (With "credentials", we are
+ referring to logon information consisting of user name, password and
+ domain name, where each value might be empty.)</para>
+
+ <sect2 id="autologon_win">
+ <title>Automated Windows guest logons</title>
+
+ <para>Since Windows NT, Windows has provided a modular system logon
+ subsystem ("Winlogon") which can be customized and extended by means of
+ so-called GINA modules (Graphical Identification and Authentication).
+ With Windows Vista and Windows 7, the GINA modules were replaced with a
+ new mechanism called "credential providers". The VirtualBox Guest
+ Additions for Windows come with both, a GINA and a credential provider
+ module, and therefore enable any Windows guest to perform automated
+ logons.</para>
+
+ <para>To activate the VirtualBox GINA or credential provider module,
+ install the Guest Additions with using the command line switch
+ <computeroutput>/with_autologon</computeroutput>. All the following
+ manual steps required for installing these modules will be then done by
+ the installer.</para>
+
+ <para>To manually install the VirtualBox GINA module, extract the Guest
+ Additions (see <xref linkend="windows-guest-file-extraction" />) and
+ copy the file <computeroutput>VBoxGINA.dll</computeroutput> to the
+ Windows <computeroutput>SYSTEM32</computeroutput> directory. Then, in
+ the registry, create the following key: <screen>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\GinaDLL</screen>
+ with a value of <computeroutput>VBoxGINA.dll</computeroutput>.</para>
+
+ <note>
+ <para>The VirtualBox GINA module is implemented as a wrapper around
+ the standard Windows GINA module
+ (<computeroutput>MSGINA.DLL</computeroutput>). As a result, it will
+ most likely not work correctly with 3rd party GINA modules.</para>
+ </note>
+
+ <para>To manually install the VirtualBox credential provider module,
+ extract the Guest Additions (see <xref
+ linkend="windows-guest-file-extraction" />) and copy the file
+ <computeroutput>VBoxCredProv.dll</computeroutput> to the Windows
+ <computeroutput>SYSTEM32</computeroutput> directory. Then, in the
+ registry, create the following keys:<screen>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\
+ Authentication\Credential Providers\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}
+
+HKEY_CLASSES_ROOT\CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}
+
+HKEY_CLASSES_ROOT\CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}\InprocServer32</screen></para>
+
+ <para>with all default values (the key named
+ <computeroutput>(Default)</computeroutput> in each key) set to
+ <computeroutput>VBoxCredProv</computeroutput>. After that a new string
+ named <screen>HKEY_CLASSES_ROOT\CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}\InprocServer32\ThreadingModel</screen>
+ with a value of <computeroutput>Apartment</computeroutput> has to be
+ created.</para>
+
+ <para>To set credentials, use the following command on a
+ <emphasis>running</emphasis> VM:</para>
+
+ <screen>VBoxManage controlvm "Windows XP" setcredentials "John Doe" "secretpassword" "DOMTEST"</screen>
+
+ <para>While the VM is running, the credentials can be queried by the
+ VirtualBox logon modules (GINA or credential provider) using the
+ VirtualBox Guest Additions device driver. When Windows is in "logged
+ out" mode, the logon modules will constantly poll for credentials and if
+ they are present, a logon will be attempted. After retrieving the
+ credentials, the logon modules will erase them so that the above command
+ will have to be repeated for subsequent logons.</para>
+
+ <para>For security reasons, credentials are not stored in any persistent
+ manner and will be lost when the VM is reset. Also, the credentials are
+ "write-only", i.e. there is no way to retrieve the credentials from the
+ host side. Credentials can be reset from the host side by setting empty
+ values.</para>
+
+ <para>Depending on the particular variant of the Windows guest, the
+ following restrictions apply: <orderedlist>
+ <listitem>
+ <para>For <emphasis role="bold">Windows XP guests,</emphasis> the
+ logon subsystem needs to be configured to use the classic logon
+ dialog as the VirtualBox GINA module does not support the XP-style
+ welcome dialog.</para>
+ </listitem>
+
+ <listitem>
+ <para>For <emphasis role="bold">Windows Vista and Windows 7
+ guests,</emphasis> the logon subsystem does not support the
+ so-called Secure Attention Sequence
+ (<computeroutput>CTRL+ALT+DEL</computeroutput>). As a result, the
+ guest's group policy settings need to be changed to not use the
+ Secure Attention Sequence. Also, the user name given is only
+ compared to the true user name, not the user friendly name. This
+ means that when you rename a user, you still have to supply the
+ original user name (internally, Windows never renames user
+ accounts).</para>
+ </listitem>
+
+ <listitem>
+ <para>Auto-logon handling of the built-in Windows Remote Desktop
+ Service (formerly known as Terminal Services) is disabled by
+ default. To enable it, create the registry key <screen>HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\VirtualBox Guest Additions\AutoLogon</screen>
+ with a <computeroutput>DWORD</computeroutput> value of
+ <computeroutput>1</computeroutput>.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>The following command forces VirtualBox to keep the credentials
+ after they were read by the guest and on VM reset: <screen>VBoxManage setextradata "Windows XP" VBoxInternal/Devices/VMMDev/0/Config/KeepCredentials 1</screen>Note
+ that this is a potential security risk as a malicious application
+ running on the guest could request this information using the proper
+ interface.</para>
+ </sect2>
+
+ <sect2 id="autologon_unix">
+ <title>Automated Linux/Unix guest logons</title>
+
+ <para>Starting with version 3.2, VirtualBox provides a custom PAM module
+ (Pluggable Authentication Module) which can be used to perform automated
+ guest logons on platforms which support this framework. Virtually all
+ modern Linux/Unix distributions rely on PAM.</para>
+
+ <para>The <computeroutput>pam_vbox.so</computeroutput> module itself
+ <emphasis role="bold">does not</emphasis> do an actual verification of
+ the credentials passed to the guest OS; instead it relies on other
+ modules such as <computeroutput>pam_unix.so</computeroutput> or
+ <computeroutput>pam_unix2.so</computeroutput> down in the PAM stack to
+ do the actual validation using the credentials retrieved by
+ <computeroutput>pam_vbox.so</computeroutput>. Therefore
+ <computeroutput>pam_vbox.so</computeroutput> has to be on top of the
+ authentication PAM service list.</para>
+
+ <note>
+ <para>The <computeroutput>pam_vbox.so</computeroutput> only supports
+ the <computeroutput>auth</computeroutput> primitive. Other primitives
+ such as <computeroutput>account</computeroutput>,
+ <computeroutput>session</computeroutput> or
+ <computeroutput>password</computeroutput> are not supported.</para>
+ </note>
+
+ <para>The <computeroutput>pam_vbox.so</computeroutput> module is shipped
+ as part of the Guest Additions but it is not installed and/or activated
+ on the guest OS by default. In order to install it, it has to be copied
+ from
+ <computeroutput>/opt/VBoxGuestAdditions-&lt;version&gt;/lib/VBoxGuestAdditions/</computeroutput>
+ to the security modules directory, usually
+ <computeroutput>/lib/security/</computeroutput> on 32-bit guest Linuxes
+ or <computeroutput>/lib64/security/</computeroutput> on 64-bit ones.
+ Please refer to your guest OS documentation for the correct PAM module
+ directory.</para>
+
+ <para>For example, to use <computeroutput>pam_vbox.so</computeroutput>
+ with a Ubuntu Linux guest OS and GDM (the GNOME Desktop Manager) to
+ logon users automatically with the credentials passed by the host, the
+ guest OS has to be configured like the following:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>The <computeroutput>pam_vbox.so</computeroutput> module has to
+ be copied to the security modules directory, in this case it is
+ <computeroutput>/lib/security</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para>Edit the PAM configuration file for GDM found at
+ <computeroutput>/etc/pam.d/gdm</computeroutput>, adding the line
+ <computeroutput>auth requisite pam_vbox.so</computeroutput> at the
+ top. Additionaly, in most Linux distributions there is a file called
+ <computeroutput>/etc/pam.d/common-auth</computeroutput>. This file
+ is included in many other services (like the GDM file mentioned
+ above). There you also have to add the line <computeroutput>auth
+ requisite pam_vbox.so</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para>If authentication against the shadow database using
+ <computeroutput>pam_unix.so</computeroutput> or
+ <computeroutput>pam_unix2.so</computeroutput> is desired, the
+ argument <computeroutput>try_first_pass</computeroutput> for
+ <computeroutput>pam_unix.so</computeroutput> or
+ <computeroutput>use_first_pass</computeroutput> for
+ <computeroutput>pam_unix2.so</computeroutput> is needed in order to
+ pass the credentials from the VirtualBox module to the shadow
+ database authentication module. For Ubuntu, this needs to be added
+ to <computeroutput>/etc/pam.d/common-auth</computeroutput>, to the
+ end of the line referencing
+ <computeroutput>pam_unix.so</computeroutput>. This argument tells
+ the PAM module to use credentials already present in the stack, i.e.
+ the ones provided by the VirtualBox PAM module.</para>
+ </listitem>
+ </orderedlist>
+
+ <para><warning>
+ <para>An incorrectly configured PAM stack can effectively prevent
+ you from logging into your guest system!</para>
+ </warning></para>
+
+ <para>To make deployment easier, you can pass the argument
+ <computeroutput>debug</computeroutput> right after the
+ <computeroutput>pam_vbox.so</computeroutput> statement. Debug log output
+ will then be recorded using syslog.</para>
+
+ <para><note>
+ <para>By default, pam_vbox will not wait for credentials to arrive
+ from the host, in other words: When a login prompt is shown (for
+ example by GDM/KDM or the text console) and pam_vbox does not yet
+ have credentials it does not wait until they arrive. Instead the
+ next module in the PAM stack (depending on the PAM configuration)
+ will have the chance for authentication.</para>
+ </note></para>
+
+ <para>Starting with VirtualBox 4.1.4 pam_vbox supports various guest
+ property parameters which all reside in
+ <computeroutput>/VirtualBox/GuestAdd/PAM/</computeroutput>. These
+ parameters allow pam_vbox to wait for credentials to be provided by the
+ host and optionally can show a message while waiting for those. The
+ following guest properties can be set:</para>
+
+ <orderedlist>
+ <listitem>
+ <para><computeroutput>CredsWait</computeroutput>: Set to "1" if
+ pam_vbox should start waiting until credentials arrive from the
+ host. Until then no other authentication methods such as manually
+ logging in will be available. If this property is empty or get
+ deleted no waiting for credentials will be performed and pam_vbox
+ will act like before (see paragraph above). This property must be
+ set read-only for the guest
+ (<computeroutput>RDONLYGUEST</computeroutput>).</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>CredsWaitAbort</computeroutput>: Aborts waiting
+ for credentials when set to any value. Can be set from host and the
+ guest.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>CredsWaitTimeout</computeroutput>: Timeout (in
+ seconds) to let pam_vbox wait for credentials to arrive. When no
+ credentials arrive within this timeout, authentication of pam_vbox
+ will be set to failed and the next PAM module in chain will be
+ asked. If this property is not specified, set to "0" or an invalid
+ value, an infinite timeout will be used. This property must be set
+ read-only for the guest
+ (<computeroutput>RDONLYGUEST</computeroutput>).</para>
+ </listitem>
+ </orderedlist>
+
+ <para>To customize pam_vbox further there are the following guest
+ properties:</para>
+
+ <orderedlist>
+ <listitem>
+ <para><computeroutput>CredsMsgWaiting</computeroutput>: Custom
+ message showed while pam_vbox is waiting for credentials from the
+ host. This property must be set read-only for the guest
+ (<computeroutput>RDONLYGUEST</computeroutput>).</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>CredsMsgWaitTimeout</computeroutput>: Custom
+ message showed when waiting for credentials by pam_vbox timed out,
+ e.g. did not arrive within time. This property must be set read-only
+ for the guest (<computeroutput>RDONLYGUEST</computeroutput>).</para>
+ </listitem>
+ </orderedlist>
+
+ <para><note>
+ <para>If a pam_vbox guest property does not have set the right flags
+ (<computeroutput>RDONLYGUEST</computeroutput>) this property will be
+ ignored then and - depending on the property - a default value will
+ be set. This can result in pam_vbox not waiting for credentials.
+ Consult the appropriate syslog file for more information and use the
+ <computeroutput>debug</computeroutput> option.</para>
+ </note></para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Advanced configuration for Windows guests</title>
+
+ <sect2 id="sysprep">
+ <title>Automated Windows system preparation</title>
+
+ <para>Beginning with Windows NT 4.0, Microsoft offers a "system
+ preparation" tool (in short: Sysprep) to prepare a Windows system for
+ deployment or redistribution. Whereas Windows 2000 and XP ship with
+ Sysprep on the installation medium, the tool also is available for
+ download on the Microsoft web site. In a standard installation of
+ Windows Vista and 7, Sysprep is already included. Sysprep mainly
+ consists of an executable called
+ <computeroutput>sysprep.exe</computeroutput> which is invoked by the
+ user to put the Windows installation into preparation mode.</para>
+
+ <para>Starting with VirtualBox 3.2.2, the Guest Additions offer a way to
+ launch a system preparation on the guest operating system in an
+ automated way, controlled from the host system. To achieve that, see
+ <xref linkend="guestadd-guestcontrol" /> for using the feature with the
+ special identifier <computeroutput>sysprep</computeroutput> as the
+ program to execute, along with the user name
+ <computeroutput>sysprep</computeroutput> and password
+ <computeroutput>sysprep</computeroutput> for the credentials. Sysprep
+ then gets launched with the required system rights.</para>
+
+ <note>
+ <para>Specifying the location of "sysprep.exe" is <emphasis
+ role="bold">not possible</emphasis> -- instead the following paths are
+ used (based on the operating system): <itemizedlist>
+ <listitem>
+ <para><computeroutput>C:\sysprep\sysprep.exe</computeroutput>
+ for Windows NT 4.0, 2000 and XP</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>%WINDIR%\System32\Sysprep\sysprep.exe</computeroutput>
+ for Windows Vista, 2008 Server and 7</para>
+ </listitem>
+ </itemizedlist> The Guest Additions will automatically use the
+ appropriate path to execute the system preparation tool.</para>
+ </note>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Advanced configuration for Linux and Solaris guests</title>
+
+ <sect2>
+ <title>Manual setup of selected guest services on Linux</title>
+
+ <para>The VirtualBox Guest Additions contain several different drivers.
+ If for any reason you do not wish to set them all up, you can install
+ the Guest Additions using the following command:</para>
+
+ <screen> sh ./VBoxLinuxAdditions.run no_setup</screen>
+
+ <para>After this, you will need to at least compile the kernel modules
+ by running the command <screen> /usr/lib/VBoxGuestAdditions/vboxadd setup</screen>
+ as root (you will need to replace <emphasis>lib</emphasis> by
+ <emphasis>lib64</emphasis> on some 64bit guests), and on older guests
+ without the udev service you will need to add the
+ <emphasis>vboxadd</emphasis> service to the default runlevel to ensure
+ that the modules get loaded.</para>
+
+ <para>To setup the time synchronization service, run the command
+ <screen> /usr/lib/VBoxGuestAdditions/vboxadd-service setup</screen> and
+ add the service vboxadd-service to the default runlevel. To set up the
+ X11 and OpenGL part of the Guest Additions, run the command <screen> /usr/lib/VBoxGuestAdditions/vboxadd-x11 setup</screen>
+ (you do not need to enable any services for this).</para>
+
+ <para>To recompile the guest kernel modules, use this command: <screen> /usr/lib/VBoxGuestAdditions/vboxadd setup</screen>
+ After compilation you should reboot your guest to ensure that the new
+ modules are actually used.</para>
+ </sect2>
+
+ <sect2 id="guestxorgsetup">
+ <title>Guest graphics and mouse driver setup in depth</title>
+
+ <para>This section assumes that you are familiar with configuring the
+ X.Org server using xorg.conf and optionally the newer mechanisms using
+ hal or udev and xorg.conf.d. If not you can learn about them by studying
+ the documentation which comes with X.Org.</para>
+
+ <para>The VirtualBox Guest Additions come with drivers for X.Org
+ versions <itemizedlist>
+ <listitem>
+ X11R6.8/X11R6.9 and XFree86 version 4.3 (vboxvideo_drv_68.o and vboxmouse_drv_68.o)
+ </listitem>
+
+ <listitem>
+ X11R7.0 (vboxvideo_drv_70.so and vboxmouse_drv_70.so)
+ </listitem>
+
+ <listitem>
+ X11R7.1 (vboxvideo_drv_71.so and vboxmouse_drv_71.so)
+ </listitem>
+
+ <listitem>
+ X.Org Server versions 1.3 and later (vboxvideo_drv_13.so and vboxmouse_drv_13.so and so on).
+ </listitem>
+ </itemizedlist> By default these drivers can be found in the
+ directory</para>
+
+ <para><computeroutput>/opt/VBoxGuestAdditions-&lt;version&gt;/lib/VBoxGuestAdditions</computeroutput></para>
+
+ <para>and the correct versions for the X server are symbolically linked
+ into the X.Org driver directories.</para>
+
+ <para>For graphics integration to work correctly, the X server must load
+ the vboxvideo driver (many recent X server versions look for it
+ automatically if they see that they are running in VirtualBox) and for
+ an optimal user experience the guest kernel drivers must be loaded and
+ the Guest Additions tool VBoxClient must be running as a client in the X
+ session. For mouse integration to work correctly, the guest kernel
+ drivers must be loaded and in addition, in X servers from X.Org X11R6.8
+ to X11R7.1 and in XFree86 version 4.3 the right vboxmouse driver must be
+ loaded and associated with /dev/mouse or /dev/psaux; in X.Org server 1.3
+ or later a driver for a PS/2 mouse must be loaded and the right
+ vboxmouse driver must be associated with /dev/vboxguest.</para>
+
+ <para>The VirtualBox guest graphics driver can use any graphics
+ configuration for which the virtual resolution fits into the virtual
+ video memory allocated to the virtual machine (minus a small amount used
+ by the guest driver) as described in <xref
+ linkend="settings-display" />. The driver will offer a range of standard
+ modes at least up to the default guest resolution for all active guest
+ monitors. In X.Org Server 1.3 and later the default mode can be changed
+ by setting the output property VBOX_MODE to
+ "&lt;width&gt;x&lt;height&gt;" for any guest monitor. When VBoxClient
+ and the kernel drivers are active this is done automatically when the
+ host requests a mode change. The driver for older versions can only
+ receive new modes by querying the host for requests at regular
+ intervals.</para>
+
+ <para>With pre-1.3 X Servers you can also add your own modes to the X
+ server configuration file. You simply need to add them to the "Modes"
+ list in the "Display" subsection of the "Screen" section. For example,
+ the section shown here has a custom 2048x800 resolution mode
+ added:</para>
+
+ <screen>Section "Screen"
+ Identifier "Default Screen"
+ Device "VirtualBox graphics card"
+ Monitor "Generic Monitor"
+ DefaultDepth 24
+ SubSection "Display"
+ Depth 24
+ Modes "2048x800" "800x600" "640x480"
+ EndSubSection
+EndSection</screen>
+ </sect2>
+ </sect1>
+
+ <sect1 id="cpuhotplug">
+ <title>CPU hot-plugging</title>
+
+ <para>With virtual machines running modern server operating systems,
+ VirtualBox supports CPU hot-plugging.<footnote>
+ <para>Support for CPU hot-plugging was introduced with VirtualBox
+ 3.2.</para>
+ </footnote> Whereas on a physical computer this would mean that a CPU
+ can be added or removed while the machine is running, VirtualBox supports
+ adding and removing virtual CPUs while a virtual machine is
+ running.</para>
+
+ <para>CPU hot-plugging works only with guest operating systems that
+ support it. So far this applies only to Linux and Windows Server 2008 x64
+ Data Center Edition. Windows supports only hot-add while Linux supports
+ hot-add and hot-remove but to use this feature with more than 8 CPUs a
+ 64bit Linux guest is required.</para>
+
+ <para>At this time, CPU hot-plugging requires using the VBoxManage
+ command-line interface. First, hot-plugging needs to be enabled for a
+ virtual machine:<screen>VBoxManage modifyvm "VM name" --cpuhotplug on</screen></para>
+
+ <para>After that, the --cpus option specifies the maximum number of CPUs
+ that the virtual machine can have:<screen>VBoxManage modifyvm "VM name" --cpus 8</screen>When
+ the VM is off, you can then add and remove virtual CPUs with the modifyvm
+ --plugcpu and --unplugcpu subcommands, which take the number of the
+ virtual CPU as a parameter, like this:<screen>VBoxManage modifyvm "VM name" --plugcpu 3
+VBoxManage modifyvm "VM name" --unplugcpu 3</screen>Note that CPU 0 can never
+ be removed.</para>
+
+ <para>While the VM is running, CPUs can be added with the
+ <computeroutput>controlvm plugcpu/unplugcpu</computeroutput> commands
+ instead:<screen>VBoxManage controlvm "VM name" plugcpu 3
+VBoxManage controlvm "VM name" unplugcpu 3</screen></para>
+
+ <para>See <xref linkend="vboxmanage-modifyvm" /> and <xref
+ linkend="vboxmanage-controlvm" /> for details.</para>
+
+ <para>With Linux guests, the following applies: To prevent ejection while
+ the CPU is still used it has to be ejected from within the guest before.
+ The Linux Guest Additions contain a service which receives hot-remove
+ events and ejects the CPU. Also, after a CPU is added to the VM it is not
+ automatically used by Linux. The Linux Guest Additions service will take
+ care of that if installed. If not a CPU can be started with the following
+ command:<screen>echo 1 &gt; /sys/devices/system/cpu/cpu&lt;id&gt;/online</screen></para>
+ </sect1>
+
+ <sect1 id="pcipassthrough">
+ <title>PCI passthrough</title>
+
+ <para>When running on Linux hosts, with a recent enough kernel (at least
+ version <computeroutput>2.6.31</computeroutput>) experimental host PCI
+ devices passthrough is available.<footnote>
+ <para>Experimental support for PCI passthrough was introduced with
+ VirtualBox 4.1.</para>
+ </footnote></para>
+
+ <note>
+ <para>The PCI passthrough module is shipped as a VirtualBox extension
+ package, which must be installed separately. See <xref
+ linkend="intro-installing" /> for more information.</para>
+ </note>
+
+ <para>Essentially this feature allows to directly use physical PCI devices
+ on the host by the guest even if host doesn't have drivers for this
+ particular device. Both, regular PCI and some PCI Express cards, are
+ supported. AGP and certain PCI Express cards are not supported at the
+ moment if they rely on GART (Graphics Address Remapping Table) unit
+ programming for texture management as it does rather nontrivial operations
+ with pages remapping interfering with IOMMU. This limitation may be lifted
+ in future releases.</para>
+
+ <para>To be fully functional, PCI passthrough support in VirtualBox
+ depends upon an IOMMU hardware unit which is not yet too widely available.
+ If the device uses bus mastering (i.e. it performs DMA to the OS memory on
+ its own), then an IOMMU is required, otherwise such DMA transactions may
+ write to the wrong physical memory address as the device DMA engine is
+ programmed using a device-specific protocol to perform memory
+ transactions. The IOMMU functions as translation unit mapping physical
+ memory access requests from the device using knowledge of the guest
+ physical address to host physical addresses translation rules.</para>
+
+ <para>Intel's solution for IOMMU is marketed as "Intel Virtualization
+ Technology for Directed I/O" (VT-d), and AMD's one is called AMD-Vi. So
+ please check if your motherboard datasheet has appropriate technology.
+ Even if your hardware doesn't have a IOMMU, certain PCI cards may work
+ (such as serial PCI adapters), but the guest will show a warning on boot
+ and the VM execution will terminate if the guest driver will attempt to
+ enable card bus mastering.</para>
+
+ <para>It is very common that the BIOS or the host OS disables the IOMMU by
+ default. So before any attempt to use it please make sure that
+ <orderedlist>
+ <listitem>
+ <para>Your motherboard has an IOMMU unit.</para>
+ </listitem>
+
+ <listitem>
+ <para>Your CPU supports the IOMMU.</para>
+ </listitem>
+
+ <listitem>
+ <para>The IOMMU is enabled in the BIOS.</para>
+ </listitem>
+
+ <listitem>
+ <para>The VM must run with VT-x/AMD-V and nested paging
+ enabled.</para>
+ </listitem>
+
+ <listitem>
+ <para>Your Linux kernel was compiled with IOMMU support (including
+ DMA remapping, see <computeroutput>CONFIG_DMAR</computeroutput>
+ kernel compilation option). The PCI stub driver
+ (<computeroutput>CONFIG_PCI_STUB</computeroutput>) is required as
+ well.</para>
+ </listitem>
+
+ <listitem>
+ <para>Your Linux kernel recognizes and uses the IOMMU unit
+ (<computeroutput>intel_iommu=on</computeroutput> boot option could
+ be needed). Search for DMAR and PCI-DMA in kernel boot log.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>Once you made sure that the host kernel supports the IOMMU, the next
+ step is to select the PCI card and attach it to the guest. To figure out
+ the list of available PCI devices, use the
+ <computeroutput>lspci</computeroutput> command. The output will look like
+ this <screen>
+ 01:00.0 VGA compatible controller: ATI Technologies Inc Cedar PRO [Radeon HD 5450]
+ 01:00.1 Audio device: ATI Technologies Inc Manhattan HDMI Audio [Mobility Radeon HD 5000 Series]
+ 02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 03)
+ 03:00.0 SATA controller: JMicron Technology Corp. JMB362/JMB363 Serial ATA Controller (rev 03)
+ 03:00.1 IDE interface: JMicron Technology Corp. JMB362/JMB363 Serial ATA Controller (rev 03)
+ 06:00.0 VGA compatible controller: nVidia Corporation G86 [GeForce 8500 GT] (rev a1)
+ </screen> The first column is a PCI address (in format
+ <computeroutput>bus:device.function</computeroutput>). This address could
+ be used to identify the device for further operations. For example, to
+ attach a PCI network controller on the system listed above to the second
+ PCI bus in the guest, as device 5, function 0, use the following command:
+ <screen>VBoxManage modifyvm "VM name" --pciattach 02:00.0@01:05.0</screen>
+ To detach same device, use <screen>VBoxManage modifyvm "VM name" --pcidetach 02:00.0</screen>
+ Please note that both host and guest could freely assign a different PCI
+ address to the card attached during runtime, so those addresses only apply
+ to the address of the card at the moment of attachment (host), and during
+ BIOS PCI init (guest).</para>
+
+ <para>If the virtual machine has a PCI device attached, certain
+ limitations apply: <orderedlist>
+ <listitem>
+ Only PCI cards with non-shared interrupts (such as using MSI on host) are supported at the moment.
+ </listitem>
+
+ <listitem>
+ No guest state can be reliably saved/restored (as the internal state of the PCI card could not be retrieved).
+ </listitem>
+
+ <listitem>
+ Teleportation (live migration) doesn't work (for the same reason).
+ </listitem>
+
+ <listitem>
+ No lazy physical memory allocation. The host will preallocate the whole RAM required for the VM on startup (as we cannot catch physical hardware accesses to the physical memory).
+ </listitem>
+ </orderedlist></para>
+ </sect1>
+
+ <sect1>
+ <title>Advanced display configuration</title>
+
+ <sect2>
+ <title>Custom VESA resolutions</title>
+
+ <para>Apart from the standard VESA resolutions, the VirtualBox VESA BIOS
+ allows you to add up to 16 custom video modes which will be reported to
+ the guest operating system. When using Windows guests with the
+ VirtualBox Guest Additions, a custom graphics driver will be used
+ instead of the fallback VESA solution so this information does not
+ apply.</para>
+
+ <para>Additional video modes can be configured for each VM using the
+ extra data facility. The extra data key is called
+ <literal>CustomVideoMode&lt;x&gt;</literal> with <literal>x</literal>
+ being a number from 1 to 16. Please note that modes will be read from 1
+ until either the following number is not defined or 16 is reached. The
+ following example adds a video mode that corresponds to the native
+ display resolution of many notebook computers:</para>
+
+ <screen>VBoxManage setextradata "VM name" "CustomVideoMode1" "1400x1050x16"</screen>
+
+ <para>The VESA mode IDs for custom video modes start at
+ <literal>0x160</literal>. In order to use the above defined custom video
+ mode, the following command line has be supplied to Linux:</para>
+
+ <screen>vga = 0x200 | 0x160
+vga = 864</screen>
+
+ <para>For guest operating systems with VirtualBox Guest Additions, a
+ custom video mode can be set using the video mode hint feature.</para>
+ </sect2>
+
+ <sect2>
+ <title>Configuring the maximum resolution of guests when using the
+ graphical frontend</title>
+
+ <para>When guest systems with the Guest Additions installed are started
+ using the graphical frontend (the normal VirtualBox application), they
+ will not be allowed to use screen resolutions greater than the host's
+ screen size unless the user manually resizes them by dragging the
+ window, switching to full screen or seamless mode or sending a video mode
+ hint using VBoxManage. This behavior is what most users will want, but
+ if you have different needs, it is possible to change it by issuing one
+ of the following commands from the command line:</para>
+
+ <screen>VBoxManage setextradata global GUI/MaxGuestResolution any</screen>
+
+ <para>will remove all limits on guest resolutions.</para>
+
+ <screen>VBoxManage setextradata global GUI/MaxGuestResolution &gt;width,height&lt;</screen>
+
+ <para>manually specifies a maximum resolution.</para>
+
+ <screen>VBoxManage setextradata global GUI/MaxGuestResolution auto</screen>
+
+ <para>restores the default settings. Note that these settings apply
+ globally to all guest systems, not just to a single machine.</para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Advanced storage configuration</title>
+
+ <sect2 id="rawdisk">
+ <title>Using a raw host hard disk from a guest</title>
+
+ <para>Starting with version 1.4, as an alternative to using virtual disk
+ images (as described in detail in <xref linkend="storage" />),
+ VirtualBox can also present either entire physical hard disks or
+ selected partitions thereof as virtual disks to virtual machines.</para>
+
+ <para>With VirtualBox, this type of access is called "raw hard disk
+ access"; it allows a guest operating system to access its virtual hard
+ disk without going through the host OS file system. The actual
+ performance difference for image files vs. raw disk varies greatly
+ depending on the overhead of the host file system, whether dynamically
+ growing images are used, and on host OS caching strategies. The caching
+ indirectly also affects other aspects such as failure behavior, i.e.
+ whether the virtual disk contains all data written before a host OS
+ crash. Consult your host OS documentation for details on this.</para>
+
+ <para><warning>
+ <para>Raw hard disk access is for expert users only. Incorrect use
+ or use of an outdated configuration can lead to <emphasis
+ role="bold">total loss of data </emphasis>on the physical disk. Most
+ importantly, <emphasis>do not</emphasis> attempt to boot the
+ partition with the currently running host operating system in a
+ guest. This will lead to severe data corruption.</para>
+ </warning></para>
+
+ <para>Raw hard disk access -- both for entire disks and individual
+ partitions -- is implemented as part of the VMDK image format support.
+ As a result, you will need to create a special VMDK image file which
+ defines where the data will be stored. After creating such a special
+ VMDK image, you can use it like a regular virtual disk image. For
+ example, you can use the VirtualBox Manager (<xref linkend="vdis" />)
+ or <computeroutput>VBoxManage</computeroutput> to assign the image to a
+ virtual machine.</para>
+
+ <sect3>
+ <title>Access to entire physical hard disk</title>
+
+ <para>While this variant is the simplest to set up, you must be aware
+ that this will give a guest operating system direct and full access to
+ an <emphasis>entire physical disk</emphasis>. If your
+ <emphasis>host</emphasis> operating system is also booted from this
+ disk, please take special care to not access the partition from the
+ guest at all. On the positive side, the physical disk can be
+ repartitioned in arbitrary ways without having to recreate the image
+ file that gives access to the raw disk.</para>
+
+ <para>To create an image that represents an entire physical hard disk
+ (which will not contain any actual data, as this will all be stored on
+ the physical disk), on a Linux host, use the command<screen>VBoxManage internalcommands createrawvmdk -filename /path/to/file.vmdk
+ -rawdisk /dev/sda</screen>This creates the image
+ <code>/path/to/file.vmdk</code> (must be absolute), and all data will
+ be read and written from <code>/dev/sda</code>.</para>
+
+ <para>On a Windows host, instead of the above device specification,
+ use e.g. <code>\\.\PhysicalDrive0</code>. On a Mac OS X host, instead
+ of the above device specification use e.g. <code>/dev/disk1</code>.
+ Note that on OS X you can only get access to an entire disk if no
+ volume is mounted from it.</para>
+
+ <para>Creating the image requires read/write access for the given
+ device. Read/write access is also later needed when using the image
+ from a virtual machine. On some host platforms (e.g. Windows Vista
+ and later), raw disk access may be restricted and not permitted by
+ the host OS in some situations.</para>
+
+ <para>Just like with regular disk images, this does not automatically
+ attach the newly created image to a virtual machine. This can be done
+ with e.g. <screen>VBoxManage storageattach WindowsXP --storagectl "IDE Controller"
+ --port 0 --device 0 --type hdd --medium /path/to/file.vmdk</screen>When
+ this is done the selected virtual machine will boot from the specified
+ physical disk.</para>
+ </sect3>
+
+ <sect3>
+ <title>Access to individual physical hard disk partitions</title>
+
+ <para>This "raw partition support" is quite similar to the "full hard
+ disk" access described above. However, in this case, any partitioning
+ information will be stored inside the VMDK image, so you can e.g.
+ install a different boot loader in the virtual hard disk without
+ affecting the host's partitioning information. While the guest will be
+ able to <emphasis>see</emphasis> all partitions that exist on the
+ physical disk, access will be filtered in that reading from partitions
+ for which no access is allowed the partitions will only yield zeroes,
+ and all writes to them are ignored.</para>
+
+ <para>To create a special image for raw partition support (which will
+ contain a small amount of data, as already mentioned), on a Linux
+ host, use the command<screen>VBoxManage internalcommands createrawvmdk -filename /path/to/file.vmdk
+ -rawdisk /dev/sda -partitions 1,5</screen></para>
+
+ <para>As you can see, the command is identical to the one for "full
+ hard disk" access, except for the additional
+ <computeroutput>-partitions</computeroutput> parameter. This example
+ would create the image <code>/path/to/file.vmdk</code> (which, again,
+ must be absolute), and partitions 1 and 5 of <code>/dev/sda</code>
+ would be made accessible to the guest.</para>
+
+ <para>VirtualBox uses the same partition numbering as your Linux host.
+ As a result, the numbers given in the above example would refer to the
+ first primary partition and the first logical drive in the extended
+ partition, respectively.</para>
+
+ <para>On a Windows host, instead of the above device specification,
+ use e.g. <code>\\.\PhysicalDrive0</code>. On a Mac OS X host, instead
+ of the above device specification use e.g. <code>/dev/disk1</code>.
+ Note that on OS X you can only use partitions which are not mounted
+ (eject the respective volume first). Partition numbers are the same on
+ Linux, Windows and Mac OS X hosts.</para>
+
+ <para>The numbers for the list of partitions can be taken from the
+ output of<screen>VBoxManage internalcommands listpartitions -rawdisk /dev/sda</screen>The
+ output lists the partition types and sizes to give the user enough
+ information to identify the partitions necessary for the guest.</para>
+
+ <para>Images which give access to individual partitions are specific
+ to a particular host disk setup. You cannot transfer these images to
+ another host; also, whenever the host partitioning changes, the image
+ <emphasis>must be recreated</emphasis>.</para>
+
+ <para>Creating the image requires read/write access for the given
+ device. Read/write access is also later needed when using the image
+ from a virtual machine. If this is not feasible, there is a special
+ variant for raw partition access (currently only available on Linux
+ hosts) that avoids having to give the current user access to the
+ entire disk. To set up such an image, use<screen>VBoxManage internalcommands createrawvmdk -filename /path/to/file.vmdk
+ -rawdisk /dev/sda -partitions 1,5 -relative</screen>When used from a
+ virtual machine, the image will then refer not to the entire disk, but
+ only to the individual partitions (in the example
+ <code>/dev/sda1</code> and <code>/dev/sda5</code>). As a consequence,
+ read/write access is only required for the affected partitions, not
+ for the entire disk. During creation however, read-only access to the
+ entire disk is required to obtain the partitioning information.</para>
+
+ <para>In some configurations it may be necessary to change the MBR
+ code of the created image, e.g. to replace the Linux boot loader that
+ is used on the host by another boot loader. This allows e.g. the guest
+ to boot directly to Windows, while the host boots Linux from the
+ "same" disk. For this purpose the
+ <computeroutput>-mbr</computeroutput> parameter is provided. It
+ specifies a file name from which to take the MBR code. The partition
+ table is not modified at all, so a MBR file from a system with totally
+ different partitioning can be used. An example of this is<screen>VBoxManage internalcommands createrawvmdk -filename /path/to/file.vmdk
+ -rawdisk /dev/sda -partitions 1,5 -mbr winxp.mbr</screen>The modified
+ MBR will be stored inside the image, not on the host disk.</para>
+
+ <para>The created image can be attached to a storage controller in a
+ VM configuration as usual.</para>
+ </sect3>
+ </sect2>
+
+ <sect2 id="changevpd">
+ <title>Configuring the hard disk vendor product data (VPD)</title>
+
+ <para>VirtualBox reports vendor product data for its virtual hard disks
+ which consist of hard disk serial number, firmware revision and model
+ number. These can be changed using the following commands:</para>
+
+ <screen>VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/ahci/0/Config/Port0/SerialNumber" "serial"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/ahci/0/Config/Port0/FirmwareRevision" "firmware"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/ahci/0/Config/Port0/ModelNumber" "model"</screen>
+
+ <para>The serial number is a 20 byte alphanumeric string, the firmware
+ revision an 8 byte alphanumeric string and the model number a 40 byte
+ alphanumeric string. Instead of "Port0" (referring to the first port),
+ specify the desired SATA hard disk port.</para>
+
+ <para>The above commands apply to virtual machines with an AHCI (SATA)
+ controller. The commands for virtual machines with an IDE controller
+ are:</para>
+
+ <screen>VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/piix3ide/0/Config/PrimaryMaster/SerialNumber" "serial"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/piix3ide/0/Config/PrimaryMaster/FirmwareRevision" "firmware"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/piix3ide/0/Config/PrimaryMaster/ModelNumber" "model"</screen>
+
+ <para>For hard disks it's also possible to mark the
+ drive as having a non-rotational medium with:</para>
+
+ <screen>VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/ahci/0/Config/Port0/NonRotational" "1"</screen>
+
+ <para>Additional three parameters are needed for CD/DVD drives to report
+ the vendor product data:</para>
+
+ <screen>VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/ahci/0/Config/Port0/ATAPIVendorId" "vendor"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/ahci/0/Config/Port0/ATAPIProductId" "product"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/ahci/0/Config/Port0/ATAPIRevision" "revision"</screen>
+
+ <para>The vendor id is an 8 byte alphanumeric string, the product id an
+ 16 byte alphanumeric string and the revision a 4 byte alphanumeric
+ string. Instead of "Port0" (referring to the first port), specify the
+ desired SATA hard disk port.</para>
+ </sect2>
+
+ <sect2>
+ <title id="iscsi-intnet">Access iSCSI targets via Internal
+ Networking</title>
+
+ <para>As an experimental feature, VirtualBox allows for accessing an
+ iSCSI target running in a virtual machine which is configured for using
+ Internal Networking mode. Please see <xref linkend="storage-iscsi" />;
+ <xref linkend="network_internal" />; and <xref
+ linkend="vboxmanage-storageattach" /> for additional information.</para>
+
+ <para>The IP stack accessing Internal Networking must be configured in
+ the virtual machine which accesses the iSCSI target. A free static IP
+ and a MAC address not used by other virtual machines must be chosen. In
+ the example below, adapt the name of the virtual machine, the MAC
+ address, the IP configuration and the Internal Networking name
+ ("MyIntNet") according to your needs. The following seven commands must
+ first be issued:<screen>VBoxManage setextradata "VM name" VBoxInternal/Devices/IntNetIP/0/Trusted 1
+VBoxManage setextradata "VM name" VBoxInternal/Devices/IntNetIP/0/Config/MAC 08:00:27:01:02:0f
+VBoxManage setextradata "VM name" VBoxInternal/Devices/IntNetIP/0/Config/IP 10.0.9.1
+VBoxManage setextradata "VM name" VBoxInternal/Devices/IntNetIP/0/Config/Netmask 255.255.255.0
+VBoxManage setextradata "VM name" VBoxInternal/Devices/IntNetIP/0/LUN#0/Driver IntNet
+VBoxManage setextradata "VM name" VBoxInternal/Devices/IntNetIP/0/LUN#0/Config/Network MyIntNet
+VBoxManage setextradata "VM name" VBoxInternal/Devices/IntNetIP/0/LUN#0/Config/IsService 1</screen></para>
+
+ <para>Finally the iSCSI disk must be attached with the
+ <computeroutput>--intnet</computeroutput> option to tell the iSCSI
+ initiator to use internal networking:<screen>VBoxManage storageattach ... --medium iscsi
+ --server 10.0.9.30 --target iqn.2008-12.com.sun:sampletarget --intnet</screen></para>
+
+ <para>Compared to a "regular" iSCSI setup, IP address of the target
+ <emphasis>must</emphasis> be specified as a numeric IP address, as there
+ is no DNS resolver for internal networking.</para>
+
+ <para>The virtual machine with the iSCSI target should be started before
+ the VM using it is powered on. If a virtual machine using an iSCSI disk
+ is started without having the iSCSI target powered up, it can take up to
+ 200 seconds to detect this situation. The VM will fail to power
+ up.</para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Launching more than 128 VMs on Linux hosts</title>
+
+ <para>Linux hosts have a fixed number of IPC semaphores IDs per process
+ preventing users from starting substantially many VMs. The exact number
+ may vary with each Linux distribution. While trying to launch more VMs you
+ would be shown a "Cannot create IPC semaphore" error. In order to run more
+ VMs, you will need to increase the semaphore ID limit of the VBoxSVC
+ process. Find the current semaphore limits imposed by the kernel by
+ executing as root:<screen>#/sbin/sysctl kernel.sem
+kernel.sem = 250 32000 32 128</screen></para>
+
+ <para>The "kernel.sem" parameter bundles together 4 values, the one we are
+ interested in is called "SEMMNI", the maximum number of semaphore IDs
+ which is 128 in the above example. Increase this semaphore ID limit by
+ executing as root:<screen>echo "kernel.sem = 250 32000 32 2048" &gt;&gt; /etc/sysctl.conf
+/sbin/sysctl -p</screen></para>
+
+ <para>The above commands will add the new limits to the config file, thus
+ making the effect persistent across reboots, and will activate the new
+ limits into the currently running kernel.</para>
+ </sect1>
+
+ <sect1>
+ <title>Launching more than 120 VMs on Solaris hosts</title>
+
+ <para>Solaris hosts have a fixed number of IPC semaphores IDs per process
+ preventing users from starting more than 120 VMs. While trying to launch
+ more VMs you would be shown a "Cannot create IPC semaphore" error. In
+ order to run more VMs, you will need to increase the semaphore ID limit of
+ the VBoxSVC process.</para>
+
+ <sect2>
+ <title>Temporary solution while VirtualBox is running</title>
+
+ <para>Execute as root the <computeroutput>prctl</computeroutput> command
+ as shown below for the currently running VBoxSVC process. The process ID
+ of VBoxSVC can be obtained using the <computeroutput>ps</computeroutput>
+ command.</para>
+
+ <screen>prctl -r -n project.max-sem-ids -v 2048 &lt;pid-of-VBoxSVC&gt;</screen>
+
+ <para>This will immediately increase the semaphore limit of the
+ currently running VBoxSVC process and allow you to launch more VMs.
+ However, this change is not persistent and will be lost when VBoxSVC
+ terminates.</para>
+ </sect2>
+
+ <sect2>
+ <title>Persistent solution, requires user to re-login</title>
+
+ <para>If the user running VirtualBox is root, execute the following
+ command:</para>
+
+ <screen>prctl -n project.max-sem-ids -v 2048 -r -i project user.root</screen>
+
+ <para>From this point, starting new processes will have the increased
+ limit of 2048. You may then re-login or close all VMs and restart
+ VBoxSVC. You can check the current VBoxSVC semaphore ID limit using the
+ following command:</para>
+
+ <screen>prctl -n project.max-sem-ids -i process &lt;pid-of-VBoxSVC&gt;</screen>
+
+ <para>If the user running VirtualBox is not root, you must add the
+ property to the user's default project. Create the default project and
+ set the limit by executing as root:</para>
+
+ <screen>projadd -U &lt;username&gt; user.&lt;username&gt;
+projmod -s -K "project.max-sem-ids=(priv,2048,deny)" user.&lt;username&gt;</screen>
+
+ <para>Substitute "&lt;username&gt;" with the name of the user running
+ VirtualBox. Then re-login as this user to be able to run more than 120
+ VMs.</para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Legacy commands for using serial ports</title>
+
+ <para>Starting with version 1.4, VirtualBox provided support for virtual
+ serial ports, which, at the time, was rather complicated to set up with a
+ sequence of <computeroutput>VBoxManage setextradata</computeroutput>
+ statements. Since version 1.5, that way of setting up serial ports is no
+ longer necessary and <emphasis>deprecated.</emphasis> To set up virtual
+ serial ports, use the methods now described in <xref
+ linkend="serialports" />.<note>
+ <para>For backwards compatibility, the old
+ <computeroutput>setextradata</computeroutput> statements, whose
+ description is retained below from the old version of the manual, take
+ <emphasis>precedence</emphasis> over the new way of configuring serial
+ ports. As a result, if configuring serial ports the new way doesn't
+ work, make sure the VM in question does not have old configuration
+ data such as below still active.</para>
+ </note></para>
+
+ <para>The old sequence of configuring a serial port used the following 6
+ commands:</para>
+
+ <screen>VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/serial/0/Config/IRQ" 4
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/serial/0/Config/IOBase" 0x3f8
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/serial/0/LUN#0/Driver" Char
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/serial/0/LUN#0/AttachedDriver/Driver" NamedPipe
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/serial/0/LUN#0/AttachedDriver/Config/Location" "\\.\pipe\vboxCOM1"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/serial/0/LUN#0/AttachedDriver/Config/IsServer" 1</screen>
+
+ <para>This sets up a serial port in the guest with the default settings
+ for COM1 (IRQ 4, I/O address 0x3f8) and the
+ <computeroutput>Location</computeroutput> setting assumes that this
+ configuration is used on a Windows host, because the Windows named pipe
+ syntax is used. Keep in mind that on Windows hosts a named pipe must
+ always start with <computeroutput>\\.\pipe\</computeroutput>. On Linux the
+ same config settings apply, except that the path name for the
+ <computeroutput>Location</computeroutput> can be chosen more freely. Local
+ domain sockets can be placed anywhere, provided the user running
+ VirtualBox has the permission to create a new file in the directory. The
+ final command above defines that VirtualBox acts as a server, i.e. it
+ creates the named pipe itself instead of connecting to an already existing
+ one.</para>
+ </sect1>
+
+ <sect1 id="changenat">
+ <title>Fine-tuning the VirtualBox NAT engine</title>
+
+ <sect2>
+ <title>Configuring the address of a NAT network interface</title>
+
+ <para>In NAT mode, the guest network interface is assigned to the IPv4
+ range <computeroutput>10.0.x.0/24</computeroutput> by default where
+ <computeroutput>x</computeroutput> corresponds to the instance of the
+ NAT interface +2. So <computeroutput>x</computeroutput> is 2 when there
+ is only one NAT instance active. In that case the guest is assigned to
+ the address <computeroutput>10.0.2.15</computeroutput>, the gateway is
+ set to <computeroutput>10.0.2.2</computeroutput> and the name server can
+ be found at <computeroutput>10.0.2.3</computeroutput>.</para>
+
+ <para>If, for any reason, the NAT network needs to be changed, this can
+ be achieved with the following command:</para>
+
+ <screen>VBoxManage modifyvm "VM name" --natnet1 "192.168/16"</screen>
+
+ <para>This command would reserve the network addresses from
+ <computeroutput>192.168.0.0</computeroutput> to
+ <computeroutput>192.168.254.254</computeroutput> for the first NAT
+ network instance of "VM name". The guest IP would be assigned to
+ <computeroutput>192.168.0.15</computeroutput> and the default gateway
+ could be found at <computeroutput>192.168.0.2</computeroutput>.</para>
+ </sect2>
+
+ <sect2 id="nat-adv-tftp">
+ <title>Configuring the boot server (next server) of a NAT network
+ interface</title>
+
+ <para>For network booting in NAT mode, by default VirtualBox uses a
+ built-in TFTP server at the IP address 10.0.2.3. This default behavior
+ should work fine for typical remote-booting scenarios. However, it is
+ possible to change the boot server IP and the location of the boot image
+ with the following commands: <screen>VBoxManage modifyvm "VM name" --nattftpserver1 10.0.2.2
+VBoxManage modifyvm "VM name" --nattftpfile1 /srv/tftp/boot/MyPXEBoot.pxe</screen></para>
+ </sect2>
+
+ <sect2 id="nat-adv-settings">
+ <title>Tuning TCP/IP buffers for NAT</title>
+
+ <para>The VirtualBox NAT stack performance is often determined by its
+ interaction with the host's TCP/IP stack and the size of several buffers
+ (<computeroutput>SO_RCVBUF</computeroutput> and
+ <computeroutput>SO_SNDBUF</computeroutput>). For certain setups users
+ might want to adjust the buffer size for a better performance. This can
+ by achieved using the following commands (values are in kilobytes and
+ can range from 8 to 1024): <screen>VBoxManage modifyvm "VM name" --natsettings1 16000,128,128,0,0</screen>
+ This example illustrates tuning the NAT settings. The first parameter is
+ the MTU, then the size of the socket's send buffer and the size of the
+ socket's receive buffer, the initial size of the TCP send window, and
+ lastly the initial size of the TCP receive window. Note that specifying
+ zero means fallback to the default value.</para>
+
+ <para>Each of these buffers has a default size of 64KB and default MTU
+ is 1500.</para>
+ </sect2>
+
+ <sect2>
+ <title>Binding NAT sockets to a specific interface</title>
+
+ <para>By default, VirtualBox's NAT engine will route TCP/IP packets
+ through the default interface assigned by the host's TCP/IP stack. (The
+ technical reason for this is that the NAT engine uses sockets for
+ communication.) If, for some reason, you want to change this behavior,
+ you can tell the NAT engine to bind to a particular IP address instead.
+ Use the following command: <screen>VBoxManage modifyvm "VM name" --natbindip1 "10.45.0.2"</screen></para>
+
+ <para>After this, all outgoing traffic will be sent through the
+ interface with the IP address 10.45.0.2. Please make sure that this
+ interface is up and running prior to this assignment.</para>
+ </sect2>
+
+ <sect2 id="nat-adv-dns">
+ <title>Enabling DNS proxy in NAT mode</title>
+
+ <para>The NAT engine by default offers the same DNS servers to the guest
+ that are configured on the host. In some scenarios, it can be desirable
+ to hide the DNS server IPs from the guest, for example when this
+ information can change on the host due to expiring DHCP leases. In this
+ case, you can tell the NAT engine to act as DNS proxy using the
+ following command: <screen>VBoxManage modifyvm "VM name" --natdnsproxy1 on</screen></para>
+ </sect2>
+
+ <sect2 id="nat_host_resolver_proxy">
+ <title>Using the host's resolver as a DNS proxy in NAT mode</title>
+
+ <para>For resolving network names, the DHCP server of the NAT engine
+ offers a list of registered DNS servers of the host. If for some reason
+ you need to hide this DNS server list and use the host's resolver
+ settings, thereby forcing the VirtualBox NAT engine to intercept DNS
+ requests and forward them to host's resolver, use the following command:
+ <screen>VBoxManage modifyvm "VM name" --natdnshostresolver1 on</screen>
+ Note that this setting is similar to the DNS proxy mode, however whereas
+ the proxy mode just forwards DNS requests to the appropriate servers,
+ the resolver mode will interpret the DNS requests and use the host's DNS
+ API to query the information and return it to the guest.</para>
+
+ <sect3 id="nat_host_resolver_name_intercepting">
+ <title>User-defined host name resolving</title>
+ <para>In some cases it might be useful to intercept the name resolving mechanism,
+ providing a user-defined IP address on a particular DNS request. The intercepting
+ mechanism allows the user to map not only a single host but domains and even more
+ complex namings conventions if required.</para>
+ <para>
+ The following command sets a rule for mapping a name to a specified IP:</para>
+ <screen>VBoxManage setextradata "VM name" \
+ "VBoxInternal/Devices/{pcnet,e1000}/0/LUN#0/Config/HostResolverMappings/ \
+ &lt;uniq name of interception rule&gt;/HostIP" &lt;IPv4&gt;
+VBoxManage setextradata "VM name" \
+ "VBoxInternal/Devices/{pcnet,e1000}/0/LUN#0/Config/HostResolverMappings/ \
+ &lt;uniq name of interception rule&gt;/HostName" &lt;name of host&gt;</screen>
+ <para>The following command sets a rule for mapping a pattern name to a specified IP:</para>
+ <screen>VBoxManage setextradata "VM name" \
+ "VBoxInternal/Devices/{pcnet,e1000}/0/LUN#0/Config/HostResolverMappings/ \
+ &lt;uniq name of interception rule&gt;/HostIP" &lt;IPv4&gt;
+VBoxManage setextradata "VM name" \
+ "VBoxInternal/Devices/{pcnet,e1000}/0/LUN#0/Config/HostResolverMappings/ \
+ &lt;uniq name of interception rule&gt;/HostNamePattern" &lt;hostpattern&gt;</screen>
+ <para>The host pattern may include <computeroutput>"|", "?" and "*"</computeroutput>.</para>
+ <para>This example demonstrates how to instruct the host-resolver mechanism to resolve
+ all domain and probably some mirrors of www.blocked-site.info site with IP 127.0.0.1:</para>
+ <screen>VBoxManage setextradata "VM name" \
+ "VBoxInternal/Devices/e1000/0/LUN#0/Config/HostResolverMappings/ \
+ all_blocked_site/HostIP" 127.0.0.1
+VBoxManage setextradata "VM name" \
+ "VBoxInternal/Devices/e1000/0/LUN#0/Config/HostResolverMappings/ \
+ all_blocked_site/HostNamePattern" "*.blocked-site.*|*.fb.org"</screen>
+ <note><para>The host resolver mechanism should be enabled to use user-defined
+ mapping rules (please see
+ <xref linkend="nat_host_resolver_proxy" /> for more details).</para></note>
+ </sect3>
+ </sect2>
+
+ <sect2 id="nat-adv-alias">
+ <title>Configuring aliasing of the NAT engine</title>
+
+ <para>By default, the NAT core uses aliasing and uses random ports when
+ generating an alias for a connection. This works well for the most
+ protocols like SSH, FTP and so on. Though some protocols might need a
+ more transparent behavior or may depend on the real port number the
+ packet was sent from. It is possible to change the NAT mode via the
+ VBoxManage frontend with the following commands: <screen>VBoxManage modifyvm "VM name" --nataliasmode1 proxyonly</screen>
+ and <screen>VBoxManage modifyvm "Linux Guest" --nataliasmode1 sameports</screen>
+ The first example disables aliasing and switches NAT into transparent
+ mode, the second example enforces preserving of port values. These modes
+ can be combined if necessary.</para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="changedmi">
+ <title>Configuring the BIOS DMI information</title>
+
+ <para>The DMI data VirtualBox provides to guests can be changed for a
+ specific VM. Use the following commands to configure the DMI BIOS
+ information:</para>
+
+ <sect2>
+ <title>DMI BIOS information (type 0)</title>
+ <screen>VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSVendor" "BIOS Vendor"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSVersion" "BIOS Version"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSReleaseDate" "BIOS Release Date"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSReleaseMajor" 1
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSReleaseMinor" 2
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSFirmwareMajor" 3
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSFirmwareMinor" 4</screen>
+ </sect2>
+ <sect2>
+ <title>DMI system information (type 1)</title>
+ <screen>VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiSystemVendor" "System Vendor"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiSystemProduct" "System Product"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiSystemVersion" "System Version"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiSystemSerial" "System Serial"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiSystemSKU" "System SKU"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiSystemFamily" "System Family"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiSystemUuid"
+ "9852bf98-b83c-49db-a8de-182c42c7226b"</screen>
+ </sect2>
+ <sect2>
+ <title>DMI board information (type 2)</title>
+ <screen>VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiBoardVendor" "Board Vendor"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiBoardProduct" "Board Product"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiBoardVersion" "Board Version"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiBoardSerial" "Board Serial"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiBoardAssetTag" "Board Tag"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiBoardLocInChass" "Board Location"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiBoardType" 10</screen>
+ </sect2>
+ <sect2>
+ <title>DMI system enclosure or chassis (type 3)</title>
+ <screen>VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiChassisVendor" "Chassis Vendor"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiChassisVersion" "Chassis Version"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiChassisSerial" "Chassis Serial"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiChassisAssetTag" "Chassis Tag"</screen>
+ </sect2>
+ <sect2>
+ <title>DMI processor informatiion (type 4)</title>
+ <screen>VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiProcManufacturer" "GenuineIntel"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiProcVersion" "Pentium(R) III"</screen>
+ </sect2>
+ <sect2>
+ <title>DMI OEM strings (type 11)</title>
+ <screen>VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiOEMVBoxVer" "vboxVer_1.2.3"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiOEMVBoxRev" "vboxRev_12345"</screen>
+ </sect2>
+ <para>If a DMI string is not set, the default value of VirtualBox is used.
+ To set an empty string use
+ <computeroutput>"&lt;EMPTY&gt;"</computeroutput>.</para>
+
+ <para>Note that in the above list, all quoted parameters (DmiBIOSVendor,
+ DmiBIOSVersion but not DmiBIOSReleaseMajor) are expected to be strings. If
+ such a string is a valid number, the parameter is treated as number and
+ the VM will most probably refuse to start with an
+ <computeroutput>VERR_CFGM_NOT_STRING</computeroutput> error. In that case,
+ use <computeroutput>"string:&lt;value&gt;"</computeroutput>, for instance
+ <screen>VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiSystemSerial" "string:1234"</screen></para>
+
+ <para>Changing this information can be necessary to provide the DMI
+ information of the host to the guest to prevent Windows from asking for a
+ new product key. On Linux hosts the DMI BIOS information can be obtained
+ with <screen>dmidecode -t0</screen>and the DMI system information can be
+ obtained with <screen>dmidecode -t1</screen></para>
+ </sect1>
+
+ <sect1 id="changeacpicust">
+ <title>Configuring the custom ACPI table</title>
+
+ <para>VirtualBox can be configured to present an custom ACPI table to
+ the guest. Use the following command to configure this:</para>
+
+ <screen>VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/acpi/0/Config/CustomTable" "/path/to/table.bin"</screen>
+
+ <para>Configuring a custom ACPI table can prevent Windows
+ Vista and Windows 7 from asking for a new product key. On Linux hosts,
+ one of the host tables can be read from
+ <filename>/sys/firmware/acpi/tables/</filename>.</para>
+ </sect1>
+
+ <sect1>
+ <title>Fine-tuning timers and time synchronization</title>
+
+ <sect2 id="changetscmode">
+ <title>Configuring the guest time stamp counter (TSC) to reflect guest
+ execution</title>
+
+ <para>By default, VirtualBox keeps all sources of time visible to the
+ guest synchronized to a single time source, the monotonic host time.
+ This reflects the assumptions of many guest operating systems, which
+ expect all time sources to reflect "wall clock" time. In special
+ circumstances it may be useful however to make the TSC (time stamp
+ counter) in the guest reflect the time actually spent executing the
+ guest.</para>
+
+ <para>This special TSC handling mode can be enabled on a per-VM basis,
+ and for best results must be used only in combination with hardware
+ virtualization. To enable this mode use the following command:</para>
+
+ <screen>VBoxManage setextradata "VM name" "VBoxInternal/TM/TSCTiedToExecution" 1</screen>
+
+ <para>To revert to the default TSC handling mode use:</para>
+
+ <screen>VBoxManage setextradata "VM name" "VBoxInternal/TM/TSCTiedToExecution"</screen>
+
+ <para>Note that if you use the special TSC handling mode with a guest
+ operating system which is very strict about the consistency of time
+ sources you may get a warning or error message about the timing
+ inconsistency. It may also cause clocks to become unreliable with some
+ guest operating systems depending on how they use the TSC.</para>
+ </sect2>
+
+ <sect2 id="warpguest">
+ <title>Accelerate or slow down the guest clock</title>
+
+ <para>For certain purposes it can be useful to accelerate or to slow
+ down the (virtual) guest clock. This can be achieved as follows:</para>
+
+ <screen>VBoxManage setextradata "VM name" "VBoxInternal/TM/WarpDrivePercentage" 200</screen>
+
+ <para>The above example will double the speed of the guest clock
+ while</para>
+
+ <screen>VBoxManage setextradata "VM name" "VBoxInternal/TM/WarpDrivePercentage" 50</screen>
+
+ <para>will halve the speed of the guest clock. Note that changing the
+ rate of the virtual clock can confuse the guest and can even lead to
+ abnormal guest behavior. For instance, a higher clock rate means shorter
+ timeouts for virtual devices with the result that a slightly increased
+ response time of a virtual device due to an increased host load can
+ cause guest failures. Note further that any time synchronization
+ mechanism will frequently try to resynchronize the guest clock with the
+ reference clock (which is the host clock if the VirtualBox Guest
+ Additions are active). Therefore any time synchronization should be
+ disabled if the rate of the guest clock is changed as described above
+ (see <xref linkend="changetimesync" />).</para>
+ </sect2>
+
+ <sect2 id="changetimesync">
+ <title>Tuning the Guest Additions time synchronization
+ parameters</title>
+
+ <para>The VirtualBox Guest Additions ensure that the guest's system time
+ is synchronized with the host time. There are several parameters which
+ can be tuned. The parameters can be set for a specific VM using the
+ following command:</para>
+
+ <screen>VBoxManage guestproperty set "VM name" "/VirtualBox/GuestAdd/VBoxService/PARAMETER" VALUE</screen>
+
+ <para>where <computeroutput>PARAMETER</computeroutput> is one of the
+ following:</para>
+
+ <para><glosslist>
+ <glossentry>
+ <glossterm><computeroutput>--timesync-interval</computeroutput></glossterm>
+
+ <glossdef>
+ <para>Specifies the interval at which to synchronize the time
+ with the host. The default is 10000 ms (10 seconds).</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm><computeroutput>--timesync-min-adjust</computeroutput></glossterm>
+
+ <glossdef>
+ <para>The minimum absolute drift value measured in milliseconds
+ to make adjustments for. The default is 1000 ms on OS/2 and 100
+ ms elsewhere.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm><computeroutput>--timesync-latency-factor</computeroutput></glossterm>
+
+ <glossdef>
+ <para>The factor to multiply the time query latency with to
+ calculate the dynamic minimum adjust time. The default is 8
+ times, that means in detail: Measure the time it takes to
+ determine the host time (the guest has to contact the VM host
+ service which may take some time), multiply this value by 8 and
+ do an adjustment only if the time difference between host and
+ guest is bigger than this value. Don't do any time adjustment
+ otherwise.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm><computeroutput>--timesync-max-latency</computeroutput></glossterm>
+
+ <glossdef>
+ <para>The max host timer query latency to accept. The default is
+ 250 ms.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm><computeroutput>--timesync-set-threshold</computeroutput></glossterm>
+
+ <glossdef>
+ <para>The absolute drift threshold, given as milliseconds where
+ to start setting the time instead of trying to smoothly adjust
+ it. The default is 20 minutes.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm><computeroutput>--timesync-set-start</computeroutput></glossterm>
+
+ <glossdef>
+ <para>Set the time when starting the time sync service.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm><computeroutput>--timesync-set-on-restore
+ 0|1</computeroutput></glossterm>
+
+ <glossdef>
+ <para>Set the time after the VM was restored from a saved state
+ when passing 1 as parameter (default). Disable by passing 0. In
+ the latter case, the time will be adjusted smoothly which can
+ take a long time.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+
+ <para>All these parameters can be specified as command line parameters
+ to VBoxService as well.</para>
+ </sect2>
+
+ <sect2 id="disabletimesync">
+
+ <title>Disabling the Guest Additions time synchronization</title>
+
+ <para>Once installed and started, the VirtualBox Guest Additions will
+ try to synchronize the guest time with the host time. This can be
+ prevented by forbidding the guest service from reading the host
+ clock:</para>
+
+ <screen>VBoxManage setextradata "VM name" "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" 1</screen>
+
+ </sect2>
+
+ </sect1>
+
+ <sect1 id="vboxbowsolaris11">
+ <title>Installing the alternate bridged networking driver on Solaris 11
+ hosts</title>
+
+ <para>Starting with VirtualBox 4.1, VirtualBox ships a new network filter
+ driver that utilizes Solaris 11's Crossbow functionality. By default, this
+ new driver is installed for Solaris 11 hosts (builds 159 and above) that
+ has support for it.</para>
+
+ <para>To force installation of the older STREAMS based network filter
+ driver, execute as root the following command before installing the
+ VirtualBox package:</para>
+
+ <screen>touch /etc/vboxinst_vboxflt</screen>
+
+ <para>To force installation of the Crossbow based network filter driver,
+ execute as root the following command before installing the VirtualBox
+ package:</para>
+
+ <screen>touch /etc/vboxinst_vboxbow</screen>
+
+ <para>To check which driver is currently being used by VirtualBox,
+ execute:</para>
+
+ <screen>modinfo | grep vbox</screen>
+
+ <para>If the output contains "vboxbow", it indicates VirtualBox is using
+ the Crossbow network filter driver, while the name "vboxflt" indicates
+ usage of the older STREAMS network filter.</para>
+ </sect1>
+
+ <sect1 id="vboxbowvnictemplates">
+ <title>VirtualBox VNIC templates for VLANs on Solaris 11 hosts</title>
+
+ <para>VirtualBox supports VNIC (Virtual Network Interface) templates for
+ configuring VMs over VLANs.<footnote>
+ <para>Support for Crossbow based bridged networking was introduced
+ with VirtualBox 4.1 and requires Solaris 11 build 159 or above.</para>
+ </footnote> A VirtualBox VNIC template is a VNIC whose name starts with
+ "vboxvnic_template".</para>
+
+ <para>Here is an example of how to use a VNIC template to configure a VLAN
+ for VMs. Create a VirtualBox VNIC template, by executing as root:</para>
+
+ <screen>dladm create-vnic -t -l nge0 -v 23 vboxvnic_template0
+</screen>
+
+ <para>This will create a temporary VNIC over interface "nge0" with the
+ VLAN ID 23. To create VNIC templates that are persistent across host
+ reboots, skip the <computeroutput>-t</computeroutput> parameter in the
+ above command. You may check the current state of links using:</para>
+
+ <para><screen>$ dladm show-link
+LINK CLASS MTU STATE BRIDGE OVER
+nge0 phys 1500 up -- --
+nge1 phys 1500 down -- --
+vboxvnic_template0 vnic 1500 up -- nge0
+
+$ dladm show-vnic
+LINK OVER SPEED MACADDRESS MACADDRTYPE VID
+vboxvnic_template0 nge0 1000 2:8:20:25:12:75 random 23
+</screen></para>
+
+ <para>Once the VNIC template is created, all VMs that need to be part of
+ VLAN 23 over the physical interface "nge0" can use the same VNIC template.
+ This makes managing VMs on VLANs simpler and efficient, as the VLAN
+ details are not stored as part of every VM's configuration but rather
+ picked from the VNIC template which can be modified anytime using
+ <computeroutput>dladm</computeroutput>. Apart from the VLAN ID, VNIC
+ templates can be created with additional properties such as bandwidth
+ limits, CPU fanout etc. Refer to your Solaris network documentation on how
+ to accomplish this. These additional properties, if any, are also applied
+ to VMs which use the VNIC template.</para>
+ </sect1>
+
+ <sect1 id="addhostonlysolaris">
+ <title>Configuring multiple host-only network interfaces on Solaris
+ hosts</title>
+
+ <para>By default VirtualBox provides you with one host-only network
+ interface. Adding more host-only network interfaces on Solaris hosts
+ requires manual configuration. Here's how to add two more host-only
+ network interfaces.</para>
+
+ <para>You first need to stop all running VMs and unplumb all existing
+ "vboxnet" interfaces. Execute the following commands as root:</para>
+
+ <screen>ifconfig vboxnet0 unplumb</screen>
+
+ <para>Once you make sure all vboxnet interfaces are unplumbed, remove the
+ driver using:</para>
+
+ <para><screen>rem_drv vboxnet</screen>then edit the file
+ <computeroutput>/platform/i86pc/kernel/drv/vboxnet.conf</computeroutput>
+ and add a line for the new interfaces:</para>
+
+ <para><screen>name="vboxnet" parent="pseudo" instance=1;
+name="vboxnet" parent="pseudo" instance=2;</screen>Add as many of these lines
+ as required and make sure "instance" number is uniquely incremented. Next
+ reload the vboxnet driver using:</para>
+
+ <para><screen>add_drv vboxnet</screen>Now plumb all the interfaces using
+ <computeroutput>ifconfig vboxnetX plumb</computeroutput> (where X can be
+ 0, 1 or 2 in this case) and once plumbed you can then configure the
+ interface like any other network interface.</para>
+
+ <para>To make your newly added interfaces' settings persistent across
+ reboots you will need to edit the files
+ <computeroutput>/etc/netmasks</computeroutput>, and if you are using NWAM
+ <computeroutput>/etc/nwam/llp</computeroutput> and add the appropriate
+ entries to set the netmask and static IP for each of those interfaces. The
+ VirtualBox installer only updates these configuration files for the one
+ "vboxnet0" interface it creates by default.</para>
+ </sect1>
+
+ <sect1 id="solariscodedumper">
+ <title>Configuring the VirtualBox CoreDumper on Solaris hosts</title>
+
+ <para>VirtualBox is capable of producing its own core files for extensive
+ debugging when things go wrong. Currently this is only available on
+ Solaris hosts.</para>
+
+ <para>The VirtualBox CoreDumper can be enabled using the following
+ command:</para>
+
+ <para><screen>VBoxManage setextradata "VM name" VBoxInternal2/CoreDumpEnabled 1</screen></para>
+
+ <para>You can specify which directory to use for core dumps with this
+ command:</para>
+
+ <para><screen>VBoxManage setextradata "VM name" VBoxInternal2/CoreDumpDir &lt;path-to-directory&gt;</screen>Make
+ sure the directory you specify is on a volume with sufficient free space
+ and that the VirtualBox process has sufficient permissions to write files
+ to this directory. If you skip this command and don't specify any core
+ dump directory, the current directory of the VirtualBox executable will be
+ used (which would most likely fail when writing cores as they are
+ protected with root permissions). It is recommended you explicitly set a
+ core dump directory.</para>
+
+ <para>You must specify when the VirtualBox CoreDumper should be triggered.
+ This is done using the following commands:</para>
+
+ <para><screen>VBoxManage setextradata "VM name" VBoxInternal2/CoreDumpReplaceSystemDump 1
+VBoxManage setextradata "VM name" VBoxInternal2/CoreDumpLive 1</screen>At
+ least one of the above two commands will have to be provided if you have
+ enabled the VirtualBox CoreDumper.</para>
+
+ <para>Setting <computeroutput>CoreDumpReplaceSystemDump</computeroutput>
+ sets up the VM to override the host's core dumping mechanism and in the
+ event of any crash only the VirtualBox CoreDumper would produce the core
+ file.</para>
+
+ <para>Setting <computeroutput>CoreDumpLive</computeroutput> sets up the VM
+ to produce cores whenever the VM process receives a
+ <computeroutput>SIGUSR2</computeroutput> signal. After producing the core
+ file, the VM will not be terminated and will continue to run. You can thus
+ take cores of the VM process using:</para>
+
+ <para><screen>kill -s SIGUSR2 &lt;VM-process-id&gt;</screen></para>
+
+ <para>Core files produced by the VirtualBox CoreDumper are of the form
+ <computeroutput>core.vb.&lt;ProcessName&gt;.&lt;ProcessID&gt;</computeroutput>,
+ for example <computeroutput>core.vb.VBoxHeadless.11321</computeroutput>.</para>
+ </sect1>
+
+ <sect1 id="guitweaks">
+ <title>Locking down the VirtualBox manager GUI</title>
+
+ <sect2>
+ <title>GUI customization</title>
+
+ <para>There are several advanced customization settings for locking down
+ the VirtualBox manager, that is, removing some features that the user
+ should not see.</para>
+
+ <para><screen>VBoxManage setextradata global GUI/Customizations OPTION[,OPTION...]</screen></para>
+
+ <para>where <computeroutput>OPTION</computeroutput> is one of the
+ following keywords:<glosslist>
+ <glossentry>
+ <glossterm><computeroutput>noSelector</computeroutput></glossterm>
+
+ <glossdef>
+ <para>Don't allow to start the VirtualBox manager. Trying to do so
+ will show a window containing a proper error message.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm><computeroutput>noMenuBar</computeroutput></glossterm>
+
+ <glossdef>
+ <para>VM windows will not contain a menu bar.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm><computeroutput>noStatusBar</computeroutput></glossterm>
+
+ <glossdef>
+ <para>VM windows will not contain a status bar.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+
+ <para>To disable any GUI customization do <screen>VBoxManage setextradata global GUI/Customizations</screen></para>
+ </sect2>
+
+ <sect2>
+ <title>Host Key customization</title>
+
+ <para>To disable all host key combinations, open the preferences and
+ change the host key to <emphasis>None</emphasis>. This might be useful
+ when using VirtualBox in a kiosk mode.</para>
+
+ <para>To redefine or disable certain host key actions, use the following command:</para>
+
+ <screen>VBoxManage setextradata global GUI/Input/MachineShortcuts "FullscreenMode=F,...."</screen>
+
+ <para>The following list shows the possible host key actions together with their default
+ host key shortcut. Setting an action to <emphasis>None</emphasis> will disable
+ that host key action.</para>
+ <table>
+ <title>ignoreme</title>
+ <tgroup cols="3">
+ <tbody>
+ <row>
+ <entry><emphasis role="bold">Action</emphasis></entry>
+ <entry><emphasis role="bold">Default Host Key</emphasis></entry>
+ <entry><emphasis role="bold">Action</emphasis></entry>
+ </row>
+ <row>
+ <entry>SettingsDialog</entry>
+ <entry>S</entry>
+ <entry>open the VM settings dialog</entry>
+ </row>
+ <row>
+ <entry>TakeSnapshot</entry>
+ <entry>S</entry>
+ <entry>take a snapshot</entry>
+ </row>
+ <row>
+ <entry>InformationsDialog</entry>
+ <entry>N</entry>
+ <entry>show the VM information dialog</entry>
+ </row>
+ <row>
+ <entry>MouseIntegration</entry>
+ <entry>I</entry>
+ <entry>toggle mouse integration</entry>
+ </row>
+ <row>
+ <entry>TypeCAD</entry>
+ <entry>Del</entry>
+ <entry>inject Ctrl+Alt+Del</entry>
+ </row>
+ <row>
+ <entry>TypeCABS</entry>
+ <entry>Backspace</entry>
+ <entry>inject Ctrl+Alt+Backspace</entry>
+ </row>
+ <row>
+ <entry>Pause</entry>
+ <entry>P</entry>
+ <entry>Pause the VM</entry>
+ </row>
+ <row>
+ <entry>Reset</entry>
+ <entry>R</entry>
+ <entry>(hard) reset the guest</entry>
+ </row>
+ <row>
+ <entry>Shutdown</entry>
+ <entry>H</entry>
+ <entry>press the ACPI power button</entry>
+ </row>
+ <row>
+ <entry>Close</entry>
+ <entry>Q</entry>
+ <entry>show the VM close dialog</entry>
+ </row>
+ <row>
+ <entry>FullscreenMode</entry>
+ <entry>F</entry>
+ <entry>switch the VM into fullscreen</entry>
+ </row>
+ <row>
+ <entry>SeamlessMode</entry>
+ <entry>L</entry>
+ <entry>switch the VM into seamless mode</entry>
+ </row>
+ <row>
+ <entry>ScaleMode</entry>
+ <entry>C</entry>
+ <entry>switch the VM into scale mode</entry>
+ </row>
+ <row>
+ <entry>PopupMenu</entry>
+ <entry>Home</entry>
+ <entry>show popup menu in fullscreen / seamless mode</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <para>To disable the fullscreen mode as well as the seamless mode, use the following command:
+ <screen>VBoxManage setextradata global GUI/Input/MachineShortcuts "FullscreenMode=None,SeamlessMode=None"</screen>
+ </para>
+
+ </sect2>
+ <sect2>
+ <title>Action when terminating the VM</title>
+
+ <para>You can disallow certain actions when terminating a VM. To disallow specific actions, type:</para>
+
+ <para><screen>VBoxManage setextradata "VM name" GUI/RestrictedCloseActions OPTION[,OPTION...]</screen></para>
+
+ <para>where <computeroutput>OPTION</computeroutput> is one of the
+ following keywords:<glosslist>
+ <glossentry>
+ <glossterm><computeroutput>SaveState</computeroutput></glossterm>
+
+ <glossdef>
+ <para>Don't allow the user to save the VM state when terminating
+ the VM.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm><computeroutput>Shutdown</computeroutput></glossterm>
+
+ <glossdef>
+ <para>Don't allow the user to shutdown the VM by sending the ACPI
+ power-off event to the guest.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm><computeroutput>PowerOff</computeroutput></glossterm>
+
+ <glossdef>
+ <para>Don't allow the user to power off the VM.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm><computeroutput>Restore</computeroutput></glossterm>
+
+ <glossdef>
+ <para>Don't allow the user to return to the last snapshot when
+ powering off the VM.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+
+ <para>Any combination of the above is allowed. If all options are
+ specified, the VM cannot be shut down at all.</para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="vboxwebsrv-daemon">
+ <title>Starting the VirtualBox web service automatically</title>
+
+ <para>The VirtualBox web service
+ (<computeroutput>vboxwebsrv</computeroutput>) is used for controlling
+ VirtualBox remotely. It is documented in detail in the VirtualBox Software
+ Development Kit (SDK); please see <xref linkend="VirtualBoxAPI" />. As the
+ client base using this interface is growing, we added start scripts for
+ the various operation systems we support. The following sections describe
+ how to use them. The VirtualBox web service is never started automatically
+ as a result of a standard installation.</para>
+
+ <sect2 id="vboxwebsrv-linux">
+ <title>Linux: starting the webservice via <computeroutput>init</computeroutput></title>
+
+ <para>On Linux, the web service can be automatically started during
+ host boot by adding appropriate parameters to the file
+ <computeroutput>/etc/default/virtualbox</computeroutput>.
+ There is one mandatory parameter, <computeroutput>VBOXWEB_USER</computeroutput>,
+ which must be set to the user which will later start the VMs. The
+ paramters in the table below all start with <computeroutput>VBOXWEB_</computeroutput>
+ (<computeroutput>VBOXWEB_HOST</computeroutput>,
+ <computeroutput>VBOXWEB_PORT</computeroutput> etc.):
+ <table>
+ <title>ignored</title>
+ <tgroup cols="3">
+ <tbody>
+ <row>
+ <entry><emphasis role="bold">Parameter</emphasis></entry>
+ <entry><emphasis role="bold">Description</emphasis></entry>
+ <entry><emphasis role="bold">Default</emphasis></entry>
+ </row>
+ <row>
+ <entry>USER</entry>
+ <entry>The user as which the web service runs</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>HOST</entry>
+ <entry>The host to bind the web service to</entry>
+ <entry>localhost</entry>
+ </row>
+ <row>
+ <entry>PORT</entry>
+ <entry>The port to bind the web service to</entry>
+ <entry>18083</entry>
+ </row>
+ <row>
+ <entry>SSL_KEYFILE</entry>
+ <entry>Server key and certificate file, PEM format</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>SSL_PASSWORDFILE</entry>
+ <entry>File name for password to server key</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>SSL_CACERT</entry>
+ <entry>CA certificate file, PEM format</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>SSL_CAPATH</entry>
+ <entry>CA certificate path</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>SSL_DHFILE</entry>
+ <entry>DH file name or DH key length in bits</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>SSL_RANDFILE</entry>
+ <entry>File containing seed for random number generator</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>TIMEOUT</entry>
+ <entry>Session timeout in seconds; 0 disables timeouts</entry>
+ <entry>300</entry>
+ </row>
+ <row>
+ <entry>CHECK_INTERVAL</entry>
+ <entry>Frequency of timeout checks in seconds</entry>
+ <entry>5</entry>
+ </row>
+ <row>
+ <entry>THREADS</entry>
+ <entry>Maximum number of worker threads to run in parallel</entry>
+ <entry>100</entry>
+ </row>
+ <row>
+ <entry>KEEPALIVE</entry>
+ <entry>Maximum number of requests before a socket will be closed</entry>
+ <entry>100</entry>
+ </row>
+ <row>
+ <entry>LOGFILE</entry>
+ <entry>Name of file to write log to</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry>ROTATE</entry>
+ <entry>Number of log files; 0 disables log rotation</entry>
+ <entry>10</entry>
+ </row>
+ <row>
+ <entry>LOGSIZE</entry>
+ <entry>Maximum size of a log file in bytes to trigger rotation</entry>
+ <entry>1MB</entry>
+ </row>
+ <row>
+ <entry>LOGINTERVAL</entry>
+ <entry>Maximum time interval in seconds to trigger log rotation</entry>
+ <entry>1 day</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </para>
+
+ <para>Setting the parameter <computeroutput>SSL_KEYFILE</computeroutput>
+ enables the SSL/TLS support. Using encryption is strongly encouraged, as
+ otherwise everything (including passwords) is transferred in clear
+ text.</para>
+ </sect2>
+
+ <sect2 id="vboxwebsrv-solaris">
+ <title>Solaris: starting the web service via SMF</title>
+
+ <para>On Solaris hosts, the VirtualBox web service daemon is
+ integrated into the SMF framework. You can change the parameters, but
+ don't have to if the defaults below already match your needs:<screen>svccfg -s svc:/application/virtualbox/webservice:default setprop config/host=localhost
+svccfg -s svc:/application/virtualbox/webservice:default setprop config/port=18083
+svccfg -s svc:/application/virtualbox/webservice:default setprop config/user=root</screen></para>
+
+ <para>The table in the previous section showing the parameter names and
+ defaults also applies to Solaris. The parameter names must be changed
+ to lowercase and a prefix of <computeroutput>config/</computeroutput>
+ has to be added, e.g. <computeroutput>config/user</computeroutput> or
+ <computeroutput>config/ssl_keyfile</computeroutput>. If you made any
+ change, don't forget to run the following command to put the changes into
+ effect immediately:<screen>svcadm refresh svc:/application/virtualbox/webservice:default</screen></para>
+
+ <para>If you forget the above command then the previous settings will
+ be used when enabling the service. Check the current property settings
+ with:<screen>svcprop -p config svc:/application/virtualbox/webservice:default</screen></para>
+
+ <para>When everything is configured correctly you can start the
+ VirtualBox web service with the following command:<screen>svcadm enable svc:/application/virtualbox/webservice:default</screen></para>
+
+ <para>For more information about SMF, please refer to the Solaris
+ documentation.</para>
+ </sect2>
+
+ <sect2 id="vboxwebsrv-osx">
+ <title>Mac OS X: starting the webservice via launchd</title>
+
+ <para>On Mac OS X, launchd is used to start the VirtualBox webservice. An
+ example configuration file can be found in
+ <computeroutput>$HOME/Library/LaunchAgents/org.virtualbox.vboxwebsrv.plist</computeroutput>.
+ It can be enabled by changing the
+ <computeroutput>Disabled</computeroutput> key from
+ <computeroutput>true</computeroutput> to
+ <computeroutput>false</computeroutput>. To manually start the
+ service use the following command: <screen>launchctl load ~/Library/LaunchAgents/org.virtualbox.vboxwebsrv.plist</screen>
+ For additional information on how launchd services could be
+ configured see <literal><ulink
+ url="http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPSystemStartup/BPSystemStartup.html">http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPSystemStartup/BPSystemStartup.html</ulink></literal>.</para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="vboxwatchdog">
+ <title>VirtualBox Watchdog</title>
+ <para>Starting with VirtualBox 4.2 the memory ballooning service formerly
+ known as <computeroutput>VBoxBalloonCtrl</computeroutput> was renamed to
+ VBoxWatchdog, which now incorporates several host services that are meant
+ to be run in a server environment.</para>
+
+ <para>These services are: <itemizedlist>
+ <listitem>
+ <para>Memory ballooning control, which automatically takes care of
+ a VM's configured memory balloon (see <xref linkend="guestadd-balloon" />
+ for an introduction to memory ballooning). This especially is useful
+ for server environments where VMs may dynamically require more or
+ less memory during runtime.</para>
+
+ <para>The service periodically checks a VM's current memory balloon
+ and its free guest RAM and automatically adjusts the current memory
+ balloon by inflating or deflating it accordingly. This handling only
+ applies to running VMs having recent Guest Additions installed.</para>
+ </listitem>
+ <listitem>
+ <para>Host isolation detection, which provides a way to detect whether
+ the host cannot reach the specific VirtualBox server instance anymore
+ and take appropriate actions, such as shutting down, saving the
+ current state or even powering down certain VMs.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>
+ All configuration values can be either specified via command line or global
+ extradata, whereas command line values always have a higher priority when set.
+ Some of the configuration values also be be specified on a per-VM basis. So
+ the overall lookup order is: command line, per-VM basis extradata (if available),
+ global extradata.
+ </para>
+
+ <sect2 id="vboxwatchdog-ballonctrl">
+ <title>Memory ballooning control</title>
+ <para>The memory ballooning control inflates and deflates the memory balloon
+ of VMs based on the VMs free memory and the desired maximum balloon size.</para>
+
+ <para>To set up the memory ballooning control the maximum ballooning size a
+ VM can reach needs to be set. This can be specified via command line with
+ <screen>--balloon-max &lt;Size in MB&gt;</screen>, on a per-VM basis extradata value with
+ <screen>VBoxManage setextradata &lt;VM-Name&gt; VBoxInternal2/Watchdog/BalloonCtrl/BalloonSizeMax &lt;Size in MB&gt;</screen>
+ or using a global extradata value with
+ <screen>VBoxManage setextradata global VBoxInternal2/Watchdog/BalloonCtrl/BalloonSizeMax &lt;Size in MB&gt;</screen>
+ <note><para>If no maximum ballooning size is specified by at least one of
+ the parameters above, no ballooning will be performed at all.</para></note>
+ </para>
+
+ <para>Setting the ballooning increment in MB can be either done via
+ command line with
+ <screen>--balloon-inc &lt;Size in MB&gt;</screen> or using a global
+ extradata value with
+ <screen>VBoxManage setextradata global VBoxInternal2/Watchdog/BalloonCtrl/BalloonIncrementMB &lt;Size in MB&gt;</screen>
+ Default ballooning increment is 256 MB if not specified.</para>
+
+ <para>Same goes with the ballooning decrement: Via command line with
+ <screen>--balloon-dec &lt;Size in MB&gt;</screen> or using a global
+ extradata value with
+ <screen>VBoxManage setextradata global VBoxInternal2/Watchdog/BalloonCtrl/BalloonDecrementMB &lt;Size in MB&gt;</screen>
+ Default ballooning decrement is 128 MB if not specified.</para>
+
+ <para>To define the lower limit in MB a balloon can be the command line with
+ <screen>--balloon-lower-limit &lt;Size in MB&gt;</screen> can be used or using a global
+ extradata value with
+ <screen>VBoxManage setextradata global VBoxInternal2/Watchdog/BalloonCtrl/BalloonLowerLimitMB &lt;Size in MB&gt;</screen>
+ is available. Default lower limit is 128 if not specified.</para>
+ </sect2>
+
+ <sect2 id="vboxwatchdog-hostisln">
+ <title>Host isolation detection</title>
+ <para>To detect whether a host is being isolated, that is, the host cannot
+ reach the VirtualBox server instance anymore, the host needs to set an
+ alternating value to a global extradata value within a time period. If
+ this value is not set within that time period a timeout occurred and the
+ so-called host isolation response will be performed to the VMs handled.
+ Which VMs are handled can be controlled by defining VM groups and assigning
+ VMs to those groups. By default no groups are set, meaning that all VMs
+ on the server will be handled when no host response is received within
+ 30 seconds.</para>
+
+ <para>To set the groups handled by the host isolation detection via
+ command line:
+ <screen>--apimon-groups=&lt;string[,stringN]&gt;</screen> or using a global
+ extradata value with
+ <screen>VBoxManage setextradata global VBoxInternal2/Watchdog/APIMonitor/Groups &lt;string[,stringN]&gt;</screen>
+ </para>
+
+ <para>To set the host isolation timeout via command line:
+ <screen>--apimon-isln-timeout=&lt;ms&gt;</screen> or using a global
+ extradata value with
+ <screen>VBoxManage setextradata global VBoxInternal2/Watchdog/APIMonitor/IsolationTimeoutMS &lt;ms&gt;</screen>
+ </para>
+
+ <para>To set the actual host isolation response via command line:
+ <screen>--apimon-isln-response=&lt;cmd&gt;</screen> or using a global
+ extradata value with
+ <screen>VBoxManage setextradata global VBoxInternal2/Watchdog/APIMonitor/IsolationResponse &lt;cmd&gt;</screen>
+ The following response commands are available:
+ <itemizedlist>
+ <listitem>
+ <para><computeroutput>none</computeroutput>, which does nothing.</para>
+ </listitem>
+ <listitem>
+ <para><computeroutput>pause</computeroutput>, which pauses the
+ execution of a VM.</para>
+ </listitem>
+ <listitem>
+ <para><computeroutput>poweroff</computeroutput>, which shuts down
+ the VM by pressing the virtual power button. The VM will not have
+ the chance of saving any data or veto the shutdown process.</para>
+ </listitem>
+ <listitem>
+ <para><computeroutput>save</computeroutput>, which saves the current
+ machine state and powers off the VM afterwards. If saving the machine
+ state fails the VM will be paused.</para>
+ </listitem>
+ <listitem>
+ <para><computeroutput>shutdown</computeroutput>, which shuts down
+ the VM in a gentle way by sending an <computeroutput>ACPI</computeroutput>
+ shutdown event to the VM's operating system. The OS then has the
+ chance of doing a clean shutdown.</para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </sect2>
+
+ <sect2 id="vboxwatchdog-moreinfo">
+ <title>More information</title>
+ <para>For more advanced options and parameters like verbose logging check
+ the built-in command line help accessible with
+ <computeroutput>--help</computeroutput>.</para>
+ </sect2>
+
+ </sect1>
+
+ <sect1 id="otherextpacks">
+ <title>Other extension packs</title>
+
+ <para>Starting with VirtualBox 4.2.0 there is another extension pack,
+ <code>VNC</code>, which is open source and replaces the previous
+ integration of the VNC remote access protocol. This is experimental code,
+ and will be initially available in the VirtualBox source code package only.
+ It is to a large portion code contributed by users, and is not supported
+ in any way by Oracle.</para>
+
+ <para>The keyboard handling is severely limited, and only the US keyboard
+ layout works. Other keyboard layouts will have at least some keys which
+ produce the wrong results (often quite surprising effects), and for layouts
+ which have significant differences to the US keyboard layout it is most
+ likely unusable.</para>
+
+ <para>It is possible to install both the Oracle VM VirtualBox Extension
+ Pack and VNC, but only one VRDE module can be active at any time. The
+ following command switches to the VNC VRDE module in
+ VNC:<screen>VBoxManage setproperty vrdeextpack VNC</screen></para>
+
+ <para>Configuring the remote access works very similarly to VRDP (see
+ <xref linkend="vrde" />), with some limitations: VNC does not
+ support specifying several port numbers, and the authentication is done
+ differently. VNC can only deal with password authentication, and there
+ is no option to use password hashes. This leaves no other choice than
+ having a clear-text password in the VM configuration, which can be set with
+ the following command:<screen>VBoxManage modifyvm VMNAME --vrdeproperty VNCPassword=secret</screen></para>
+
+ <para>The user is responsible for keeping this password secret, and it
+ should be removed when a VM configuration is passed to another person,
+ for whatever purpose. Some VNC servers claim to have "encrypted" passwords
+ in the configuration. This is not true encryption, it is only concealing
+ the passwords, which is exactly as secure as clear-text passwords.</para>
+
+ <para>The following command switches back to VRDP (if
+ installed):<screen>VBoxManage setproperty vrdeextpack "Oracle VM VirtualBox Extension Pack"</screen></para>
+ </sect1>
+
+ <sect1 id="autostart">
+ <title>Starting virtual machines during system boot</title>
+
+ <para>Starting with VirtualBox 4.2.0 it is possible to start VMs automatically during
+ system boot on Linux, Solaris and Mac OS X for all users. </para>
+
+ <sect2 id="autostart-linux">
+ <title>Linux: starting the autostart service via <computeroutput>init</computeroutput></title>
+
+ <para>On Linux, the autostart service is activated by setting two variables in
+ <computeroutput>/etc/default/virtualbox</computeroutput>.
+ The first one is <computeroutput>VBOXAUTOSTART_DB</computeroutput> which
+ contains an absolute path to the autostart database directory.
+ The directory should have write access for every user who should be able to
+ start virtual machines automatically. Furthermore the directory should have the
+ sticky bit set.
+ The second variable is <computeroutput>VBOXAUTOSTART_CONFIG</computeroutput>
+ which points the service to the autostart configuration file which is used
+ during boot to determine whether to allow individual users to start a VM
+ automatically and configure startup delays.
+ The config file can be placed in <computeroutput>/etc/vbox</computeroutput>
+ and contains several options. One is <computeroutput>default_policy</computeroutput>
+ which controls whether the autostart service allows or denies to start a VM
+ for users which are not in the exception list.
+ The exception list starts with <computeroutput>exception_list</computeroutput>
+ and contains a comma seperated list with usernames. Furthermore a separate
+ startup delay can be configured for every user to avoid overloading the host.
+ A sample configuration is given below:</para>
+
+ <para><screen>
+# Default policy is to deny starting a VM, the other option is "allow".
+default_policy = deny
+
+# Bob is allowed to start virtual machines but starting them
+# will be delayed for 10 seconds
+bob = {
+ allow = true
+ startup_delay = 10
+}
+
+# Alice is not allowed to start virtual machines, useful to exclude certain users
+# if the default policy is set to allow.
+alice = {
+ allow = false
+}
+ </screen></para>
+
+ <para>Every user who wants to enable autostart for individual machines
+ has to set the path to the autostart database directory with
+ <screen>VBoxManage setproperty autostartdbpath &lt;Autostart directory&gt;</screen>
+ </para>
+ </sect2>
+
+ <sect2 id="autostart-solaris">
+ <title>Solaris: starting the autostart service via SMF</title>
+
+ <para>On Solaris hosts, the VirtualBox autostart daemon is
+ integrated into the SMF framework. To enable it you have to point the service
+ to an existing configuration file which has the same format as on Linux (see <xref linkend="autostart-linux" />):
+ <screen>svccfg -s svc:/application/virtualbox/autostart:default setprop config/config=/etc/vbox/autostart.cfg</screen>
+ </para>
+
+ <para>When everything is configured correctly you can start the
+ VirtualBox autostart service with the following command:<screen>svcadm enable svc:/application/virtualbox/autostart:default</screen></para>
+
+ <para>For more information about SMF, please refer to the Solaris
+ documentation.</para>
+ </sect2>
+
+ <sect2 id="autostart-osx">
+ <title>Mac OS X: starting the autostart service via launchd</title>
+
+ <para>On Mac OS X, launchd is used to start the VirtualBox autostart service. An
+ example configuration file can be found in
+ <computeroutput>/Applications/VirtualBox.app/Contents/MacOS/org.virtualbox.vboxautostart.plist</computeroutput>.
+ To enable the service copy the file to <computeroutput>/Library/LaunchDaemons</computeroutput> and change the
+ <computeroutput>Disabled</computeroutput> key from
+ <computeroutput>true</computeroutput> to
+ <computeroutput>false</computeroutput>. Furthermore replace the second parameter
+ to an existing configuration file which has the same format as on Linux (see <xref linkend="autostart-linux" />).
+ To manually start the service use the following command:
+ <screen>launchctl load /Library/LaunchDaemons/org.virtualbox.vboxautostart.plist</screen>
+ For additional information on how launchd services could be
+ configured see <literal><ulink
+ url="http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPSystemStartup/BPSystemStartup.html">http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPSystemStartup/BPSystemStartup.html</ulink></literal>.</para>
+ </sect2>
+ </sect1>
+</chapter>
diff --git a/doc/manual/en_US/user_BasicConcepts.xml b/doc/manual/en_US/user_BasicConcepts.xml
new file mode 100644
index 00000000..ab9ddf5d
--- /dev/null
+++ b/doc/manual/en_US/user_BasicConcepts.xml
@@ -0,0 +1,1344 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<chapter id="BasicConcepts">
+ <title>Configuring virtual machines</title>
+
+ <para>Whereas <xref linkend="Introduction" /> gave you a quick introduction
+ to VirtualBox and how to get your first virtual machine running, the
+ following chapter describes in detail how to configure virtual
+ machines.</para>
+
+ <para>You have considerable latitude in deciding what virtual hardware will
+ be provided to the guest. The virtual hardware can be used for communicating
+ with the host system or with other guests. For instance, if you provide
+ VirtualBox with the image of a CD-ROM in an ISO file, VirtualBox can present
+ this image to a guest system as if it were a physical CD-ROM. Similarly, you
+ can give a guest system access to the real network via its virtual network
+ card, and, if you so choose, give the host system, other guests, or
+ computers on the Internet access to the guest system.</para>
+
+ <sect1>
+ <title id="guestossupport">Supported guest operating systems</title>
+
+ <para>Since VirtualBox is designed to provide a generic virtualization
+ environment for x86 systems, it may run operating systems of any kind,
+ even those not listed here. However, the focus is to optimize VirtualBox
+ for the following guest systems:</para>
+
+ <para><glosslist>
+ <glossentry>
+ <glossterm>Windows NT 4.0</glossterm>
+
+ <glossdef>
+ <para>All versions, editions and service packs are fully
+ supported; however, there are some issues with older service
+ packs. We recommend to install service pack 6a. Guest Additions
+ are available with a limited feature set.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Windows 2000 / XP / Server 2003 / Vista / Server 2008 /
+ Windows 7 / Windows 8 / Server 2012</glossterm>
+
+ <glossdef>
+ <para>All versions, editions and service packs are fully supported
+ (including 64-bit versions, under the preconditions listed below).
+ Guest Additions are available.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>DOS / Windows 3.x / 95 / 98 / ME</glossterm>
+
+ <glossdef>
+ <para>Limited testing has been performed. Use beyond legacy
+ installation mechanisms not recommended. No Guest Additions
+ available.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Linux 2.4</glossterm>
+
+ <glossdef>
+ <para>Limited support.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Linux 2.6</glossterm>
+
+ <glossdef>
+ <para>All versions/editions are fully supported (32 bits and 64
+ bits). Guest Additions are available.</para>
+
+ <para>We strongly recommend using a Linux kernel version 2.6.13 or
+ higher for better performance.<note>
+ <para>Certain Linux kernel releases have bugs that prevent
+ them from executing in a virtual environment; please see <xref
+ linkend="ts_linux-buggy" /> for details.</para>
+ </note></para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Solaris 10 (u6 and higher), Solaris 11 (including Solaris
+ 11 Express)</glossterm>
+
+ <glossdef>
+ <para>Fully supported (32 bits and 64 bits). Guest Additions are
+ available.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>FreeBSD</glossterm>
+
+ <glossdef>
+ <para>Requires hardware virtualization to be enabled. Limited
+ support. Guest Additions are not available yet.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>OpenBSD</glossterm>
+
+ <glossdef>
+ <para>Requires hardware virtualization to be enabled. Versions 3.7
+ and later are supported. Guest Additions are not available
+ yet.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>OS/2 Warp 4.5</glossterm>
+
+ <glossdef>
+ <para>Requires hardware virtualization to be enabled. We
+ officially support MCP2 only; other OS/2 versions may or may not
+ work. Guest Additions are available with a limited feature
+ set.<footnote>
+ <para>See <xref linkend="KnownIssues" />.</para>
+ </footnote></para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Mac OS X</glossterm>
+
+ <glossdef>
+ <para>VirtualBox 3.2 added experimental support for Mac OS X
+ guests, but this comes with restrictions. Please see the following
+ section as well as <xref linkend="KnownIssues" />.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+
+ <sect2 id="intro-macosxguests">
+ <title>Mac OS X guests</title>
+
+ <para>Starting with version 3.2, VirtualBox has experimental support for
+ Mac OS X guests. This allows you to install and execute unmodified
+ versions of Mac OS X on supported host hardware.</para>
+
+ <para>Whereas competing solutions perform modifications to the Mac OS X
+ install DVDs (e.g. different boot loader and replaced files), VirtualBox
+ is the first product to provide the modern PC architecture expected by
+ OS X without requiring any "hacks".</para>
+
+ <para>You should be aware of a number of <emphasis role="bold">important
+ issues</emphasis> before attempting to install a Mac OS X guest:<orderedlist>
+ <listitem>
+ <para>Mac OS X is commercial, licensed software and contains
+ <emphasis role="bold">both license and technical restrictions</emphasis>
+ that limit its use to certain hardware and usage scenarios. It is
+ important that you understand and obey these restrictions.</para>
+
+ <para>In particular, for most versions of Mac OS X, Apple prohibits
+ installing them on non-Apple hardware.</para>
+
+ <para>These license restrictions are also enforced on a technical
+ level. Mac OS X verifies whether it is running on Apple hardware,
+ and most DVDs that that come with Apple hardware even check for an
+ exact model. These restrictions are <emphasis>not</emphasis>
+ circumvented by VirtualBox and continue to apply.</para>
+ </listitem>
+
+ <listitem>
+ <para>Only <emphasis role="bold">CPUs</emphasis> known and tested
+ by Apple are supported. As a result, if your Intel CPU is newer
+ than the build of Mac OS X, or if you have a non-Intel CPU, it will
+ most likely panic during bootup with an "Unsupported CPU"
+ exception. It is generally best to use the Mac OS X DVD that came
+ with your Apple hardware.</para>
+ </listitem>
+
+ <listitem>
+ <para>The Mac OS X installer expects the harddisk to be
+ <emphasis role="bold">partitioned</emphasis> so when it does not
+ offer a selection, you have to launch the Disk Utility from the
+ "Tools" menu and partition the hard disk. Then close the Disk
+ Utility and proceed with the installation.</para>
+ </listitem>
+
+ <listitem>
+ <para>In addition, as Mac OS X support in VirtualBox is currently
+ still experimental, please refer also to <xref linkend="KnownIssues" />.</para>
+ </listitem>
+ </orderedlist></para>
+ </sect2>
+
+ <sect2 id="intro-64bitguests">
+ <title>64-bit guests</title>
+
+ <para>VirtualBox supports 64-bit guest operating systems, even on 32-bit
+ host operating systems,<footnote>
+ <para>64-bit guest support was added with VirtualBox 2.0; support
+ for 64-bit guests on 32-bit hosts was added with VirtualBox
+ 2.1.</para>
+ </footnote> provided that the following conditions are
+ met:<orderedlist>
+ <listitem>
+ <para>You need a 64-bit processor with hardware virtualization
+ support (see <xref linkend="hwvirt" />).</para>
+ </listitem>
+
+ <listitem>
+ <para>You must enable hardware virtualization for the particular
+ VM for which you want 64-bit support; software virtualization is
+ not supported for 64-bit VMs.</para>
+ </listitem>
+
+ <listitem>
+ <para>If you want to use 64-bit guest support on a 32-bit host
+ operating system, you must also select a 64-bit operating system
+ for the particular VM. Since supporting 64 bits on 32-bit hosts
+ incurs additional overhead, VirtualBox only enables this support
+ upon explicit request.</para>
+
+ <para>On 64-bit hosts (which typically come with hardware
+ virtualization support), 64-bit guest operating systems are always
+ supported regardless of settings, so you can simply install a
+ 64-bit operating system in the guest.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para><warning>
+ <para>On any host, you should enable the <emphasis role="bold">I/O
+ APIC</emphasis> for virtual machines that you intend to use in
+ 64-bit mode. This is especially true for 64-bit Windows VMs. See
+ <xref linkend="settings-general-advanced" />. In addition, for
+ 64-bit Windows guests, you should make sure that the VM uses the
+ <emphasis role="bold">Intel networking device</emphasis>, since
+ there is no 64-bit driver support for the AMD PCNet card; see <xref
+ linkend="nichardware" />.</para>
+ </warning></para>
+
+ <para>If you use the "Create VM" wizard of the VirtualBox graphical user
+ interface (see <xref linkend="gui-createvm" />), VirtualBox will
+ automatically use the correct settings for each selected 64-bit
+ operating system type.</para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Emulated hardware</title>
+
+ <para>VirtualBox virtualizes nearly all hardware of the host. Depending on
+ a VM's configuration, the guest will see the following virtual
+ hardware:<itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">Input devices.</emphasis> By default,
+ VirtualBox emulates a standard PS/2 keyboard and mouse. These
+ devices are supported by almost all past and present operating
+ systems.</para>
+
+ <para>In addition, VirtualBox can provide virtual USB input devices
+ to avoid having to capture mouse and keyboard, as described in <xref
+ linkend="keyb_mouse_normal" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Graphics.</emphasis> The VirtualBox
+ graphics device (sometimes referred to as VGA device) is, unlike
+ nearly all other emulated devices, not based on any physical
+ counterpart. It is a simple, synthetic device which provides
+ compatibility with standard VGA and several extended registers used
+ by the VESA BIOS Extensions (VBE).</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Storage.</emphasis> VirtualBox currently
+ emulates the standard ATA interface found on Intel PIIX3/PIIX4
+ chips, the SATA (AHCI) interface, and two SCSI adapters (LSI Logic
+ and BusLogic); see <xref linkend="harddiskcontrollers" /> for
+ details. Whereas providing one of these would be enough for
+ VirtualBox by itself, this multitude of storage adapters is required
+ for compatibility with other hypervisors. Windows is particularly
+ picky about its boot devices, and migrating VMs between hypervisors
+ is very difficult or impossible if the storage controllers are
+ different.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Networking.</emphasis> See <xref
+ linkend="nichardware" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">USB.</emphasis> VirtualBox emulates two
+ USB host controllers, EHCI and OHCI. There is a need for two host
+ controllers because OHCI only handles USB low- and full-speed
+ devices (both USB 1.x and 2.0), while EHCI only handles high-speed
+ devices (USB 2.0 only). The emulated USB controllers do not
+ communicate directly with devices on the host but rather with a
+ virtual USB layer which abstracts the USB protocol and allows the
+ use of remote USB devices.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Audio.</emphasis> See <xref
+ linkend="settings-audio" />.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect1>
+
+ <sect1 id="generalsettings">
+ <title>General settings</title>
+
+ <para>In the Settings window, under "General", you can configure the most
+ fundamental aspects of the virtual machine such as memory and essential
+ hardware. There are three tabs, "Basic", "Advanced" and
+ "Description".</para>
+
+ <sect2>
+ <title>"Basic" tab</title>
+
+ <para>Under the "Basic" tab of the "General" settings category, you can
+ find these settings:</para>
+
+ <glosslist>
+ <glossentry>
+ <glossterm>Name</glossterm>
+
+ <glossdef>
+ <para>The name under which the VM is shown in the list of VMs in
+ the main window. Under this name, VirtualBox also saves the VM's
+ configuration files. By changing the name, VirtualBox renames
+ these files as well. As a result, you can only use characters
+ which are allowed in your host operating system's file
+ names.</para>
+
+ <para>Note that internally, VirtualBox uses unique identifiers
+ (UUIDs) to identify virtual machines. You can display these with
+ <computeroutput>VBoxManage</computeroutput>.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Operating system / version</glossterm>
+
+ <glossdef>
+ <para>The type of the guest operating system that is (or will be)
+ installed in the VM. This is the same setting that was specified
+ in the "New Virtual Machine" wizard, as described in <xref
+ linkend="gui-createvm" />.</para>
+
+ <para>Whereas the default settings of a newly created VM depend on
+ the selected operating system type, changing the type later has no
+ effect on VM settings; this value is then purely informational and
+ decorative.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist>
+ </sect2>
+
+ <sect2 id="settings-general-advanced">
+ <title>"Advanced" tab</title>
+
+ <para><glosslist>
+ <glossentry>
+ <glossterm>Snapshot folder</glossterm>
+
+ <glossdef>
+ <para>By default, VirtualBox saves snapshot data together with
+ your other VirtualBox configuration data; see <xref
+ linkend="vboxconfigdata" />. With this setting, you can specify
+ any other folder for each VM.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Shared clipboard</glossterm>
+
+ <glossdef>
+ <para>You can select here whether the clipboard of the guest
+ operating system should be shared with that of your host. If you
+ select "Bidirectional", then VirtualBox will always make sure
+ that both clipboards contain the same data. If you select "Host
+ to guest" or "Guest to host", then VirtualBox will only ever
+ copy clipboard data in one direction.</para>
+
+ <para>Clipboard sharing requires that the VirtualBox Guest
+ Additions be installed. As a result, this setting has no effect
+ otherwise; see <xref linkend="guestadditions" /> for
+ details.</para>
+
+ <para>The shared clipboard is disabled by default. See
+ <xref linkend="security_clipboard"/> for an explanation. This
+ setting can be changed at any time using the "Shared Clipboard"
+ menu item in the "Devices" menu of the virtual machine.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Removable media: remember runtime changes</glossterm>
+
+ <glossdef>
+ <para>If this is checked, VirtualBox will save the state of what
+ media has been mounted between several runs of a virtual
+ machine.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Mini toolbar</glossterm>
+
+ <glossdef>
+ <para>In full screen or seamless mode, VirtualBox can display a
+ small toolbar that contains some of the items that are normally
+ available from the virtual machine's menu bar. This toolbar
+ reduces itself to a small gray line unless you move the mouse
+ over it. With the toolbar, you can return from full screen or
+ seamless mode, control machine execution or enable certain
+ devices. If you don't want to see the toolbar, disable this
+ setting.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+ </sect2>
+
+ <sect2>
+ <title>"Description" tab</title>
+
+ <para>Here you can enter any description for your virtual machine, if
+ you want. This has no effect on the functionality of the machine, but
+ you may find this space useful to note down things like the
+ configuration of a virtual machine and the software that has been
+ installed into it.</para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="settings-system">
+ <title>System settings</title>
+
+ <para>The "System" category groups various settings that are related to
+ the basic hardware that is presented to the virtual machine.<note>
+ <para>As the activation mechanism of Microsoft Windows is sensitive to
+ hardware changes, if you are changing hardware settings for a Windows
+ guest, some of these changes may trigger a request for another
+ activation with Microsoft.</para>
+ </note></para>
+
+ <sect2 id="settings-motherboard">
+ <title>"Motherboard" tab</title>
+
+ <para>On the "Motherboard" tab, you can influence virtual hardware that
+ would normally be on the motherboard of a real computer.<glosslist>
+ <glossentry>
+ <glossterm>Base memory</glossterm>
+
+ <glossdef>
+ <para>This sets the amount of RAM that is allocated and given to
+ the VM when it is running. The specified amount of memory will
+ be requested from the host operating system, so it must be
+ available or made available as free memory on the host when
+ attempting to start the VM and will not be available to the host
+ while the VM is running. This is the same setting that was
+ specified in the "New Virtual Machine" wizard, as described with
+ guidelines under <xref linkend="gui-createvm" /> above.</para>
+
+ <para>Generally, it is possible to change the memory size after
+ installing the guest operating system (provided you do not
+ reduce the memory to an amount where the operating system would
+ no longer boot).</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Boot order</glossterm>
+
+ <glossdef>
+ <para>This setting determines the order in which the guest
+ operating system will attempt to boot from the various virtual
+ boot devices. Analogous to a real PC's BIOS setting, VirtualBox
+ can tell a guest OS to start from the virtual floppy, the
+ virtual CD/DVD drive, the virtual hard drive (each of these as
+ defined by the other VM settings), the network, or none of
+ these.</para>
+
+ <para>If you select "Network", the VM will attempt to boot from
+ a network via the PXE mechanism. This needs to be configured in
+ detail on the command line; please see <xref
+ linkend="vboxmanage-modifyvm" />.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Chipset</glossterm>
+
+ <glossdef>
+ <para>Here you can select which chipset will be presented to the
+ virtual machine. Before VirtualBox 4.0, PIIX3 was the only
+ available option here. For modern guest operating systems such
+ as Mac OS X, that old chipset is no longer well supported. As a
+ result, VirtualBox 4.0 introduced an emulation of the more
+ modern ICH9 chipset, which supports PCI express, three PCI
+ buses, PCI-to-PCI bridges and Message Signalled Interrupts
+ (MSI). This allows modern operating systems to address more PCI
+ devices and no longer requires IRQ sharing. Note that the ICH9
+ support is experimental and not recommended for guest operating
+ systems which do not require it.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Enable I/O APIC</glossterm>
+
+ <glossdef>
+ <para>Advanced Programmable Interrupt Controllers (APICs) are a
+ newer x86 hardware feature that have replaced old-style
+ Programmable Interrupt Controllers (PICs) in recent years. With
+ an I/O APIC, operating systems can use more than 16 interrupt
+ requests (IRQs) and therefore avoid IRQ sharing for improved
+ reliability.<note>
+ <para>Enabling the I/O APIC is <emphasis>required</emphasis>
+ for 64-bit guest operating systems, especially Windows
+ Vista; it is also required if you want to use more than one
+ virtual CPU in a virtual machine.</para>
+ </note></para>
+
+ <para>However, software support for I/O APICs has been
+ unreliable with some operating systems other than Windows. Also,
+ the use of an I/O APIC slightly increases the overhead of
+ virtualization and therefore slows down the guest OS a
+ little.<warning>
+ <para>All Windows operating systems starting with Windows
+ 2000 install different kernels depending on whether an I/O
+ APIC is available. As with ACPI, the I/O APIC therefore
+ <emphasis>must not be turned off after
+ installation</emphasis> of a Windows guest OS. Turning it on
+ after installation will have no effect however.</para>
+ </warning></para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Enable EFI</glossterm>
+
+ <glossdef>
+ <para>This enables Extensible Firmware Interface (EFI), which
+ replaces the legacy BIOS and may be useful for certain
+ advanced use cases. Please refer to <xref linkend="efi" /> for
+ details.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Hardware clock in UTC time</glossterm>
+
+ <glossdef>
+ <para>If checked, VirtualBox will report the system time in UTC
+ format to the guest instead of local (host) time. This affects
+ how the virtual real-time clock (RTC) operates and may be useful
+ for Unix-like guest operating systems, which typically expect
+ the hardware clock to be set to UTC.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Enable absolute pointing device</glossterm>
+
+ <glossdef>
+ <para>If enabled, VirtualBox reports to the virtual machine that
+ a USB tablet device is present and communicates mouse events to
+ the virtual machine through this device. If disabled, mouse
+ events are communicated through a traditional PS/2 virtual mouse
+ device.</para>
+
+ <para>Using the virtual USB tablet has the advantage that
+ movements are reported in absolute coordinates (instead of as
+ relative position changes), which allows VirtualBox to translate
+ mouse events over the VM window into tablet events without
+ having to "capture" the mouse in the guest as described in <xref
+ linkend="keyb_mouse_normal" />. This makes using the VM less
+ tedious even if Guest Additions are not installed.<footnote>
+ <para>The virtual USB tablet was added with VirtualBox 3.2.
+ Depending on the guest operating system selected, this is
+ now enabled by default for new virtual machines.</para>
+ </footnote></para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+
+ <para>In addition, you can turn off the <emphasis role="bold">Advanced
+ Configuration and Power Interface (ACPI)</emphasis> which VirtualBox
+ presents to the guest operating system by default. ACPI is the current
+ industry standard to allow operating systems to recognize hardware,
+ configure motherboards and other devices and manage power. As all modern
+ PCs contain this feature and Windows and Linux have been supporting it
+ for years, it is also enabled by default in VirtualBox. It can only be
+ turned off on the command line; see <xref
+ linkend="vboxmanage-modifyvm" />.<warning>
+ <para>All Windows operating systems starting with Windows 2000
+ install different kernels depending on whether ACPI is available, so
+ ACPI <emphasis>must not be turned off</emphasis> after installation
+ of a Windows guest OS. Turning it on after installation will have no
+ effect however.</para>
+ </warning></para>
+ </sect2>
+
+ <sect2 id="settings-processor">
+ <title>"Processor" tab</title>
+
+ <para>On the "Processor" tab, you can set how many virtual <emphasis
+ role="bold">CPU cores</emphasis> the guest operating systems should see.
+ Starting with version 3.0, VirtualBox supports symmetrical
+ multiprocessing (SMP) and can present up to 32 virtual CPU cores to each
+ virtual machine.</para>
+
+ <para>You should not, however, configure virtual machines to use more
+ CPU cores than you have available physically.</para>
+
+ <para>On this tab you can also set the CPU execution cap. This setting
+ limits the amount of time a host CPU spents to emulate a virtual CPU.
+ The default setting is 100% meaning that there is no limitation. A setting
+ of 50% implies a single virtual CPU can use up to 50% of a single host
+ CPU. Notet that limiting the execution time of the virtual CPUs may induce
+ guest timing problems.</para>
+
+ <para>In addition, the <emphasis role="bold">"Enable PAE/NX"</emphasis>
+ setting determines whether the PAE and NX capabilities of the host CPU
+ will be exposed to the virtual machine. PAE stands for "Physical Address
+ Extension". Normally, if enabled and supported by the operating system,
+ then even a 32-bit x86 CPU can access more than 4 GB of RAM. This is
+ made possible by adding another 4 bits to memory addresses, so that with
+ 36 bits, up to 64 GB can be addressed. Some operating systems (such as
+ Ubuntu Server) require PAE support from the CPU and cannot be run in a
+ virtual machine without it.</para>
+
+ <para>With virtual machines running modern server operating systems,
+ VirtualBox also supports CPU hot-plugging. For details about this,
+ please refer to <xref linkend="cpuhotplug" />.</para>
+ </sect2>
+
+ <sect2>
+ <title>"Acceleration" tab</title>
+
+ <para>On this page, you can determine whether and how VirtualBox should
+ use hardware virtualization extensions that your host CPU may support.
+ This is the case with most CPUs built after 2006.</para>
+
+ <para>You can select for each virtual machine individually whether
+ VirtualBox should use software or hardware virtualization.<footnote>
+ <para>Prior to VirtualBox version 2.2, software virtualization was
+ the default; starting with version 2.2, VirtualBox will enable
+ hardware virtualization by default for new virtual machines that you
+ create. (Existing virtual machines are not automatically changed for
+ compatibility reasons, and the default can of course be changed for
+ each virtual machine.)</para>
+ </footnote></para>
+
+ <para>In most cases, the default settings will be fine; VirtualBox will
+ have picked sensible defaults depending on the operating system that you
+ selected when you created the virtual machine. In certain situations,
+ however, you may want to change these preconfigured defaults.</para>
+
+ <para>Advanced users may be interested in technical details about
+ software vs. hardware virtualization; please see <xref
+ linkend="hwvirt" />.</para>
+
+ <para>If your host's CPU supports the <emphasis role="bold">nested
+ paging</emphasis> (AMD-V) or <emphasis role="bold">EPT</emphasis> (Intel
+ VT-x) features, then you can expect a significant performance increase
+ by enabling nested paging in addition to hardware virtualization. For
+ technical details, see <xref linkend="nestedpaging" />.</para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="settings-display">
+ <title>Display settings</title>
+
+ <glosslist>
+ <glossentry>
+ <glossterm>Video memory size</glossterm>
+
+ <glossdef>
+ <para>This sets the size of the memory provided by the virtual
+ graphics card available to the guest, in MB. As with the main
+ memory, the specified amount will be allocated from the host's
+ resident memory. Based on the amount of video memory, higher
+ resolutions and color depths may be available.</para>
+ <para>The GUI will show a warning if the amount of video memory
+ is too small to be able to switch the VM into full screen mode.
+ The minimum value depends on the number of virtual monitors, the
+ screen resolution and the color depth of the host display as well
+ as of the activation of <emphasis>3D acceleration</emphasis> and
+ <emphasis>2D video acceleration</emphasis>. A rough estimate
+ is (<emphasis>color depth</emphasis> / 8) x
+ <emphasis>vertical pixels</emphasis> x
+ <emphasis>horizontal pixels</emphasis> x
+ <emphasis>number of screens</emphasis> = <emphasis>number of bytes</emphasis>.
+ Like said above, there might be extra memory required for any
+ activated display acceleration setting.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Monitor count</glossterm>
+
+ <glossdef>
+ <para>With this setting VirtualBox can provide more than one virtual
+ monitor to a virtual machine. If a guest operating system (such as
+ Windows) supports multiple attached monitors, VirtualBox can pretend
+ that multiple virtual monitors are present.<footnote>
+ <para>Multiple monitor support was added with VirtualBox
+ 3.2.</para>
+ </footnote> Up to 8 such virtual monitors are supported.</para>
+
+ <para>The output of the multiple monitors will be displayed on the
+ host in multiple VM windows which are running side by side.</para>
+
+ <para>However, in full screen and seamless mode, they will use the
+ available physical monitors attached to the host. As a result, for
+ full screen and seamless modes to work with multiple monitors, you
+ will need at least as many physical monitors as you have virtual
+ monitors configured, or VirtualBox will report an error. You can
+ configure the relationship between guest and host monitors using the
+ view menu by pressing Host key + Home when you are in full screen or
+ seamless mode.</para>
+
+ <para>Please see <xref linkend="KnownIssues" /> also.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Enable 3D acceleration</glossterm>
+
+ <glossdef>
+ <para>If a virtual machine has Guest Additions installed, you can
+ select here whether the guest should support accelerated 3D
+ graphics. Please refer to <xref linkend="guestadd-3d" /> for
+ details.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Enable 2D video acceleration</glossterm>
+
+ <glossdef>
+ <para>If a virtual machine with Microsoft Windows has Guest
+ Additions installed, you can select here whether the guest should
+ support accelerated 2D video graphics. Please refer to <xref
+ linkend="guestadd-2d" /> for details.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Remote display</glossterm>
+
+ <glossdef>
+ <para>Under the "Remote display" tab, if the VirtualBox Remote
+ Display Extension (VRDE) is installed, you can enable the VRDP server
+ that is built into VirtualBox. This allows you to connect to the
+ console of the virtual machine remotely with any standard RDP viewer,
+ such as <computeroutput>mstsc.exe</computeroutput> that comes with
+ Microsoft Windows. On Linux and Solaris systems you can use the
+ standard open-source <computeroutput>rdesktop</computeroutput>
+ program. These features are described in detail in
+ <xref linkend="vrde" />.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist>
+ </sect1>
+
+ <sect1 id="settings-storage">
+ <title>Storage settings</title>
+
+ <para>The "Storage" category in the VM settings allows you to connect
+ virtual hard disk, CD/DVD and floppy images and drives to your virtual
+ machine.</para>
+
+ <para>In a real PC, so-called "storage controllers" connect physical disk
+ drives to the rest of the computer. Similarly, VirtualBox presents virtual
+ storage controllers to a virtual machine. Under each controller, the
+ virtual devices (hard disks, CD/DVD or floppy drives) attached to the
+ controller are shown.<note>
+ <para>This section can only give you a quick introduction to the
+ VirtualBox storage settings. Since VirtualBox gives you an enormous
+ wealth of options in this area, we have dedicated an entire chapter of
+ this User Manual to explaining all the details: please see <xref
+ linkend="storage" />.</para>
+ </note></para>
+
+ <para>If you have used the "Create VM" wizard to create a machine, you
+ will normally see something like the following:</para>
+
+ <para><mediaobject>
+ <imageobject>
+ <imagedata align="center" fileref="images/vm-settings-harddisk.png"
+ width="10cm" />
+ </imageobject>
+ </mediaobject></para>
+
+ <para>Depending on the guest operating system type that you selected when
+ you created the VM, the typical layout of storage devices in a new VM is
+ as follows:<itemizedlist>
+ <listitem>
+ <para>You will see an <emphasis role="bold">IDE
+ controller,</emphasis> to which a virtual CD/DVD drive has been
+ attached (to the "secondary master" port of the IDE
+ controller).</para>
+ </listitem>
+
+ <listitem>
+ <para>You will also see a <emphasis role="bold">SATA
+ controller,</emphasis> which is a more modern type of storage
+ controller for higher hard disk data throughput, to which the
+ virtual hard disks are attached. Initially you will normally have
+ one such virtual disk, but as you can see in the above screenshot,
+ you can have more than one, each represented by a disk image file
+ (VDI files, in this case).</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>If you created your VM with an older version of VirtualBox, the
+ default storage layout may differ. You might then only have an IDE
+ controller to which both the CD/DVD drive and the hard disks have been
+ attached. This might also apply if you selected an older operating system
+ type when you created the VM. Since older operating systems do not support
+ SATA without additional drivers, VirtualBox will make sure that no such
+ devices are present initially. Please see <xref
+ linkend="harddiskcontrollers" /> for additional information.</para>
+
+ <para>VirtualBox also provides a <emphasis role="bold">floppy
+ controller</emphasis>, which is special: you cannot add devices other than
+ floppy drives to it. Virtual floppy drives, like virtual CD/DVD drives,
+ can be connected to either a host floppy drive (if you have one) or a disk
+ image, which in this case must be in RAW format.</para>
+
+ <para>You can modify these media attachments freely. For example, if you
+ wish to copy some files from another virtual disk that you created, you
+ can connect that disk as a second hard disk, as in the above screenshot.
+ You could also add a second virtual CD/DVD drive, or change where these
+ items are attached. The following options are available:<itemizedlist>
+ <listitem>
+ <para>To <emphasis role="bold">add another virtual hard disk, or a
+ CD/DVD or floppy drive,</emphasis> select the storage controller to
+ which it should be added (IDE, SATA, SCSI, SAS, floppy controller)
+ and then click on the "add disk" button below the tree. You can then
+ either select "Add CD/DVD device" or "Add Hard Disk". (If you
+ clicked on a floppy controller, you can add a floppy drive instead.)
+ Alternatively, right-click on the storage controller and select a
+ menu item there.</para>
+
+ <para>On the right part of the window, you can then set the
+ following:<orderedlist>
+ <listitem>
+ <para>You can then select to which <emphasis
+ role="bold">device slot</emphasis> of the controller the
+ virtual disk should be connected to. IDE controllers have four
+ slots which have traditionally been called "primary master",
+ "primary slave", "secondary master" and "secondary slave". By
+ contrast, SATA and SCSI controllers offer you up to 30 slots
+ to which virtual devices can be attached.</para>
+ </listitem>
+
+ <listitem>
+ <para>You can select which <emphasis role="bold">image
+ file</emphasis> to use.<itemizedlist>
+ <listitem>
+ <para>For virtual hard disks, a button with a drop-down
+ list appears on the right, offering you to either select
+ a <emphasis role="bold">virtual hard disk
+ file</emphasis> using a standard file dialog or to
+ <emphasis role="bold">create a new hard disk</emphasis>
+ (image file), which will bring up the "Create new disk"
+ wizard, which was described in <xref
+ linkend="gui-createvm" />.</para>
+
+ <para>For details on the image file types that are
+ supported, please see <xref
+ linkend="vdidetails" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>For virtual CD/DVD drives, the image files will
+ typically be in the standard ISO format instead. Most
+ commonly, you will select this option when installing an
+ operating system from an ISO file that you have obtained
+ from the Internet. For example, most Linux distributions
+ are available in this way.</para>
+
+ <para>For virtual CD/DVD drives, the following
+ additional options are available:</para>
+
+ <para><itemizedlist>
+ <listitem>
+ <para>If you select <emphasis role="bold">"Host
+ drive"</emphasis> from the list, then the physical
+ device of the host computer is connected to the VM,
+ so that the guest operating system can read from and
+ write to your physical device. This is, for
+ instance, useful if you want to install Windows from
+ a real installation CD. In this case, select your
+ host drive from the drop-down list presented.</para>
+
+ <para>If you want to write (burn) CDs or DVDs using
+ the host drive, you need to also enable the
+ <emphasis role="bold">"Passthrough"</emphasis>
+ option; see <xref linkend="storage-cds" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>If you select <emphasis role="bold">"Remove
+ disk from virtual drive",</emphasis> VirtualBox will
+ present an empty CD/DVD drive to the guest into
+ which no media has been inserted.</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+ </orderedlist></para>
+ </listitem>
+
+ <listitem>
+ <para>To <emphasis role="bold">remove an attachment,</emphasis>
+ select it and click on the "remove" icon at the bottom (or
+ right-click on it and select the menu item).</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>Removable media (CD/DVDs and floppies) can be changed while the
+ guest is running. Since the "Settings" dialog is not available at that
+ time, you can also access these settings from the "Devices" menu of your
+ virtual machine window.</para>
+ </sect1>
+
+ <sect1 id="settings-audio">
+ <title>Audio settings</title>
+
+ <para>The "Audio" section in a virtual machine's Settings window
+ determines whether the VM will see a sound card connected, and whether the
+ audio output should be heard on the host system.</para>
+
+ <para>If audio is enabled for a guest, you can choose between the
+ emulation of an Intel AC'97 controller, an Intel HD Audio
+ controller<footnote>
+ <para>Intel HD Audio support was added with VirtualBox 4.0 because
+ Windows 7 (32-bit and 64-bit versions) as well as 64-bit Windows Vista
+ do not support the Intel AC'97 controller.</para>
+ </footnote> or a SoundBlaster 16 card. In any case, you can select what
+ audio driver VirtualBox will use on the host.</para>
+
+ <para>On a Linux host, depending on your host configuration, you can also
+ select between the OSS, ALSA or the PulseAudio subsystem. On newer Linux
+ distributions (Fedora 8 and above, Ubuntu 8.04 and above) the PulseAudio
+ subsystem should be preferred.</para>
+ </sect1>
+
+ <sect1 id="settings-network">
+ <title>Network settings</title>
+
+ <para>The "Network" section in a virtual machine's Settings window allows
+ you to configure how VirtualBox presents virtual network cards to your VM,
+ and how they operate.</para>
+
+ <para>When you first create a virtual machine, VirtualBox by default
+ enables one virtual network card and selects the "Network Address
+ Translation" (NAT) mode for it. This way the guest can connect to the
+ outside world using the host's networking and the outside world can
+ connect to services on the guest which you choose to make visible outside
+ of the virtual machine.</para>
+
+ <para>This default setup is good for probably 95% of VirtualBox users.
+ However, VirtualBox is extremely flexible in how it can virtualize
+ networking. It supports many virtual network cards per virtual machine,
+ the first four of which can be configured in detail in the Manager window.
+ Additional network cards can be configured on the command line with
+ VBoxManage. </para>
+
+ <para>Because of the vast array of options available, we have dedicated an
+ entire chapter of this manual to discussing networking configuration;
+ please see <xref linkend="networkingdetails" />.</para>
+ </sect1>
+
+ <sect1 id="serialports">
+ <title>Serial ports</title>
+
+ <para>VirtualBox fully supports virtual serial ports in a virtual machine
+ in an easy-to-use manner.<footnote>
+ <para>Serial port support was added with VirtualBox 1.5.</para>
+ </footnote></para>
+
+ <para>Ever since the original IBM PC, personal computers have been
+ equipped with one or two serial ports (also called COM ports by DOS and
+ Windows). Serial ports were commonly used with modems, and some
+ computer mice used to be connected to serial ports before USB became
+ commonplace.
+ </para>
+
+ <para>While serial ports are no longer as ubiquitous as they used to be,
+ there are still some important uses left for them. For example, serial
+ ports can be used to set up a primitive network over a null-modem cable,
+ in case Ethernet is not available. Also, serial ports are indispensable
+ for system programmers needing to do kernel debugging, since kernel
+ debugging software usually interacts with developers over a serial port.
+ With virtual serial ports, system programmers can do kernel debugging on a
+ virtual machine instead of needing a real computer to connect to.</para>
+
+ <para>If a virtual serial port is enabled, the guest operating system sees
+ a standard 16550A compatible UART device. Both receiving and transmitting
+ data is supported. How this virtual serial port is then connected to the
+ host is configurable, and the details depend on your host operating system.
+ </para>
+
+ <para>You can use either the graphical user interface or the command-line
+ <computeroutput>VBoxManage</computeroutput> tool to set up virtual serial
+ ports. For the latter, please refer to <xref
+ linkend="vboxmanage-modifyvm" />; in that section, look for the
+ <computeroutput>--uart</computeroutput> and
+ <computeroutput>--uartmode</computeroutput> options.</para>
+
+ <para>In either case, you can configure up to two virtual serial ports per
+ virtual machine. For each such device, you will need to
+ determine<orderedlist>
+ <listitem>
+ <para>what kind of serial port the virtual machine should see by
+ selecting an I/O base address and interrupt (IRQ). For these, we
+ recommend to use the traditional values<footnote>
+ <para>See, for example, <ulink
+ url="http://en.wikipedia.org/wiki/COM_(hardware_interface)">http://en.wikipedia.org/wiki/COM_(hardware_interface)</ulink>.</para>
+ </footnote>, which are:</para>
+
+ <para><orderedlist>
+ <listitem>
+ <para>COM1: I/O base 0x3F8, IRQ 4</para>
+ </listitem>
+
+ <listitem>
+ <para>COM2: I/O base 0x2F8, IRQ 3</para>
+ </listitem>
+
+ <listitem>
+ <para>COM3: I/O base 0x3E8, IRQ 4</para>
+ </listitem>
+
+ <listitem>
+ <para>COM4: I/O base 0x2E8, IRQ 3</para>
+ </listitem>
+ </orderedlist></para>
+ </listitem>
+
+ <listitem>
+ <para>Then, you will need to determine what this virtual port should
+ be connected to. For each virtual serial port, you have the
+ following options:</para>
+
+ <para><itemizedlist>
+ <listitem>
+ <para>You can elect to have the virtual serial port
+ "disconnected", which means that the guest will see the
+ device, but it will behave as if no cable had been connected
+ to it.</para>
+ </listitem>
+
+ <listitem>
+ <para>You can connect the virtual serial port to a physical
+ serial port on your host. (On a Windows host, this will be a
+ name like <computeroutput>COM1</computeroutput>; on Linux or
+ Solaris hosts, it will be a device node like
+ <computeroutput>/dev/ttyS0</computeroutput>). VirtualBox will
+ then simply redirect all data received from and sent to the
+ virtual serial port to the physical device.</para>
+ </listitem>
+
+ <listitem>
+ <para>You can tell VirtualBox to connect the virtual serial
+ port to a software pipe on the host. This depends on your host
+ operating system:<itemizedlist>
+ <listitem>
+ <para>On a Windows host, data will be sent and received
+ through a named pipe. The pipe name must be in the format
+ <computeroutput>\\.\pipe\&lt;name&gt;</computeroutput>
+ where <computeroutput>&lt;name&gt;</computeroutput> should
+ identify the virtual machine but may be freely
+ chosen.</para>
+ <para>For forwarding serial traffic, you can use a helper
+ program called VMware Serial Line Gateway, available for
+ download at
+ <literal> <ulink
+ url="http://www.l4ka.org/91.php">http://www.l4ka.org/91.php</ulink>
+ </literal>. This tool provides a fixed server mode named
+ pipe at
+ <computeroutput>\\.\pipe\vmwaredebug</computeroutput>
+ and connects incoming TCP connections on port 567 with
+ the named pipe.</para>
+ </listitem>
+
+ <listitem>
+ <para>On a Mac, Linux or Solaris host, a local
+ domain socket is used instead. The socket filename must be
+ chosen such that the user running VirtualBox has
+ sufficient privileges to create and write to it. The
+ <computeroutput>/tmp</computeroutput> directory is often a
+ good candidate.</para>
+ <para>On Linux there are various tools which can connect
+ to a local domain socket or create one in server mode. The
+ most flexible tool is
+ <computeroutput>socat</computeroutput> and is available
+ as part of many distributions.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>In this case, you can configure whether VirtualBox
+ should create the named pipe (or, on non-Windows hosts, the
+ local domain socket) itself or whether VirtualBox should
+ assume that the pipe (or socket) exists already. With the
+ <computeroutput>VBoxManage</computeroutput> command-line
+ options, this is referred to as "server" or "client" mode,
+ respectively.</para>
+
+ <para>For a direct connection between two virtual machines
+ (corresponding to a null-modem cable), simply configure one VM
+ to create a pipe/socket and another to attach to it.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>You can send the virtual serial port output to a file.
+ This option is very useful for capturing diagnostic output from
+ a guest. Any file may be used for this purpose, as long as the
+ user running VirtualBox has sufficient privileges to create and
+ write to the file.
+ </para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+ </orderedlist>Up to two serial ports can be configured per virtual
+ machine, but you can pick any port numbers out of the above. However,
+ serial ports cannot reliably share interrupts; if both ports are to be
+ used at the same time, they must use different interrupt levels, for
+ example COM1 and COM2, but not COM1 and COM3.
+ </para>
+ </sect1>
+
+ <sect1>
+ <title>USB support</title>
+
+ <sect2 id="settings-usb">
+ <title>USB settings</title>
+
+ <para>The "USB" section in a virtual machine's Settings window allows
+ you to configure VirtualBox's sophisticated USB support.</para>
+
+ <para>VirtualBox can allow virtual machines to access the USB devices on
+ your host directly. To achieve this, VirtualBox presents the guest
+ operating system with a virtual USB controller. As soon as the guest
+ system starts using a USB device, it will appear as unavailable on the
+ host.<note>
+ <orderedlist>
+ <listitem>
+ <para>Be careful with USB devices that are currently in use on
+ the host! For example, if you allow your guest to connect to
+ your USB hard disk that is currently mounted on the host, when
+ the guest is activated, it will be disconnected from the host
+ without a proper shutdown. This may cause data loss.</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts have a few known limitations regarding USB
+ support; please see <xref linkend="KnownIssues" />.</para>
+ </listitem>
+ </orderedlist>
+ </note></para>
+
+ <para>In addition to allowing a guest access to your local USB devices,
+ VirtualBox even allows your guests to connect to remote USB devices by
+ use of the VirtualBox Remote Desktop Extension (VRDE). For details about
+ this, see <xref linkend="usb-over-rdp" />.</para>
+
+ <para>In the Settings dialog, you can first configure whether USB is
+ available in the guest at all, and in addition also optionally enable
+ the USB 2.0 (EHCI) controller for the guest. If so, you can determine in
+ detail which devices are available. For this, you must create so-called
+ "filters" by specifying certain properties of the USB device.<note>
+ <para>The EHCI controller is shipped as a VirtualBox extension
+ package, which must be installed separately. See <xref
+ linkend="intro-installing" /> for more information.</para>
+ </note></para>
+
+ <para>Clicking on the "+" button to the right of the "USB Device
+ Filters" window creates a <emphasis role="bold">new filter.</emphasis>
+ You can give the filter a name (for referencing it later) and specify
+ the filter criteria. The more criteria you specify, the more precisely
+ devices will be selected. For instance, if you specify only a vendor ID
+ of 046d, all devices produced by Logitech will be available to the
+ guest. If you fill in all fields, on the other hand, the filter will
+ only apply to a particular device model from a particular vendor, and
+ not even to other devices of the same type with a different revision and
+ serial number.</para>
+
+ <para>In detail, the following criteria are available:</para>
+
+ <orderedlist>
+ <listitem>
+ <para><emphasis role="bold">Vendor and product ID.</emphasis> With
+ USB, each vendor of USB products carries an identification number
+ that is unique world-wide, the "vendor ID". Similarly, each line of
+ products is assigned a "product ID" number. Both numbers are
+ commonly written in hexadecimal (that is, they are composed of the
+ numbers 0-9 and the letters A-F), and a colon separates the vendor
+ from the product ID. For example,
+ <computeroutput>046d:c016</computeroutput> stands for Logitech as a
+ vendor, and the "M-UV69a Optical Wheel Mouse" product.</para>
+
+ <para>Alternatively, you can also specify <emphasis
+ role="bold">"Manufacturer"</emphasis> and <emphasis
+ role="bold">"Product"</emphasis> by name.</para>
+
+ <para>To list all the USB devices that are connected to your host
+ machine with their respective vendor and product IDs, you can use
+ the following command (see <xref linkend="vboxmanage" />): <screen>VBoxManage list usbhost</screen></para>
+
+ <para>On Windows, you can also see all USB devices that are attached
+ to your system in the Device Manager. On Linux, you can use the
+ <computeroutput>lsusb</computeroutput> command.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Serial number.</emphasis> While vendor
+ and product ID are already quite specific to identify USB devices,
+ if you have two identical devices of the same brand and product
+ line, you will also need their serial numbers to filter them out
+ correctly.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Remote.</emphasis> This setting
+ specifies whether the device will be local only, or remote only
+ (over VRDP), or either.</para>
+ </listitem>
+ </orderedlist>
+
+ <para>On a Windows host, you will need to unplug and reconnect a USB
+ device to use it after creating a filter for it.</para>
+
+ <para>As an example, you could create a new USB filter and specify a
+ vendor ID of 046d (Logitech, Inc), a manufacturer index of 1, and "not
+ remote". Then any USB devices on the host system produced by Logitech,
+ Inc with a manufacturer index of 1 will be visible to the guest
+ system.</para>
+
+ <para>Several filters can select a single device -- for example, a
+ filter which selects all Logitech devices, and one which selects a
+ particular webcam.</para>
+
+ <para>You can <emphasis role="bold">deactivate</emphasis> filters
+ without deleting them by clicking in the checkbox next to the filter
+ name.</para>
+ </sect2>
+
+ <sect2>
+ <title>Implementation notes for Windows and Linux hosts</title>
+
+ <para>On Windows hosts, a kernel mode device driver provides USB proxy
+ support. It implements both a USB monitor, which allows VirtualBox to
+ capture devices when they are plugged in, and a USB device driver to
+ claim USB devices for a particular virtual machine. As opposed to
+ VirtualBox versions before 1.4.0, system reboots are no longer necessary
+ after installing the driver. Also, you no longer need to replug devices
+ for VirtualBox to claim them.</para>
+
+ <para>On newer Linux hosts, VirtualBox accesses USB devices through
+ special files in the file system. When VirtualBox is installed, these
+ are made available to all users in the
+ <computeroutput>vboxusers</computeroutput> system group. In order to be
+ able to access USB from guest systems, make sure that you are a member
+ of this group.</para>
+
+ <para>On older Linux hosts, USB devices are accessed using the
+ <computeroutput>usbfs</computeroutput> file system. Therefore, the user
+ executing VirtualBox needs read and write permission to the USB file
+ system. Most distributions provide a group (e.g.
+ <computeroutput>usbusers</computeroutput>) which the VirtualBox user
+ needs to be added to. Also, VirtualBox can only proxy to virtual
+ machines USB devices which are not claimed by a Linux host USB driver.
+ The <computeroutput>Driver=</computeroutput> entry in
+ <computeroutput>/proc/bus/usb/devices</computeroutput> will show you
+ which devices are currently claimed. Please refer to <xref
+ linkend="ts_usb-linux" /> also for details about
+ <computeroutput>usbfs</computeroutput>.</para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Shared folders</title>
+
+ <para>Shared folders allow you to easily exchange data between a virtual
+ machine and your host. This feature requires that the VirtualBox Guest
+ Additions be installed in a virtual machine and is described in detail in
+ <xref linkend="sharedfolders" />.</para>
+ </sect1>
+
+ <sect1 id="efi">
+ <title>Alternative firmware (EFI)</title>
+
+ <para>Starting with release 3.1, VirtualBox includes experimental support
+ for the Extensible Firmware Interface (EFI), which is a new industry
+ standard intended to eventually replace the legacy BIOS as the primary
+ interface for bootstrapping computers and certain system services
+ later.</para>
+
+ <para>By default, VirtualBox uses the BIOS firmware for virtual machines.
+ To use EFI for a given virtual machine, you can enable EFI in the
+ machine's "Settings" dialog (see <xref linkend="settings-motherboard" />).
+ Alternatively, use the <computeroutput>VBoxManage</computeroutput> command
+ line interface like this: <screen>VBoxManage modifyvm "VM name" --firmware efi</screen>
+ To switch back to using the BIOS, use: <screen>VBoxManage modifyvm "VM name" --firmware bios</screen>One
+ notable user of EFI is Apple's Mac OS X, but recent Linuxes (such as Fedora
+ 11) and Windows (starting with Vista) offer special versions that can be
+ booted using EFI as well.</para>
+
+ <para>Another possible use of EFI in VirtualBox is development and testing
+ of EFI applications, without booting any OS.</para>
+
+ <para>Note that the VirtualBox EFI support is experimental and will be
+ enhanced as EFI matures and becomes more widespread. While Mac OS X and
+ Linux guests are known to work fine, Windows guests are currently unable
+ to boot with the VirtualBox EFI implementation.</para>
+
+ <sect2 id="efividmode">
+ <title>Video modes in EFI</title>
+
+ <para>EFI provides two distinct video interfaces: GOP (Graphics Output
+ Protocol) and UGA (Universal Graphics Adapter). Mac OS X uses GOP, while
+ Linux tends to use UGA. VirtualBox provides a configuration option to
+ control the framebuffer size for both interfaces.</para>
+
+ <para>To control GOP, use the following
+ <computeroutput>VBoxManage</computeroutput> command: <screen>VBoxManage setextradata "VM name" VBoxInternal2/EfiGopMode N</screen>
+ Where N can be one of 0,1,2,3,4 referring to the 640x480, 800x600,
+ 1024x768, 1280x1024, 1440x900 screen resolution respectively.</para>
+
+ <para>To change the UGA resolution: <screen>VBoxManage setextradata "VM name" VBoxInternal2/UgaHorizontalResolution 1440
+VBoxManage setextradata "VM name" VBoxInternal2/UgaVerticalResolution 900</screen></para>
+
+ <para>The video mode for both GOP and UGA can only be changed when the
+ VM is powered off and remains persistent until changed.</para>
+ </sect2>
+ </sect1>
+</chapter>
diff --git a/doc/manual/en_US/user_ChangeLog.xml b/doc/manual/en_US/user_ChangeLog.xml
new file mode 100644
index 00000000..71fd731d
--- /dev/null
+++ b/doc/manual/en_US/user_ChangeLog.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+ "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<chapter id="ChangeLog">
+ <title>Change log</title>
+
+ <para>This section summarizes the changes between VirtualBox versions. Note
+ that this change log is not exhaustive; not all changes are listed.</para>
+
+ <para>VirtualBox version numbers consist of three numbers separated by dots
+ where the first and second number represent the major version and the 3rd number
+ the minor version. Minor version numbers of official releases are always even.
+ An odd minor version number represents an internal development or test build.
+ In addition, each build contains a revision number.</para>
+
+<!--$VIRTUALBOX_CHANGELOG_IMPL-->
+
+ <para>With VirtualBox 3.2, changelog information for versions before 2.0 was removed in
+ order to save space. To access this information, please consult the User Manual of
+ VirtualBox version 3.1 or earlier.</para>
+
+</chapter>
diff --git a/doc/manual/en_US/user_Frontends.xml b/doc/manual/en_US/user_Frontends.xml
new file mode 100644
index 00000000..ffecc955
--- /dev/null
+++ b/doc/manual/en_US/user_Frontends.xml
@@ -0,0 +1,799 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<chapter>
+ <title>Remote virtual machines</title>
+
+ <sect1>
+ <title id="vrde">Remote display (VRDP support)</title>
+
+ <para>VirtualBox can display virtual machines remotely, meaning that a
+ virtual machine can execute on one machine even though the machine will be
+ displayed on a second computer, and the machine will be controlled from
+ there as well, as if the virtual machine was running on that second
+ computer.</para>
+
+ <para>For maximum flexibility, starting with VirtualBox 4.0, VirtualBox
+ implements remote machine display through a generic extension interface,
+ the VirtualBox Remote Desktop Extension (VRDE). The base open-source
+ VirtualBox package only provides this interface, while implementations can
+ be supplied by third parties with VirtualBox extension packages, which
+ must be installed separately from the base package. See <xref
+ linkend="intro-installing" /> for more information.</para>
+
+ <para>Oracle provides support for the <emphasis role="bold">VirtualBox
+ Remote Display Protocol (VRDP)</emphasis> in such a VirtualBox extension
+ package. When this package is installed, VirtualBox versions 4.0 and later
+ support VRDP the same way as binary (non-open-source) versions of
+ VirtualBox before 4.0 did.</para>
+
+ <para>VRDP is a backwards-compatible extension to Microsoft's Remote
+ Desktop Protocol (RDP). Typically graphics updates and audio are sent from
+ the remote machine to the client, while keyboard and mouse events are sent
+ back. As a result, you can use any standard RDP client to control the
+ remote VM.</para>
+
+ <para>Even when the extension is installed, the VRDP server is disabled by
+ default. It can easily be enabled on a per-VM basis either in the
+ VirtualBox Manager in the "Display" settings (see <xref
+ linkend="settings-display" />) or with
+ <computeroutput>VBoxManage</computeroutput>:<screen>VBoxManage modifyvm "VM name" --vrde on</screen></para>
+
+ <para>If you use <computeroutput>VBoxHeadless</computeroutput> (described
+ further below), VRDP support will be automatically enabled since
+ VBoxHeadless has no other means of output.</para>
+
+ <sect2 id="rdp-viewers">
+ <title>Common third-party RDP viewers</title>
+
+ <para>Since VRDP is backwards-compatible to RDP, you can use any
+ standard RDP viewer to connect to such a remote virtual machine
+ (examples follow below). For this to work, you must specify the
+ <emphasis role="bold">IP address</emphasis> of your
+ <emphasis>host</emphasis> system (not of the virtual machine!) as the
+ server address to connect to, as well as the <emphasis role="bold">port
+ number</emphasis> that the RDP server is using.</para>
+
+ <para>By default, VRDP uses TCP port
+ <computeroutput>3389</computeroutput>. You will need to change the
+ default port if you run more than one VRDP server, since the port can
+ only be used by one server at a time; you might also need to change it
+ on Windows hosts since the default port might already be used by the RDP
+ server that is built into Windows itself. Ports 5000 through 5050 are
+ typically not used and might be a good choice.</para>
+
+ <para>The port can be changed either in the "Display" settings of the
+ graphical user interface or with
+ <computeroutput>--vrdeport</computeroutput> option of the
+ <computeroutput>VBoxManage modifyvm</computeroutput> command. You can
+ specify a comma-separated list of ports or ranges of ports. Use a dash
+ between two port numbers to specify a range. The VRDP server will bind
+ to <emphasis role="bold">one</emphasis> of available ports from the
+ specified list. For example, <computeroutput>VBoxManage modifyvm "VM
+ name" --vrdeport 5000,5010-5012</computeroutput> will configure the
+ server to bind to one of the ports 5000, 5010, 5011 or 5012. See <xref
+ linkend="vboxmanage-modifyvm" /> for details.</para>
+
+ <para>The actual port used by a running VM can be either queried with
+ <computeroutput>VBoxManage showvminfo</computeroutput> command or seen
+ in the GUI on the "Runtime" tab of the "Session Information Dialog",
+ which is accessible via the "Machine" menu of the VM window.</para>
+
+ <para>Here follow examples for the most common RDP viewers:<itemizedlist>
+ <listitem>
+ <para>On Windows, you can use the Microsoft Terminal Services
+ Connector (<computeroutput>mstsc.exe</computeroutput>) that ships
+ with Windows. You can start it by bringing up the "Run" dialog
+ (press the Windows key and "R") and typing "mstsc". You can also
+ find it under "Start" -&gt; "All Programs" -&gt; "Accessories"
+ -&gt; "Remote Desktop Connection". If you use the "Run" dialog,
+ you can type in options directly:<screen>mstsc 1.2.3.4[:3389]</screen></para>
+
+ <para>Replace "1.2.3.4" with the host IP address, and 3389 with a
+ different port if necessary.</para>
+
+ <note>
+ <para>When connecting to localhost in order to test the
+ connection, the addresses
+ <computeroutput>localhost</computeroutput> and
+ <computeroutput>127.0.0.1</computeroutput> might not work using
+ <computeroutput>mstsc.exe</computeroutput>. Instead, the address
+ <computeroutput>127.0.0.2[:3389]</computeroutput> has to be
+ used.</para>
+ </note>
+ </listitem>
+
+ <listitem>
+ <para>On other systems, you can use the standard open-source
+ <computeroutput>rdesktop</computeroutput> program. This ships with
+ most Linux distributions, but VirtualBox also comes with a
+ modified variant of rdesktop for remote USB support (see <xref
+ linkend="usb-over-rdp" /> below).</para>
+
+ <para>With rdesktop, use a command line such as the
+ following:<screen>rdesktop -a 16 -N 1.2.3.4:3389</screen></para>
+
+ <para>As said for the Microsoft viewer above, replace "1.2.3.4"
+ with the host IP address, and 3389 with a different port if
+ necessary. The <computeroutput>-a 16</computeroutput> option
+ requests a color depth of 16 bits per pixel, which we recommend.
+ (For best performance, after installation of the guest operating
+ system, you should set its display color depth to the same value).
+ The <computeroutput>-N</computeroutput> option enables use of the
+ NumPad keys.</para>
+ </listitem>
+
+ <listitem>
+ <para>If you run the KDE desktop, you might prefer
+ <computeroutput>krdc</computeroutput>, the KDE RDP viewer. The
+ command line would look like this:<screen>krdc --window --high-quality rdp:/1.2.3.4[:3389]</screen></para>
+
+ <para>Again, replace "1.2.3.4" with the host IP address, and 3389
+ with a different port if necessary. The "rdp:/" bit is required
+ with krdc to switch it into RDP mode.</para>
+ </listitem>
+
+ <listitem>
+ <para>With Sun Ray thin clients you can use
+ <computeroutput>uttsc</computeroutput>, which is part of the
+ Sun Ray Windows Connector package. See the corresponding
+ documentation for details.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect2>
+
+ <sect2 id="vboxheadless">
+ <title>VBoxHeadless, the remote desktop server</title>
+
+ <para>While any VM started from the VirtualBox Manager is capable of
+ running virtual machines remotely, it is not convenient to have to run
+ the full-fledged GUI if you never want to have VMs displayed locally in
+ the first place. In particular, if you are running server hardware whose
+ only purpose is to host VMs, and all your VMs are supposed to run
+ remotely over VRDP, then it is pointless to have a graphical user
+ interface on the server at all -- especially since, on a Linux or
+ Solaris host, the VirtualBox manager comes with dependencies on the Qt
+ and SDL libraries. This is inconvenient if you would rather not have the
+ X Window system on your server at all.</para>
+
+ <para>VirtualBox therefore comes with yet another front-end called
+ <computeroutput>VBoxHeadless</computeroutput>, which produces no visible
+ output on the host at all, but instead only delivers VRDP data. This
+ front-end has no dependencies on the X Window system on Linux and
+ Solaris hosts.<footnote>
+ <para>Before VirtualBox 1.6, the headless server was called
+ <computeroutput>VBoxVRDP</computeroutput>. For the sake of backwards
+ compatibility, the VirtualBox installation still installs an
+ executable with that name as well.</para>
+ </footnote></para>
+
+ <para>To start a virtual machine with
+ <computeroutput>VBoxHeadless</computeroutput>, you have two
+ options:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>You can use <screen>VBoxManage startvm "VM name" --type headless</screen>The
+ extra <computeroutput>--type</computeroutput> option causes
+ VirtualBox to use <computeroutput>VBoxHeadless</computeroutput> as
+ the front-end to the internal virtualization engine instead of the
+ Qt front-end.</para>
+ </listitem>
+
+ <listitem>
+ <para>The alternative is to use
+ <computeroutput>VBoxHeadless</computeroutput> directly, as
+ follows:<screen>VBoxHeadless --startvm &lt;uuid|name&gt;</screen></para>
+
+ <para>This way of starting the VM helps troubleshooting problems
+ reported by <computeroutput>VBoxManage startvm ...</computeroutput>
+ because you can see sometimes more detailed error messages,
+ especially for early failures before the VM execution is started.
+ In normal situations <computeroutput>VBoxManage startvm</computeroutput>
+ is preferred since it runs the VM directly as a background process
+ which has to be done explicitly when directly starting
+ <computeroutput>VBoxHeadless</computeroutput>.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Note that when you use
+ <computeroutput>VBoxHeadless</computeroutput> to start a VM, since the
+ headless server has no other means of output, the VRDP server will
+ <emphasis>always</emphasis> be enabled, regardless of whether you had
+ enabled the VRDP server in the VM's settings. If this is undesirable
+ (for example because you want to access the VM via
+ <computeroutput>ssh</computeroutput> only), start the VM like
+ this:<screen>VBoxHeadless --startvm &lt;uuid|name&gt; --vrde off</screen>To
+ have the VRDP server enabled depending on the VM configuration, as the
+ other front-ends would, use this:<screen>VBoxHeadless --startvm &lt;uuid|name&gt; --vrde config</screen></para>
+
+ <para>If you start the VM with <computeroutput>VBoxManage startvm ...</computeroutput>
+ then the configuration settings of the VM are always used.</para>
+ </sect2>
+
+ <sect2>
+ <title>Step by step: creating a virtual machine on a headless
+ server</title>
+
+ <para>The following instructions may give you an idea how to create a
+ virtual machine on a headless server over a network connection. We will
+ create a virtual machine, establish an RDP connection and install a
+ guest operating system -- all without having to touch the headless
+ server. All you need is the following:</para>
+
+ <para><orderedlist>
+ <listitem>
+ <para>VirtualBox on a server machine with a supported host
+ operating system. The VirtualBox extension pack for the VRDP
+ server must be installed (see the previous section). For the
+ following example, we will assume a Linux server.</para>
+ </listitem>
+
+ <listitem>
+ <para>An ISO file accessible from the server, containing the
+ installation data for the guest operating system to install (we
+ will assume Windows XP in the following example).</para>
+ </listitem>
+
+ <listitem>
+ <para>A terminal connection to that host through which you can
+ access a command line (e.g. via
+ <computeroutput>ssh</computeroutput>).</para>
+ </listitem>
+
+ <listitem>
+ <para>An RDP viewer on the remote client; see <xref
+ linkend="rdp-viewers" /> above for examples.</para>
+ </listitem>
+ </orderedlist>Note again that on the server machine, since we will
+ only use the headless server, neither Qt nor SDL nor the X Window system
+ will be needed.</para>
+
+ <para><orderedlist>
+ <listitem>
+ <para>On the headless server, create a new virtual machine:</para>
+
+ <screen>VBoxManage createvm --name "Windows XP" --ostype WindowsXP --register</screen>
+
+ <para>Note that if you do not specify
+ <computeroutput>--register</computeroutput>, you will have to
+ manually use the <computeroutput>registervm</computeroutput>
+ command later.</para>
+
+ <para>Note further that you do not need to specify
+ <computeroutput>--ostype</computeroutput>, but doing so selects
+ some sane default values for certain VM parameters, for example
+ the RAM size and the type of the virtual network device. To get a
+ complete list of supported operating systems you can use</para>
+
+ <screen>VBoxManage list ostypes</screen>
+ </listitem>
+
+ <listitem>
+ <para>Make sure the settings for this VM are appropriate for the
+ guest operating system that we will install. For example:<screen>VBoxManage modifyvm "Windows XP" --memory 256 --acpi on --boot1 dvd --nic1 nat</screen></para>
+ </listitem>
+
+ <listitem>
+ <para>Create a virtual hard disk for the VM (in this case, 10GB in
+ size):<screen>VBoxManage createhd --filename "WinXP.vdi" --size 10000</screen></para>
+ </listitem>
+
+ <listitem>
+ <para>Add an IDE Controller to the new VM:<screen>VBoxManage storagectl "Windows XP" --name "IDE Controller"
+ --add ide --controller PIIX4</screen></para>
+ </listitem>
+
+ <listitem>
+ <para>Set the VDI file created above as the first virtual hard
+ disk of the new VM:<screen>VBoxManage storageattach "Windows XP" --storagectl "IDE Controller"
+ --port 0 --device 0 --type hdd --medium "WinXP.vdi"</screen></para>
+ </listitem>
+
+ <listitem>
+ <para>Attach the ISO file that contains the operating system
+ installation that you want to install later to the virtual
+ machine, so the machine can boot from it:<screen>VBoxManage storageattach "Windows XP" --storagectl "IDE Controller"
+ --port 0 --device 1 --type dvddrive --medium /full/path/to/iso.iso</screen></para>
+ </listitem>
+
+ <listitem>
+ <para>Start the virtual machine using VBoxHeadless:<screen>VBoxHeadless --startvm "Windows XP"</screen></para>
+
+ <para>If everything worked, you should see a copyright notice. If,
+ instead, you are returned to the command line, then something went
+ wrong.</para>
+ </listitem>
+
+ <listitem>
+ <para>On the client machine, fire up the RDP viewer and try to
+ connect to the server (see <xref linkend="rdp-viewers" /> above
+ for how to use various common RDP viewers).</para>
+
+ <para>You should now be seeing the installation routine of your
+ guest operating system remotely in the RDP viewer.</para>
+ </listitem>
+ </orderedlist></para>
+ </sect2>
+
+ <sect2 id="usb-over-rdp">
+ <title>Remote USB</title>
+
+ <para>As a special feature on top of the VRDP support, VirtualBox
+ supports remote USB devices over the wire as well. That is, the
+ VirtualBox guest that runs on one computer can access the USB devices of
+ the remote computer on which the VRDP data is being displayed the same
+ way as USB devices that are connected to the actual host. This allows
+ for running virtual machines on a VirtualBox host that acts as a server,
+ where a client can connect from elsewhere that needs only a network
+ adapter and a display capable of running an RDP viewer. When USB devices
+ are plugged into the client, the remote VirtualBox server can access
+ them.</para>
+
+ <para>For these remote USB devices, the same filter rules apply as for
+ other USB devices, as described with <xref linkend="settings-usb" />.
+ All you have to do is specify "Remote" (or "Any") when setting up these
+ rules.</para>
+
+ <para>Accessing remote USB devices is only possible if the RDP client
+ supports this extension. On Linux and Solaris hosts, the VirtualBox
+ installation provides a suitable VRDP client called
+ <computeroutput>rdesktop-vrdp</computeroutput>. Recent versions of
+ <computeroutput>uttsc</computeroutput>, a client tailored for the use
+ with Sun Ray thin clients, also support accessing remote USB devices.
+ RDP clients for other platforms will be provided in future VirtualBox
+ versions.</para>
+
+ <para>To make a remote USB device available to a VM,
+ <computeroutput>rdesktop-vrdp</computeroutput> should be started as
+ follows:<screen>rdesktop-vrdp -r usb -a 16 -N my.host.address</screen>Note
+ that <computeroutput>rdesktop-vrdp</computeroutput> can access USB
+ devices only through <computeroutput>/proc/bus/usb</computeroutput>.
+ Please refer to <xref linkend="ts_usb-linux" /> for further details on how
+ to properly set up the permissions. Furthermore it is advisable to
+ disable automatic loading of any host driver on the remote host which
+ might work on USB devices to ensure that the devices are accessible by
+ the RDP client. If the setup was properly done on the remote host,
+ plug/unplug events are visible on the VBox.log file of the VM.</para>
+ </sect2>
+
+ <sect2 id="vbox-auth">
+ <title>RDP authentication</title>
+
+ <para>For each virtual machine that is remotely accessible via RDP, you
+ can individually determine if and how client connections are
+ authenticated. For this, use <computeroutput>VBoxManage
+ modifyvm</computeroutput> command with the
+ <computeroutput>--vrdeauthtype</computeroutput> option; see <xref
+ linkend="vboxmanage-modifyvm" /> for a general introduction. Three
+ methods of authentication are available:<itemizedlist>
+ <listitem>
+ <para>The "null" method means that there is no authentication at
+ all; any client can connect to the VRDP server and thus the
+ virtual machine. This is, of course, very insecure and only to be
+ recommended for private networks.</para>
+ </listitem>
+
+ <listitem>
+ <para>The "external" method provides external authentication
+ through a special authentication library. VirtualBox ships with
+ two such authentication libraries:<orderedlist>
+ <listitem>
+ <para>The default authentication library,
+ <computeroutput>VBoxAuth</computeroutput>, authenticates
+ against user credentials of the hosts. Depending on the host
+ platform, this means:<itemizedlist>
+ <listitem>
+ <para>On Linux hosts,
+ <computeroutput>VBoxAuth.so</computeroutput>
+ authenticates users against the host's PAM
+ system.</para>
+ </listitem>
+
+ <listitem>
+ <para>On Windows hosts,
+ <computeroutput>VBoxAuth.dll</computeroutput>
+ authenticates users against the host's WinLogon
+ system.</para>
+ </listitem>
+
+ <listitem>
+ <para>On Mac OS X hosts,
+ <computeroutput>VBoxAuth.dylib</computeroutput>
+ authenticates users against the host's directory
+ service.<footnote>
+ <para>Support for Mac OS X was added in version
+ 3.2.</para>
+ </footnote></para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>In other words, the "external" method per default
+ performs authentication with the user accounts that exist on
+ the host system. Any user with valid authentication
+ credentials is accepted, i.e. the username does not have to
+ correspond to the user running the VM.</para>
+ </listitem>
+
+ <listitem>
+ <para>An additional library called
+ <computeroutput>VBoxAuthSimple</computeroutput> performs
+ authentication against credentials configured in the
+ "extradata" section of a virtual machine's XML settings
+ file. This is probably the simplest way to get
+ authentication that does not depend on a running and
+ supported guest (see below). The following steps are
+ required:<orderedlist>
+ <listitem>
+ <para>Enable
+ <computeroutput>VBoxAuthSimple</computeroutput> with
+ the following command:</para>
+
+ <para><screen>VBoxManage setproperty vrdeauthlibrary "VBoxAuthSimple"</screen></para>
+ </listitem>
+
+ <listitem>
+ <para>To enable the library for a particular VM, you
+ must then switch authentication to external:<screen>VBoxManage modifyvm &lt;vm&gt; --vrdeauthtype external</screen></para>
+
+ <para>Replace
+ <computeroutput>&lt;vm&gt;</computeroutput> with the
+ VM name or UUID.</para>
+ </listitem>
+
+ <listitem>
+ <para>You will then need to configure users and
+ passwords by writing items into the machine's
+ extradata. Since the XML machine settings file, into
+ whose "extradata" section the password needs to be
+ written, is a plain text file, VirtualBox uses hashes
+ to encrypt passwords. The following command must be
+ used:<screen>VBoxManage setextradata &lt;vm&gt; "VBoxAuthSimple/users/&lt;user&gt;" &lt;hash&gt;</screen></para>
+
+ <para>Replace
+ <computeroutput>&lt;vm&gt;</computeroutput> with the
+ VM name or UUID,
+ <computeroutput>&lt;user&gt;</computeroutput> with the
+ user name who should be allowed to log in and
+ <computeroutput>&lt;hash&gt;</computeroutput> with the
+ encrypted password. As an example, to obtain the hash
+ value for the password "secret", you can use the
+ following command:<screen>VBoxManage internalcommands passwordhash "secret"</screen></para>
+
+ <para>This will print
+ <screen>2bb80d537b1da3e38bd30361aa855686bde0eacd7162fef6a25fe97bf527a25b</screen>
+ You can then use VBoxManage setextradata to store this
+ value in the machine's "extradata" section.</para>
+
+ <para>As example, combined together, to set the
+ password for the user "john" and the machine "My VM"
+ to "secret", use this command:<screen>VBoxManage setextradata "My VM" "VBoxAuthSimple/users/john"
+ 2bb80d537b1da3e38bd30361aa855686bde0eacd7162fef6a25fe97bf527a25b</screen></para>
+ </listitem>
+ </orderedlist></para>
+ </listitem>
+ </orderedlist></para>
+ </listitem>
+
+ <listitem>
+ <para>Finally, the "guest" authentication method performs
+ authentication with a special component that comes with the Guest
+ Additions; as a result, authentication is not performed on the
+ host, but with the <emphasis>guest</emphasis> user
+ accounts.</para>
+
+ <para>This method is currently still in testing and not yet
+ supported.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>In addition to the methods described above, you can replace the
+ default "external" authentication module with any other module. For
+ this, VirtualBox provides a well-defined interface that allows you to
+ write your own authentication module. This is described in detail in the
+ VirtualBox Software Development Kit (SDK) reference; please see <xref
+ linkend="VirtualBoxAPI" /> for details.</para>
+ </sect2>
+
+ <sect2 id="vrde-crypt">
+ <title>RDP encryption</title>
+
+ <para>RDP features data stream encryption, which is based on the RC4
+ symmetric cipher (with keys up to 128bit). The RC4 keys are being
+ replaced in regular intervals (every 4096 packets).</para>
+
+ <para>RDP provides different authentication methods:<orderedlist>
+ <listitem>
+ <para>Historically, RDP4 authentication was used, with which the
+ RDP client does not perform any checks in order to verify the
+ identity of the server it connects to. Since user credentials can
+ be obtained using a "man in the middle" (MITM) attack, RDP4
+ authentication is insecure and should generally not be
+ used.</para>
+ </listitem>
+
+ <listitem>
+ <para>RDP5.1 authentication employs a server certificate for which
+ the client possesses the public key. This way it is guaranteed
+ that the server possess the corresponding private key. However, as
+ this hard-coded private key became public some years ago, RDP5.1
+ authentication is also insecure.</para>
+ </listitem>
+
+ <listitem>
+ <para>RDP5.2 authentication uses the Enhanced RDP Security, which
+ means that an external security protocol is used to secure the
+ connection. RDP4 and RDP5.1 use Standard RDP Security.
+ The VRDP server supports Enhanced RDP Security with TLS protocol and,
+ as a part of TLS handshake, sends the server certificate to the
+ client.</para>
+
+ <para>The <computeroutput>Security/Method</computeroutput> VRDE
+ property sets the desired security method, which is used for a
+ connection. Valid values are:<itemizedlist>
+ <listitem>
+ <para>
+ <computeroutput>Negotiate</computeroutput> - both Enhanced (TLS)
+ and Standard RDP Security connections are allowed. The security
+ method is negotiated with the client. This is the default setting.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <computeroutput>RDP</computeroutput> - only Standard RDP Security
+ is accepted.</para>
+ </listitem>
+
+ <listitem>
+ <para>
+ <computeroutput>TLS</computeroutput> - only Enhanced RDP Security
+ is accepted. The client must support TLS.</para>
+ </listitem>
+ </itemizedlist>
+ For example the following command allows a client to use either Standard
+ or Enhanced RDP Security connection:
+ <screen>vboxmanage modifyvm "VM name" --vrdeproperty "Security/Method=negotiate"</screen>
+ </para>
+
+ <para>If the <computeroutput>Security/Method</computeroutput> property is
+ set to either <computeroutput>Negotiate</computeroutput> or
+ <computeroutput>TLS</computeroutput>, the TLS protocol will be automatically
+ used by the server, if the client supports TLS. However, in order to use TLS
+ the server must possess the Server Certificate, the Server Private Key and the
+ Certificate Authority (CA) Certificate. The following example shows how to
+ generate a server certificate.<orderedlist>
+ <listitem>
+ Create a CA self signed certificate:
+ <screen>openssl req -new -x509 -days 365 -extensions v3_ca \
+ -keyout ca_key_private.pem -out ca_cert.pem</screen>
+ </listitem>
+
+ <listitem>
+ Generate a server private key and a request for signing:
+ <screen>openssl genrsa -out server_key_private.pem
+openssl req -new -key server_key_private.pem -out server_req.pem</screen>
+ </listitem>
+
+ <listitem>
+ Generate the server certificate:
+ <screen>openssl x509 -req -days 365 -in server_req.pem \
+ -CA ca_cert.pem -CAkey ca_key_private.pem -set_serial 01 -out server_cert.pem</screen>
+ </listitem>
+ </orderedlist>
+ The server must be configured to access the required files:
+ <screen>vboxmanage modifyvm "VM name" \
+ --vrdeproperty "Security/CACertificate=path/ca_cert.pem"</screen>
+ <screen>vboxmanage modifyvm "VM name" \
+ --vrdeproperty "Security/ServerCertificate=path/server_cert.pem"</screen>
+ <screen>vboxmanage modifyvm "VM name" \
+ --vrdeproperty "Security/ServerPrivateKey=path/server_key_private.pem"</screen>
+ </para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>As the client that connects to the server determines what type
+ of encryption will be used, with rdesktop, the Linux RDP viewer, use the
+ <computeroutput>-4</computeroutput> or
+ <computeroutput>-5</computeroutput> options.</para>
+ </sect2>
+
+ <sect2 id="vrde-multiconnection">
+ <title>Multiple connections to the VRDP server</title>
+
+ <para>The VRDP server of VirtualBox supports multiple simultaneous
+ connections to the same running VM from different clients. All connected
+ clients see the same screen output and share a mouse pointer and
+ keyboard focus. This is similar to several people using the same
+ computer at the same time, taking turns at the keyboard.</para>
+
+ <para>The following command enables multiple connection mode: <screen>VBoxManage modifyvm "VM name" --vrdemulticon on</screen></para>
+ </sect2>
+
+ <sect2 id="vrde-multimonitor">
+ <title>Multiple remote monitors</title>
+
+ <para>To access two or more remote VM displays you have to enable the
+ VRDP multiconnection mode (see <xref
+ linkend="vrde-multiconnection" />).</para>
+
+ <para>The RDP client can select the virtual monitor number to connect to
+ using the <computeroutput>domain</computeroutput> logon parameter
+ (<computeroutput>-d</computeroutput>). If the parameter ends with
+ <computeroutput>@</computeroutput> followed by a number, VirtualBox
+ interprets this number as the screen index. The primary guest screen is
+ selected with <computeroutput>@1</computeroutput>, the first secondary
+ screen is <computeroutput>@2</computeroutput>, etc.</para>
+
+ <para>The Microsoft RDP6 client does not let you specify a separate
+ domain name. Instead, use
+ <computeroutput>domain\username</computeroutput> in the
+ <computeroutput>Username:</computeroutput> field -- for example,
+ <computeroutput>@2\name</computeroutput>.
+ <computeroutput>name</computeroutput> must be supplied, and must be the
+ name used to log in if the VRDP server is set up to require credentials.
+ If it is not, you may use any text as the username.</para>
+ </sect2>
+
+ <sect2 id="vrde-videochannel">
+ <title>VRDP video redirection</title>
+
+ <para>Starting with VirtualBox 3.2, the VRDP server can redirect video
+ streams from the guest to the RDP client. Video frames are compressed
+ using the JPEG algorithm allowing a higher compression ratio than
+ standard RDP bitmap compression methods. It is possible to increase the
+ compression ratio by lowering the video quality.</para>
+
+ <para>The VRDP server automatically detects video streams in a guest as
+ frequently updated rectangular areas. As a result, this method works
+ with any guest operating system without having to install additional
+ software in the guest; in particular, the Guest Additions are not
+ required.</para>
+
+ <para>On the client side, however, currently only the Windows 7 Remote
+ Desktop Connection client supports this feature. If a client does not
+ support video redirection, the VRDP server falls back to regular bitmap
+ updates.</para>
+
+ <para>The following command enables video redirection: <screen>VBoxManage modifyvm "VM name" --vrdevideochannel on</screen></para>
+
+ <para>The quality of the video is defined as a value from 10 to 100
+ percent, representing a JPEG compression level (where lower numbers mean
+ lower quality but higher compression). The quality can be changed using
+ the following command: <screen>VBoxManage modifyvm "VM name" --vrdevideochannelquality 75</screen></para>
+ </sect2>
+
+ <sect2 id="vrde-customization">
+ <title>VRDP customization</title>
+
+ <para>With VirtualBox 4.0 it is possible to disable display output,
+ mouse and keyboard input, audio, remote USB or clipboard individually in
+ the VRDP server.</para>
+
+ <para>The following commands change corresponding server
+ settings:</para>
+
+ <screen>VBoxManage modifyvm "VM name" --vrdeproperty Client/DisableDisplay=1
+VBoxManage modifyvm "VM name" --vrdeproperty Client/DisableInput=1
+VBoxManage modifyvm "VM name" --vrdeproperty Client/DisableUSB=1
+VBoxManage modifyvm "VM name" --vrdeproperty Client/DisableAudio=1
+VBoxManage modifyvm "VM name" --vrdeproperty Client/DisableClipboard=1
+VBoxManage modifyvm "VM name" --vrdeproperty Client/DisableUpstreamAudio=1</screen>
+
+ <para>To reenable a feature use a similar command without the trailing
+ 1. For example: <screen>VBoxManage modifyvm "VM name" --vrdeproperty Client/DisableDisplay=</screen></para>
+
+ <para>These properties were introduced with VirtualBox 3.2.10. However,
+ in the 3.2.x series, it was necessary to use the following commands to
+ alter these settings instead:</para>
+
+ <screen>VBoxManage setextradata "VM name" "VRDP/Feature/Client/DisableDisplay" 1
+VBoxManage setextradata "VM name" "VRDP/Feature/Client/DisableInput" 1
+VBoxManage setextradata "VM name" "VRDP/Feature/Client/DisableUSB" 1
+VBoxManage setextradata "VM name" "VRDP/Feature/Client/DisableAudio" 1
+VBoxManage setextradata "VM name" "VRDP/Feature/Client/DisableClipboard" 1</screen>
+
+ <para>To reenable a feature use a similar command without the trailing
+ 1. For example: <screen>VBoxManage setextradata "VM name" "VRDP/Feature/Client/DisableDisplay"</screen></para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="teleporting">
+ <title>Teleporting</title>
+
+ <para>Starting with version 3.1, VirtualBox supports "teleporting" -- that
+ is, moving a virtual machine over a network from one VirtualBox host to
+ another, while the virtual machine is running. This works regardless of
+ the host operating system that is running on the hosts: you can teleport
+ virtual machines between Solaris and Mac hosts, for example.</para>
+
+ <para>Teleporting requires that a machine be currently running on one
+ host, which is then called the <emphasis role="bold">"source"</emphasis>.
+ The host to which the virtual machine will be teleported will then be
+ called the <emphasis role="bold">"target"</emphasis>; the machine on the
+ target is then configured to wait for the source to contact the target.
+ The machine's running state will then be transferred from the source to
+ the target with minimal downtime.</para>
+
+ <para>Teleporting happens over any TCP/IP network; the source and the
+ target only need to agree on a TCP/IP port which is specified in the
+ teleporting settings.</para>
+
+ <para>At this time, there are a few prerequisites for this to work,
+ however:<orderedlist>
+ <listitem>
+ <para>On the target host, you must configure a virtual machine in
+ VirtualBox with exactly the same hardware settings as the machine on
+ the source that you want to teleport. This does not apply to
+ settings which are merely descriptive, such as the VM name, but
+ obviously for teleporting to work, the target machine must have the
+ same amount of memory and other hardware settings. Otherwise
+ teleporting will fail with an error message.</para>
+ </listitem>
+
+ <listitem>
+ <para>The two virtual machines on the source and the target must
+ share the same storage (hard disks as well as floppy and CD/DVD
+ images). This means that they either use the same iSCSI targets or
+ that the storage resides somewhere on the network and both hosts
+ have access to it via NFS or SMB/CIFS.</para>
+
+ <para>This also means that neither the source nor the target machine
+ can have any snapshots.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>Then perform the following steps:<orderedlist>
+ <listitem>
+ <para>On the <emphasis>target</emphasis> host, configure the virtual
+ machine to wait for a teleport request to arrive when it is started,
+ instead of actually attempting to start the machine. This is done
+ with the following VBoxManage command:<screen>VBoxManage modifyvm &lt;targetvmname&gt; --teleporter on --teleporterport &lt;port&gt;</screen></para>
+
+ <para>where <computeroutput>&lt;targetvmname&gt;</computeroutput> is
+ the name of the virtual machine on the target host and
+ <computeroutput>&lt;port&gt;</computeroutput> is a TCP/IP port
+ number to be used on both the source and the target hosts. For
+ example, use 6000. For details, see <xref
+ linkend="vboxmanage-modifyvm-teleport" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>Start the VM on the target host. You will see that instead of
+ actually running, it will show a progress dialog. indicating that it
+ is waiting for a teleport request to arrive.</para>
+ </listitem>
+
+ <listitem>
+ <para>Start the machine on the <emphasis>source</emphasis> host as
+ usual. When it is running and you want it to be teleported, issue
+ the following command on the source host:<screen>VBoxManage controlvm &lt;sourcevmname&gt; teleport --host &lt;targethost&gt; --port &lt;port&gt;</screen></para>
+
+ <para>where <computeroutput>&lt;sourcevmname&gt;</computeroutput> is
+ the name of the virtual machine on the source host (the machine that
+ is currently running),
+ <computeroutput>&lt;targethost&gt;</computeroutput> is the host or
+ IP name of the target host on which the machine is waiting for the
+ teleport request, and <computeroutput>&lt;port&gt;</computeroutput>
+ must be the same number as specified in the command on the target
+ host. For details, see <xref
+ linkend="vboxmanage-controlvm" />.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>For testing, you can also teleport machines on the same host; in
+ that case, use "localhost" as the hostname on both the source and the
+ target host.<note>
+ <para>In rare cases, if the CPUs of the source and the target are very
+ different, teleporting can fail with an error message, or the target
+ may hang. This may happen especially if the VM is running application
+ software that is highly optimized to run on a particular CPU without
+ correctly checking that certain CPU features are actually present.
+ VirtualBox filters what CPU capabilities are presented to the guest
+ operating system. Advanced users can attempt to restrict these virtual
+ CPU capabilities with the <computeroutput>VBoxManage --modifyvm
+ --cpuid</computeroutput> command; see <xref
+ linkend="vboxmanage-modifyvm-teleport" />.</para>
+ </note></para>
+ </sect1>
+</chapter>
diff --git a/doc/manual/en_US/user_Glossary.xml b/doc/manual/en_US/user_Glossary.xml
new file mode 100644
index 00000000..10106d17
--- /dev/null
+++ b/doc/manual/en_US/user_Glossary.xml
@@ -0,0 +1,496 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<glossary id="Glossary">
+ <glossdiv>
+ <title>A</title>
+
+ <glossentry>
+ <glossterm>ACPI</glossterm>
+
+ <glossdef>
+ <para>Advanced Configuration and Power Interface, an industry
+ specification for BIOS and hardware extensions to configure PC
+ hardware and perform power management. Windows 2000 and higher as well
+ as Linux 2.4 and higher support ACPI. Windows can only enable or
+ disable ACPI support at installation time.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>AHCI</glossterm>
+
+ <glossdef>
+ <para>Advanced Host Controller Interface, the interface that supports
+ SATA devices such as hard disks. See <xref
+ linkend="harddiskcontrollers" />.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>AMD-V</glossterm>
+
+ <glossdef>
+ <para>The hardware virtualization features built into modern AMD
+ processors. See <xref linkend="hwvirt" />.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>API</glossterm>
+
+ <glossdef>
+ <para>Application Programming Interface.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>APIC</glossterm>
+
+ <glossdef>
+ <para>Advanced Programmable Interrupt Controller, a newer version of
+ the original PC PIC (programmable interrupt controller). Most modern
+ CPUs contain an on-chip APIC ("local APIC"). Many systems also contain
+ an I/O APIC (input output APIC) as a separate chip which provides more
+ than 16 IRQs. Windows 2000 and higher use a different kernel if they
+ detect an I/O APIC during installation. Therefore an I/O APIC must not
+ be removed after installation.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>ATA</glossterm>
+
+ <glossdef>
+ <para>Advanced Technology Attachment, an industry standard for hard
+ disk interfaces (synonymous with IDE). See <xref
+ linkend="harddiskcontrollers" />.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+
+ <glossdiv>
+ <title>B</title>
+
+ <glossentry>
+ <glossterm>BIOS</glossterm>
+
+ <glossdef>
+ <para>Basic Input/Output System, the firmware built into most personal
+ computers which is responsible of initializing the hardware after the
+ computer has been turned on and then booting an operating system.
+ VirtualBox ships with its own virtual BIOS that runs when a virtual
+ machine is started.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+
+ <glossdiv>
+ <title>C</title>
+
+ <glossentry>
+ <glossterm>COM</glossterm>
+
+ <glossdef>
+ <para>Microsoft Component Object Model, a programming infrastructure
+ for modular software. COM allows applications to provide application
+ programming interfaces which can be accessed from various other
+ programming languages and applications. VirtualBox makes use of COM
+ both internally and externally to provide a comprehensive API to 3rd
+ party developers.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+
+ <glossdiv>
+ <title>D</title>
+
+ <glossentry>
+ <glossterm>DHCP</glossterm>
+
+ <glossdef>
+ <para>Dynamic Host Configuration Protocol. This allows a networking
+ device in a network to acquire its IP address (and other networking
+ details) automatically, in order to avoid having to configure all
+ devices in a network with fixed IP addresses. VirtualBox has a
+ built-in DHCP server that delivers an IP addresses to a virtual
+ machine when networking is configured to NAT; see <xref
+ linkend="networkingdetails" />.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>DKMS</glossterm>
+
+ <glossdef>
+ <para>Dynamic Kernel Module Support. A framework that simplifies
+ installing and updating external kernel modules on Linux machines; see
+ <xref linkend="externalkernelmodules" />.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+
+ <glossdiv>
+ <title>E</title>
+
+ <glossentry>
+ <glossterm>EFI</glossterm>
+
+ <glossdef>
+ <para>Extensible Firmware Interface, a firmware built into computers
+ which is designed to replace the aging BIOS. Originally designed by
+ Intel, most modern operating systems can now boot on computers which
+ have EFI instead of a BIOS built into them; see <xref
+ linkend="efi" />.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>EHCI</glossterm>
+
+ <glossdef>
+ <para>Enhanced Host Controller Interface, the interface that
+ implements the USB 2.0 standard.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+
+ <glossdiv>
+ <title>G</title>
+
+ <glossentry>
+ <glossterm>GUI</glossterm>
+
+ <glossdef>
+ <para>Graphical User Interface. Commonly used as an antonym to a
+ "command line interface", in the context of VirtualBox, we sometimes
+ refer to the main graphical
+ <computeroutput>VirtualBox</computeroutput> program as the "GUI", to
+ differentiate it from the <computeroutput>VBoxManage</computeroutput>
+ interface.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>GUID</glossterm>
+
+ <glossdef>
+ <para>See UUID.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+
+ <glossdiv>
+ <title>I</title>
+
+ <glossentry>
+ <glossterm>IDE</glossterm>
+
+ <glossdef>
+ <para>Integrated Drive Electronics, an industry standard for hard disk
+ interfaces. See <xref linkend="harddiskcontrollers" />.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>I/O APIC</glossterm>
+
+ <glossdef>
+ <para>See APIC.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>iSCSI</glossterm>
+
+ <glossdef>
+ <para>Internet SCSI; see <xref linkend="storage-iscsi" />.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+
+ <glossdiv>
+ <title>M</title>
+
+ <glossentry>
+ <glossterm>MAC</glossterm>
+
+ <glossdef>
+ <para>Media Access Control, a part of an Ethernet network card. A MAC
+ address is a 6-byte number which identifies a network card. It is
+ typically written in hexadecimal notation where the bytes are
+ separated by colons, such as
+ <computeroutput>00:17:3A:5E:CB:08</computeroutput>.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>MSI</glossterm>
+
+ <glossdef>
+ <para>Message Signalled Interrupts, as supported by modern chipsets
+ such as the ICH9; see <xref linkend="settings-motherboard" />. As
+ opposed to traditional pin-based interrupts, with MSI, a small amount
+ of data can accompany the actual interrupt message. This reduces the
+ amount of hardware pins required, allows for more interrupts and
+ better performance.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+
+ <glossdiv>
+ <title>N</title>
+
+ <glossentry>
+ <glossterm>NAT</glossterm>
+
+ <glossdef>
+ <para>Network Address Translation. A technique to share networking
+ interfaces by which an interface modifies the source and/or target IP
+ addresses of network packets according to specific rules. Commonly
+ employed by routers and firewalls to shield an internal network from
+ the Internet, VirtualBox can use NAT to easily share a host's physical
+ networking hardware with its virtual machines. See <xref
+ linkend="network_nat" />.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+
+ <glossdiv>
+ <title>O</title>
+
+ <glossentry>
+ <glossterm>OVF</glossterm>
+
+ <glossdef>
+ <para>Open Virtualization Format, a cross-platform industry standard
+ to exchange virtual appliances between virtualization products; see
+ <xref linkend="ovf" />.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+
+ <glossdiv>
+ <title>P</title>
+
+ <glossentry>
+ <glossterm>PAE</glossterm>
+
+ <glossdef>
+ <para>Physical Address Extension. This allows accessing more than 4 GB
+ of RAM even in 32-bit environments; see <xref
+ linkend="settings-general-advanced" />.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>PIC</glossterm>
+
+ <glossdef>
+ <para>See APIC.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>PXE</glossterm>
+
+ <glossdef>
+ <para>Preboot Execution Environment, an industry standard for booting
+ PC systems from remote network locations. It includes DHCP for IP
+ configuration and TFTP for file transfer. Using UNDI, a hardware
+ independent driver stack for accessing the network card from bootstrap
+ code is available.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+
+ <glossdiv>
+ <title>R</title>
+
+ <glossentry>
+ <glossterm>RDP</glossterm>
+
+ <glossdef>
+ <para>Remote Desktop Protocol, a protocol developed by Microsoft as an
+ extension to the ITU T.128 and T.124 video conferencing protocol. With
+ RDP, a PC system can be controlled from a remote location using a
+ network connection over which data is transferred in both directions.
+ Typically graphics updates and audio are sent from the remote machine
+ and keyboard and mouse input events are sent from the client. A
+ VirtualBox extension package by Oracle provides VRDP, an enhanced
+ implementation of the relevant standards which is largely compatible
+ with Microsoft's RDP implementation. See <xref linkend="vrde" /> for
+ details.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+
+ <glossdiv>
+ <title>S</title>
+
+ <glossentry>
+ <glossterm>SAS</glossterm>
+
+ <glossdef>
+ <para>Serial Attached SCSI, an industry standard for hard disk
+ interfaces. See <xref linkend="harddiskcontrollers" />.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>SATA</glossterm>
+
+ <glossdef>
+ <para>Serial ATA, an industry standard for hard disk interfaces. See
+ <xref linkend="harddiskcontrollers" />.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>SCSI</glossterm>
+
+ <glossdef>
+ <para>Small Computer System Interface. An industry standard for data
+ transfer between devices, especially for storage. See <xref
+ linkend="harddiskcontrollers" />.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>SMP</glossterm>
+
+ <glossdef>
+ <para>Symmetrical Multiprocessing, meaning that the resources of a
+ computer are shared between several processors. These can either be
+ several processor chips or, as is more common with modern hardware,
+ multiple CPU cores in one processor.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>SSD</glossterm>
+
+ <glossdef>
+ <para>Solid-state drive, uses microchips for storing data in a computer
+ system. Compared to classical hard-disks they are having no mechanical
+ components like spinning disks.
+ </para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+
+ <glossdiv>
+ <title>T</title>
+
+ <glossentry>
+ <glossterm>TAR</glossterm>
+
+ <glossdef>
+ <para>A widely used file format for archiving. Originally, this stood
+ for "Tape ARchive" and was already supported by very early Unix
+ versions for backing up data on tape. The file format is still widely
+ used today, for example, with OVF archives (with an
+ <computeroutput>.ova</computeroutput> file extension); see <xref
+ linkend="ovf" />.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+
+ <glossdiv>
+ <title>U</title>
+
+ <glossentry>
+ <glossterm>UUID</glossterm>
+
+ <glossdef>
+ <para>A Universally Unique Identifier -- often also called GUID
+ (Globally Unique Identifier) -- is a string of numbers and letters
+ which can be computed dynamically and is guaranteed to be unique.
+ Generally, it is used as a global handle to identify entities.
+ VirtualBox makes use of UUIDs to identify VMs, Virtual Disk Images
+ (VDI files) and other entities.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+
+ <glossdiv>
+ <title>V</title>
+
+ <glossentry>
+ <glossterm>VM</glossterm>
+
+ <glossdef>
+ <para>Virtual Machine -- a virtual computer that VirtualBox allows you
+ to run on top of your actual hardware. See <xref
+ linkend="virtintro" /> for details.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>VMM</glossterm>
+
+ <glossdef>
+ <para>Virtual Machine Manager -- the component of VirtualBox that
+ controls VM execution. See <xref linkend="technical-components" /> for
+ a list of VirtualBox components.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>VRDE</glossterm>
+
+ <glossdef>
+ <para>VirtualBox Remote Desktop Extension. This interface is built
+ into VirtualBox to allow VirtualBox extension packages to supply
+ remote access to virtual machines. A VirtualBox extension package by
+ Oracle provides VRDP support; see <xref linkend="vrde" /> for
+ details.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>VRDP</glossterm>
+
+ <glossdef>
+ <para>See RDP.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>VT-x</glossterm>
+
+ <glossdef>
+ <para>The hardware virtualization features built into modern Intel
+ processors. See <xref linkend="hwvirt" />.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+
+ <glossdiv>
+ <title>X</title>
+
+ <glossentry>
+ <glossterm>XML</glossterm>
+
+ <glossdef>
+ <para>The eXtensible Markup Language, a metastandard for all kinds of
+ textual information. XML only specifies how data in the document is
+ organized generally and does not prescribe how to semantically
+ organize content.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>XPCOM</glossterm>
+
+ <glossdef>
+ <para>Mozilla Cross Platform Component Object Model, a programming
+ infrastructure developed by the Mozilla browser project which is
+ similar to Microsoft COM and allows applications to provide a modular
+ programming interface. VirtualBox makes use of XPCOM on Linux both
+ internally and externally to provide a comprehensive API to
+ third-party developers.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+</glossary>
diff --git a/doc/manual/en_US/user_GuestAdditions.xml b/doc/manual/en_US/user_GuestAdditions.xml
new file mode 100644
index 00000000..cfd25c54
--- /dev/null
+++ b/doc/manual/en_US/user_GuestAdditions.xml
@@ -0,0 +1,1612 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<chapter>
+ <title id="guestadditions">Guest Additions</title>
+
+ <para>The previous chapter covered getting started with VirtualBox and
+ installing operating systems in a virtual machine. For any serious and
+ interactive use, the VirtualBox Guest Additions will make your life much
+ easier by providing closer integration between host and guest and improving
+ the interactive performance of guest systems. This chapter describes the
+ Guest Additions in detail.</para>
+
+ <sect1>
+ <title>Introduction</title>
+
+ <para>As mentioned in <xref linkend="virtintro" />, the Guest Additions
+ are designed to be installed <emphasis>inside</emphasis> a virtual machine
+ after the guest operating system has been installed. They consist of
+ device drivers and system applications that optimize the guest operating
+ system for better performance and usability. Please see <xref
+ linkend="guestossupport" /> for details on what guest operating systems
+ are fully supported with Guest Additions by VirtualBox.</para>
+
+ <para>The VirtualBox Guest Additions for all supported guest operating
+ systems are provided as a single CD-ROM image file which is called
+ <computeroutput>VBoxGuestAdditions.iso</computeroutput>. This image file
+ is located in the installation directory of VirtualBox. To install the
+ Guest Additions for a particular VM, you mount this ISO file in your VM as
+ a virtual CD-ROM and install from there.</para>
+
+ <para>The Guest Additions offer the following features:<glosslist>
+ <glossentry>
+ <glossterm>Mouse pointer integration</glossterm>
+
+ <glossdef>
+ <para>To overcome the limitations for mouse support that were
+ described in <xref linkend="keyb_mouse_normal" />, this provides
+ you with seamless mouse support. You will only have one mouse
+ pointer and pressing the Host key is no longer required to "free"
+ the mouse from being captured by the guest OS. To make this work,
+ a special mouse driver is installed in the guest that communicates
+ with the "real" mouse driver on your host and moves the guest
+ mouse pointer accordingly.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Shared folders</glossterm>
+
+ <glossdef>
+ <para>These provide an easy way to exchange files between the host
+ and the guest. Much like ordinary Windows network shares, you can
+ tell VirtualBox to treat a certain host directory as a shared
+ folder, and VirtualBox will make it available to the guest
+ operating system as a network share, irrespective of whether guest
+ actually has a network. For details, please refer to <xref
+ linkend="sharedfolders" />.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Better video support</glossterm>
+
+ <glossdef>
+ <para>While the virtual graphics card which VirtualBox emulates
+ for any guest operating system provides all the basic features,
+ the custom video drivers that are installed with the Guest
+ Additions provide you with extra high and non-standard video modes
+ as well as accelerated video performance.</para>
+
+ <para>In addition, with Windows, Linux and Solaris guests, you can
+ resize the virtual machine's window if the Guest Additions are
+ installed. The video resolution in the guest will be automatically
+ adjusted (as if you had manually entered an arbitrary resolution
+ in the guest's display settings). Please see <xref
+ linkend="intro-resize-window" /> also.</para>
+
+ <para>Finally, if the Guest Additions are installed, 3D graphics
+ and 2D video for guest applications can be accelerated; see <xref
+ linkend="guestadd-video" />.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Seamless windows</glossterm>
+
+ <glossdef>
+ <para>With this feature, the individual windows that are displayed
+ on the desktop of the virtual machine can be mapped on the host's
+ desktop, as if the underlying application was actually running on
+ the host. See <xref linkend="seamlesswindows" /> for
+ details.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Generic host/guest communication channels</glossterm>
+
+ <glossdef>
+ <para>The Guest Additions enable you to control and monitor guest
+ execution in ways other than those mentioned above. The so-called
+ "guest properties" provide a generic string-based mechanism to
+ exchange data bits between a guest and a host, some of which have
+ special meanings for controlling and monitoring the guest; see
+ <xref linkend="guestadd-guestprops" /> for details.</para>
+
+ <para>Additionally, applications can be started in a guest from
+ the host; see <xref linkend="guestadd-guestcontrol" />.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Time synchronization</glossterm>
+
+ <glossdef>
+ <para>With the Guest Additions installed, VirtualBox can ensure
+ that the guest's system time is better synchronized with that of
+ the host.</para>
+
+ <para>For various reasons, the time in the guest might run at a
+ slightly different rate than the time on the host. The host could
+ be receiving updates via NTP and its own time might not run
+ linearly. A VM could also be paused, which stops the flow of time
+ in the guest for a shorter or longer period of time. When the wall
+ clock time between the guest and host only differs slightly, the
+ time synchronization service attempts to gradually and smoothly
+ adjust the guest time in small increments to either "catch up" or
+ "lose" time. When the difference is too great (e.g., a VM paused
+ for hours or restored from saved state), the guest time is changed
+ immediately, without a gradual adjustment.</para>
+
+ <para>The Guest Additions will re-synchronize the time regularly.
+ See <xref linkend="changetimesync" /> for how to configure the
+ parameters of the time synchronization mechanism.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Shared clipboard</glossterm>
+
+ <glossdef>
+ <para>With the Guest Additions installed, the clipboard of the
+ guest operating system can optionally be shared with your host
+ operating system; see <xref linkend="generalsettings" />.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Automated logons (credentials passing)</glossterm>
+
+ <glossdef>
+ <para>For details, please see <xref linkend="autologon" />.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+
+ <para>Each version of VirtualBox, even minor releases, ship with their own
+ version of the Guest Additions. While the interfaces through which the
+ VirtualBox core communicates with the Guest Additions are kept stable so
+ that Guest Additions already installed in a VM should continue to work
+ when VirtualBox is upgraded on the host, for best results, it is
+ recommended to keep the Guest Additions at the same version.</para>
+
+ <para>Starting with VirtualBox 3.1, the Windows and Linux Guest Additions
+ therefore check automatically whether they have to be updated. If the host
+ is running a newer VirtualBox version than the Guest Additions, a
+ notification with further instructions is displayed in the guest.</para>
+
+ <para>To disable this update check for the Guest Additions of a given
+ virtual machine, set the value of its
+ <computeroutput>/VirtualBox/GuestAdd/CheckHostVersion</computeroutput>
+ guest property to <computeroutput>0</computeroutput>; see <xref
+ linkend="guestadd-guestprops" /> for details.</para>
+ </sect1>
+
+ <sect1>
+ <title>Installing and Maintaining Guest Additions</title>
+
+ <para>Guest Additions are available for virtual machines running Windows,
+ Linux, Solaris or OS/2. The following sections describe the specifics of
+ each variant in detail.</para>
+
+ <sect2 id="additions-windows">
+ <title>Guest Additions for Windows</title>
+
+ <para>The VirtualBox Windows Guest Additions are designed to be
+ installed in a virtual machine running a Windows operating system. The
+ following versions of Windows guests are supported:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Microsoft Windows NT 4.0 (any service pack)</para>
+ </listitem>
+
+ <listitem>
+ <para>Microsoft Windows 2000 (any service pack)</para>
+ </listitem>
+
+ <listitem>
+ <para>Microsoft Windows XP (any service pack)</para>
+ </listitem>
+
+ <listitem>
+ <para>Microsoft Windows Server 2003 (any service pack)</para>
+ </listitem>
+
+ <listitem>
+ <para>Microsoft Windows Server 2008</para>
+ </listitem>
+
+ <listitem>
+ <para>Microsoft Windows Vista (all editions)</para>
+ </listitem>
+
+ <listitem>
+ <para>Microsoft Windows 7 (all editions)</para>
+ </listitem>
+
+ <listitem>
+ <para>Microsoft Windows 8 (all editions)</para>
+ </listitem>
+
+ <listitem>
+ <para>Microsoft Windows Server 2012</para>
+ </listitem>
+
+ </itemizedlist>
+
+ <sect3 id="mountingadditionsiso">
+ <title>Installation</title>
+
+ <para>In the "Devices" menu in the virtual machine's menu bar,
+ VirtualBox has a handy menu item named "Install guest additions",
+ which mounts the Guest Additions ISO file inside your virtual machine.
+ A Windows guest should then automatically start the Guest Additions
+ installer, which installs the Guest Additions into your Windows
+ guest.</para>
+
+ <note>
+ <para>For the basic Direct3D acceleration to work in a Windows Guest, you
+ have to install the Guest Additions in "Safe Mode".
+ This does <emphasis role="bold">not</emphasis> apply to the experimental
+ WDDM Direct3D video driver available
+ for Vista and Windows 7 guests, see <xref linkend="KnownIssues" /> for
+ details.<footnote><para>The experimental WDDM driver was added with
+ VirtualBox 4.1.</para></footnote></para>
+ </note>
+
+ <para>If you prefer to mount the additions manually, you can perform
+ the following steps:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>Start the virtual machine in which you have installed
+ Windows.</para>
+ </listitem>
+
+ <listitem>
+ <para>Select "Mount CD/DVD-ROM" from the "Devices" menu in the
+ virtual machine's menu bar and then "CD/DVD-ROM image". This
+ brings up the Virtual Media Manager described in <xref
+ linkend="vdis" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>In the Virtual Media Manager, press the "Add" button and
+ browse your host file system for the
+ <computeroutput>VBoxGuestAdditions.iso</computeroutput>
+ file:<itemizedlist>
+ <listitem>
+ <para>On a Windows host, you can find this file in the
+ VirtualBox installation directory (usually under
+ <computeroutput>C:\Program
+ files\Oracle\VirtualBox</computeroutput> ).</para>
+ </listitem>
+
+ <listitem>
+ <para>On Mac OS X hosts, you can find this file in the
+ application bundle of VirtualBox. (Right click on the
+ VirtualBox icon in Finder and choose <emphasis>Show Package
+ Contents</emphasis>. There it is located in the
+ <computeroutput>Contents/MacOS</computeroutput>
+ folder.)</para>
+ </listitem>
+
+ <listitem>
+ <para>On a Linux host, you can find this file in the
+ <computeroutput>additions</computeroutput> folder under
+ where you installed VirtualBox (normally
+ <computeroutput>/opt/VirtualBox/</computeroutput>).</para>
+ </listitem>
+
+ <listitem>
+ <para>On Solaris hosts, you can find this file in the
+ <computeroutput>additions</computeroutput> folder under
+ where you installed VirtualBox (normally
+ <computeroutput>/opt/VirtualBox</computeroutput>).</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para>Back in the Virtual Media Manager, select that ISO file and
+ press the "Select" button. This will mount the ISO file and
+ present it to your Windows guest as a CD-ROM.</para>
+ </listitem>
+ </orderedlist>
+
+ <para>Unless you have the Autostart feature disabled in your Windows
+ guest, Windows will now autostart the VirtualBox Guest Additions
+ installation program from the Additions ISO. If the Autostart feature
+ has been turned off, choose
+ <computeroutput>VBoxWindowsAdditions.exe</computeroutput> from the
+ CD/DVD drive inside the guest to start the installer.</para>
+
+ <para>The installer will add several device drivers to the Windows
+ driver database and then invoke the hardware detection wizard.</para>
+
+ <para>Depending on your configuration, it might display warnings that
+ the drivers are not digitally signed. You must confirm these in order
+ to continue the installation and properly install the
+ Additions.</para>
+
+ <para>After installation, reboot your guest operating system to
+ activate the Additions.</para>
+ </sect3>
+
+ <sect3>
+ <title>Updating the Windows Guest Additions</title>
+
+ <para>Windows Guest Additions can be updated by running the
+ installation program again, as previously described. This will then
+ replace the previous Additions drivers with updated versions.</para>
+
+ <para>Alternatively, you may also open the Windows Device Manager and
+ select "Update driver..." for two devices:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>the VirtualBox Graphics Adapter and</para>
+ </listitem>
+
+ <listitem>
+ <para>the VirtualBox System Device.</para>
+ </listitem>
+ </orderedlist>
+
+ <para>For each, choose to provide your own driver and use "Have Disk"
+ to point the wizard to the CD-ROM drive with the Guest
+ Additions.</para>
+ </sect3>
+
+ <sect3>
+ <title>Unattended Installation</title>
+
+ <para>In order to allow for completely unattended guest installations,
+ you can specify a command line parameter to the install
+ launcher:</para>
+
+ <screen>VBoxWindowsAdditions.exe /S</screen>
+
+ <para>This automatically installs the right files and drivers for the
+ corresponding platform (32- or 64-bit).</para>
+
+ <note>
+ <para>Because of the drivers are not yet WHQL certified, you still
+ might get some driver installation popups, depending on the Windows
+ guest version.</para>
+ </note>
+
+ <para>For more options regarding unattended guest installations,
+ consult the command line help by using the command:</para>
+
+ <screen>VBoxWindowsAdditions.exe /?</screen>
+ </sect3>
+
+ <sect3 id="windows-guest-file-extraction">
+ <title>Manual file extraction</title>
+
+ <para>If you would like to install the files and drivers manually, you
+ can extract the files from the Windows Guest Additions setup by
+ typing:</para>
+
+ <screen>VBoxWindowsAdditions.exe /extract</screen>
+
+ <para>To explicitly extract the Windows Guest Additions for another
+ platform than the current running one (e.g. 64-bit files on a 32-bit
+ system), you have to execute the appropriate platform installer
+ (<computeroutput>VBoxWindowsAdditions-x86.exe</computeroutput> or
+ <computeroutput>VBoxWindowsAdditions-amd64.exe</computeroutput>) with
+ the <computeroutput>/extract</computeroutput> parameter.</para>
+ </sect3>
+
+ </sect2>
+
+ <sect2>
+ <title>Guest Additions for Linux</title>
+
+ <para>Like the Windows Guest Additions, the VirtualBox Guest Additions
+ for Linux are a set of device drivers and system applications which may
+ be installed in the guest operating system.</para>
+
+ <para>The following Linux distributions are officially supported:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Fedora as of Fedora Core 4;</para>
+ </listitem>
+
+ <listitem>
+ <para>Redhat Enterprise Linux as of version 3;</para>
+ </listitem>
+
+ <listitem>
+ <para>SUSE and openSUSE Linux as of version 9;</para>
+ </listitem>
+
+ <listitem>
+ <para>Ubuntu as of version 5.10.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Many other distributions are known to work with the Guest
+ Additions.</para>
+
+ <para>The version of the Linux kernel supplied by default in SUSE and
+ openSUSE 10.2, Ubuntu 6.10 (all versions) and Ubuntu 6.06 (server
+ edition) contains a bug which can cause it to crash during startup when
+ it is run in a virtual machine. The Guest Additions work in those
+ distributions.</para>
+
+ <para>Note that some Linux distributions already come with all or part of
+ the VirtualBox Guest Additions. You may choose to keep the distribution's
+ version of the Guest Additions but these are often not up to date and
+ limited in functionality, so we recommend replacing them with the
+ Guest Additions that come with VirtualBox. The VirtualBox Linux Guest
+ Additions installer tries to detect existing installation and replace
+ them but depending on how the distribution integrates the Guest
+ Additions, this may require some manual interaction. It is highly
+ recommended to take a snapshot of the virtual machine before replacing
+ pre-installed Guest Additions.</para>
+
+ <sect3>
+ <title>Installing the Linux Guest Additions</title>
+
+ <para>The VirtualBox Guest Additions for Linux are provided on the
+ same virtual CD-ROM file as the Guest Additions for Windows described
+ above. They also come with an installation program guiding you through
+ the setup process, although, due to the significant differences between
+ Linux distributions, installation may be slightly more complex.</para>
+
+ <para>Installation generally involves the following steps:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>Before installing the Guest Additions, you will have to
+ prepare your guest system for building external kernel modules.
+ This works similarly as described in <xref
+ linkend="externalkernelmodules" />, except that this step must now
+ be performed in your Linux <emphasis>guest</emphasis> instead of
+ on a Linux host system, as described there.</para>
+
+ <para>Again, as with Linux hosts, we recommend using DKMS if it is
+ available for the guest system. If it is not installed, use this
+ command for Ubuntu/Debian systems:
+ <screen>sudo apt-get install dkms</screen>
+ or for Fedora systems: <screen>yum install dkms</screen></para>
+
+ <para>Be sure to install DKMS <emphasis>before</emphasis>
+ installing the Linux Guest Additions. If DKMS is not available
+ or not installed, the guest kernel modules will need to be
+ recreated manually whenever the guest kernel is updated using
+ the command <screen>/etc/init.d/vboxadd setup</screen> as root.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Insert the
+ <computeroutput>VBoxGuestAdditions.iso</computeroutput> CD file
+ into your Linux guest's virtual CD-ROM drive, exactly the same way
+ as described for a Windows guest in <xref
+ linkend="mountingadditionsiso" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>Change to the directory where your CD-ROM drive is mounted
+ and execute as root:</para>
+
+ <screen>sh ./VBoxLinuxAdditions.run</screen>
+
+ </listitem>
+ </orderedlist>
+
+ <para>For your convenience, we provide the following step-by-step
+ instructions for freshly installed copies of recent versions of the most
+ popular Linux distributions. After these preparational steps, you can
+ execute the VirtualBox Guest Additions installer as described
+ above.</para>
+
+ <sect4>
+ <title>Ubuntu</title>
+
+ <para><orderedlist>
+ <listitem>
+ <para>In order to fully update your guest system, open a
+ terminal and run <screen>apt-get update</screen> as root
+ followed by <screen>apt-get upgrade</screen></para>
+ </listitem>
+
+ <listitem>
+ <para>Install DKMS using <screen>apt-get install dkms</screen></para>
+ </listitem>
+
+ <listitem>
+ <para>Reboot your guest system in order to activate the
+ updates and then proceed as described above.</para>
+ </listitem>
+ </orderedlist></para>
+ </sect4>
+
+ <sect4>
+ <title>Fedora</title>
+
+ <para><orderedlist>
+ <listitem>
+ <para>In order to fully update your guest system, open a
+ terminal and run <screen>yum update</screen></para> as root.
+ </listitem>
+
+ <listitem>
+ <para>Install DKMS and the GNU C compiler using <screen>yum install dkms</screen>
+ followed by <screen>yum install gcc</screen></para>
+ </listitem>
+
+ <listitem>
+ <para>Reboot your guest system in order to activate the
+ updates and then proceed as described above.</para>
+ </listitem>
+ </orderedlist></para>
+ </sect4>
+
+ <sect4>
+ <title>openSUSE</title>
+
+ <para><orderedlist>
+ <listitem>
+ <para>In order to fully update your guest system, open a
+ terminal and run <screen>zypper update</screen></para> as root.
+ </listitem>
+
+ <listitem>
+ <para>Install the make tool and the GNU C compiler using
+ <screen>zypper install make gcc</screen></para>
+ </listitem>
+
+ <listitem>
+ <para>Reboot your guest system in order to activate the
+ updates.</para>
+ </listitem>
+
+ <listitem>
+ <para>Find out which kernel you are running using <screen>uname -a</screen>
+ An example would be
+ <computeroutput>2.6.31.12-0.2-default</computeroutput> which
+ refers to the "default" kernel. Then install the correct
+ kernel development package. In the above example this would be
+ <screen>zypper install kernel-default-devel</screen></para>
+ </listitem>
+
+ <listitem>
+ <para>Make sure that your running kernel
+ (<computeroutput>uname -a</computeroutput>) and the kernel
+ packages you have installed (<computeroutput>rpm -qa
+ kernel\*</computeroutput>) have the exact same version number.
+ Proceed with the installation as described above.</para>
+ </listitem>
+ </orderedlist></para>
+ </sect4>
+
+ <sect4>
+ <title>SuSE Linux Enterprise Desktop (SLED)</title>
+
+ <para><orderedlist>
+ <listitem>
+ <para>In order to fully update your guest system, open a
+ terminal and run <screen>zypper update</screen></para> as root.
+ </listitem>
+
+ <listitem>
+ <para>Install the GNU C compiler using <screen>zypper install gcc</screen></para>
+ </listitem>
+
+ <listitem>
+ <para>Reboot your guest system in order to activate the
+ updates.</para>
+ </listitem>
+
+ <listitem>
+ <para>Find out which kernel you are running using <screen>uname -a</screen>
+ An example would be
+ <computeroutput>2.6.27.19-5.1-default</computeroutput> which
+ refers to the "default" kernel. Then install the correct
+ kernel development package. In the above example this would be
+ <screen>zypper install kernel-syms kernel-source</screen></para>
+ </listitem>
+
+ <listitem>
+ <para>Make sure that your running kernel
+ (<computeroutput>uname -a</computeroutput>) and the kernel
+ packages you have installed (<computeroutput>rpm -qa
+ kernel\*</computeroutput>) have the exact same version number.
+ Proceed with the installation as described above.</para>
+ </listitem>
+ </orderedlist></para>
+ </sect4>
+
+ <sect4>
+ <title>Mandrake</title>
+
+ <para><orderedlist>
+ <listitem>
+ <para>Mandrake ships with the VirtualBox Guest Additions which
+ will be replaced if you follow these steps.</para>
+ </listitem>
+
+ <listitem>
+ <para>In order to fully update your guest system, open a
+ terminal and run <screen>urpmi --auto-update</screen></para>
+ as root.
+ </listitem>
+
+ <listitem>
+ <para>Reboot your system in order to activate the
+ updates.</para>
+ </listitem>
+
+ <listitem>
+ <para>Install DKMS using <screen>urpmi dkms</screen> and make
+ sure to choose the correct kernel-devel package when asked by
+ the installer (use <computeroutput>uname -a</computeroutput>
+ to compare).</para>
+ </listitem>
+ </orderedlist></para>
+ </sect4>
+
+ <sect4>
+ <title>CentOS, Red Hat Enterprise Linux and Oracle
+ Enterprise Linux</title>
+
+ <para><orderedlist>
+ <listitem>
+ <para>For versions prior to 6, add <computeroutput>divider=10</computeroutput>
+ to the kernel boot options in
+ <computeroutput>/etc/grub.conf</computeroutput> to reduce the
+ idle CPU load.</para>
+ </listitem>
+
+ <listitem>
+ <para>In order to fully update your guest system, open a
+ terminal and run <screen>yum update</screen></para> as root.
+ </listitem>
+
+ <listitem>
+ <para>Install the GNU C compiler and the kernel development
+ packages using <screen>yum install gcc</screen> followed by
+ <screen>yum install kernel-devel</screen></para>
+ </listitem>
+
+ <listitem>
+ <para>Reboot your guest system in order to activate the
+ updates and then proceed as described above.</para>
+ </listitem>
+
+ <listitem>
+ <para>In case Oracle Enterprise Linux does not find the
+ required packages, you either have to install them from a
+ different source (e.g. DVD) or use Oracle's public Yum server
+ located at <ulink
+ url="http://public-yum.oracle.com/">http://public-yum.oracle.com</ulink>.</para>
+ </listitem>
+ </orderedlist></para>
+ </sect4>
+
+ <sect4>
+ <title>Debian</title>
+
+ <para><orderedlist>
+ <listitem>
+ <para>In order to fully update your guest system, open a
+ terminal and run <screen>apt-get update</screen> as root
+ followed by <screen>apt-get upgrade</screen></para>
+ </listitem>
+
+ <listitem>
+ <para>Install the make tool and the GNU C compiler using
+ <screen>apt-get install make gcc</screen></para>
+ </listitem>
+
+ <listitem>
+ <para>Reboot your guest system in order to activate the
+ updates.</para>
+ </listitem>
+
+ <listitem>
+ <para>Determine the exact version of your kernel using
+ <computeroutput>uname -a</computeroutput> and install the
+ correct version of the linux-headers package, e.g. using
+ <screen>apt-get install linux-headers-2.6.26-2-686</screen></para>
+ </listitem>
+ </orderedlist></para>
+ </sect4>
+ </sect3>
+
+ <sect3>
+ <title>Graphics and mouse integration</title>
+
+ <para>In Linux and Solaris guests, VirtualBox graphics and mouse
+ integration goes through the X Window System. VirtualBox can use
+ the X.Org variant of the system (or XFree86 version 4.3 which is
+ identical to the first X.Org release). During the installation process,
+ the X.Org display server will be set up to use the graphics and mouse
+ drivers which come with the Guest Additions.</para>
+
+ <para>After installing the Guest Additions into a fresh installation of
+ a supported Linux distribution or Solaris system (many unsupported
+ systems will work correctly too), the guest's graphics
+ mode will change to fit the size of the VirtualBox window
+ on the host when it is resized. You can also ask the guest system to
+ switch to a particular resolution by sending a "video mode hint" using
+ the <computeroutput>VBoxManage</computeroutput> tool.</para>
+
+ <para>Multiple guest monitors are supported in guests using the X.Org
+ server version 1.3 (which is part of release 7.3 of the X Window System
+ version 11) or a later version. The layout of the guest screens can
+ be adjusted as needed using the tools which come with the guest
+ operating system.</para>
+
+ <para>If you want to understand more about the details of how the
+ X.Org drivers are set up (in particular if you wish to use them in a
+ setting which our installer doesn't handle correctly), you should read
+ <xref linkend="guestxorgsetup" />.</para>
+ </sect3>
+
+ <sect3>
+ <title>Updating the Linux Guest Additions</title>
+
+ <para>The Guest Additions can simply be updated by going through the
+ installation procedure again with an updated CD-ROM image. This will
+ replace the drivers with updated versions. You should reboot after
+ updating the Guest Additions.</para>
+ </sect3>
+
+ <sect3>
+ <title>Uninstalling the Linux Guest Additions</title>
+
+ <para>If you have a version of the Guest Additions installed on your
+ virtual machine and wish to remove it without installing new ones, you
+ can do so by inserting the Guest Additions CD image into the virtual
+ CD-ROM drive as described above and running the installer for the
+ current Guest Additions with the "uninstall" parameter from the path
+ that the CD image is mounted on in the guest: <screen>sh ./VBoxLinuxAdditions.run uninstall</screen></para>
+
+ <para>While this will normally work without issues, you may need to do some
+ manual cleanup of the guest (particularly of the XFree86Config or
+ xorg.conf file) in some cases, particularly if the Additions version
+ installed or the guest operating system were very old, or if you made
+ your own changes to the Guest Additions setup after you installed
+ them.</para>
+
+ <para>Starting with version 3.1.0, you can uninstall the Additions by
+ invoking <screen>/opt/VBoxGuestAdditions-$VBOX_VERSION_STRING/uninstall.sh</screen>Please
+ replace
+ <computeroutput>/opt/VBoxGuestAdditions-$VBOX_VERSION_STRING</computeroutput>
+ with the correct Guest Additions installation directory.</para>
+ </sect3>
+ </sect2>
+
+ <sect2>
+ <title>Guest Additions for Solaris</title>
+
+ <para>Like the Windows Guest Additions, the VirtualBox Guest Additions
+ for Solaris take the form of a set of device drivers and system
+ applications which may be installed in the guest operating
+ system.</para>
+
+ <para>The following Solaris distributions are officially
+ supported:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Solaris 11 including Solaris 11 Express;</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris 10 (u5 and higher);</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Other distributions may work if they are based on comparable
+ software releases.</para>
+
+ <sect3>
+ <title>Installing the Solaris Guest Additions</title>
+
+ <para>The VirtualBox Guest Additions for Solaris are provided on the
+ same ISO CD-ROM as the Additions for Windows and Linux described
+ above. They also come with an installation program guiding you through
+ the setup process.</para>
+
+ <para>Installation involves the following steps:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>Mount the
+ <computeroutput>VBoxGuestAdditions.iso</computeroutput> file as
+ your Solaris guest's virtual CD-ROM drive, exactly the same way as
+ described for a Windows guest in <xref
+ linkend="mountingadditionsiso" />.</para>
+
+ <para>If in case the CD-ROM drive on the guest doesn't get mounted
+ (observed on some versions of Solaris 10), execute as root:</para>
+
+ <screen>svcadm restart volfs</screen>
+ </listitem>
+
+ <listitem>
+ <para>Change to the directory where your CD-ROM drive is mounted
+ and execute as root:</para>
+
+ <screen>pkgadd -G -d ./VBoxSolarisAdditions.pkg</screen>
+ </listitem>
+
+ <listitem>
+ <para>Choose "1" and confirm installation of the Guest Additions
+ package. After the installation is complete, re-login to X server
+ on your guest to activate the X11 Guest Additions.</para>
+ </listitem>
+ </orderedlist>
+ </sect3>
+
+ <sect3>
+ <title>Uninstalling the Solaris Guest Additions</title>
+
+ <para>The Solaris Guest Additions can be safely removed by removing
+ the package from the guest. Open a root terminal session and
+ execute:</para>
+
+ <para><screen>pkgrm SUNWvboxguest</screen></para>
+ </sect3>
+
+ <sect3>
+ <title>Updating the Solaris Guest Additions</title>
+
+ <para>The Guest Additions should be updated by first uninstalling the
+ existing Guest Additions and then installing the new ones. Attempting
+ to install new Guest Additions without removing the existing ones is
+ not possible.</para>
+ </sect3>
+ </sect2>
+
+ <sect2>
+ <title>Guest Additions for OS/2</title>
+
+ <para>VirtualBox also ships with a set of drivers that improve running
+ OS/2 in a virtual machine. Due to restrictions of OS/2 itself, this
+ variant of the Guest Additions has a limited feature set; see <xref
+ linkend="KnownIssues" /> for details.</para>
+
+ <para>The OS/2 Guest Additions are provided on the same ISO CD-ROM as
+ those for the other platforms. As a result, mount the ISO in OS/2 as
+ described previously. The OS/2 Guest Additions are located in the
+ directory <computeroutput>\32bit\OS2</computeroutput>.</para>
+
+ <para>As we do not provide an automatic installer at this time, please
+ refer to the <computeroutput>readme.txt</computeroutput> file in that
+ directory, which describes how to install the OS/2 Guest Additions
+ manually.</para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="sharedfolders">
+ <title>Shared folders</title>
+
+ <para>With the "shared folders" feature of VirtualBox, you can access
+ files of your host system from within the guest system. This is similar
+ how you would use network shares in Windows networks -- except that shared
+ folders do not need require networking, only the Guest Additions. Shared
+ Folders are supported with Windows (2000 or newer), Linux and Solaris
+ guests.</para>
+
+ <para>Shared folders must physically reside on the
+ <emphasis>host</emphasis> and are then shared with the guest, which uses a
+ special file system driver in the Guest Addition to talk to the host. For
+ Windows guests, shared folders are implemented as a pseudo-network
+ redirector; for Linux and Solaris guests, the Guest Additions provide a
+ virtual file system.</para>
+
+ <para>To share a host folder with a virtual machine in VirtualBox, you
+ must specify the path of that folder and choose for it a "share name" that
+ the guest can use to access it. Hence, first create the shared folder on
+ the host; then, within the guest, connect to it.</para>
+
+ <para>There are several ways in which shared folders can be set up for a
+ particular virtual machine:<itemizedlist>
+ <listitem>
+ <para>In the window of a running VM, you can select "Shared folders"
+ from the "Devices" menu, or click on the folder icon on the status
+ bar in the bottom right corner.</para>
+ </listitem>
+
+ <listitem>
+ <para>If a VM is not currently running, you can configure shared
+ folders in each virtual machine's "Settings" dialog.</para>
+ </listitem>
+
+ <listitem>
+ <para>From the command line, you can create shared folders using
+ VBoxManage, as follows: <screen>VBoxManage sharedfolder add "VM name" --name "sharename" --hostpath "C:\test"</screen></para>
+
+ <para>See <xref linkend="vboxmanage-sharedfolder" /> for
+ details.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>There are two types of shares:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>VM shares which are only available to the VM for which they have
+ been defined;</para>
+ </listitem>
+
+ <listitem>
+ <para>transient VM shares, which can be added and removed at runtime
+ and do not persist after a VM has stopped; for these, add the
+ <computeroutput>--transient</computeroutput> option to the above
+ command line.</para>
+ </listitem>
+ </orderedlist>
+
+ <para>Shared folders have read/write access to the files at the host path
+ by default. To restrict the guest to have read-only access, create a
+ read-only shared folder. This can either be achieved using the GUI or by
+ appending the parameter <computeroutput>--readonly</computeroutput> when
+ creating the shared folder with VBoxManage.</para>
+
+ <para>Starting with version 4.0, VirtualBox shared folders also support
+ symbolic links (<emphasis role="bold">symlinks</emphasis>), under the
+ following conditions:<orderedlist>
+ <listitem>
+ <para>The host operating system must support symlinks (i.e. a Mac,
+ Linux or Solaris host is required).</para>
+ </listitem>
+
+ <listitem>
+ <para>Currently only Linux and Solaris Guest Additions support
+ symlinks.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <sect2 id="sf_mount_manual">
+ <title>Manual mounting</title>
+
+ <para>You can mount the shared folder from inside a VM the same way as
+ you would mount an ordinary network share:</para>
+
+ <para><itemizedlist>
+ <listitem>
+ <para>In a Windows guest, shared folders are browseable and
+ therefore visible in Windows Explorer. So, to attach the host's
+ shared folder to your Windows guest, open Windows Explorer and
+ look for it under "My Networking Places" -&gt; "Entire Network"
+ -&gt; "VirtualBox Shared Folders". By right-clicking on a shared
+ folder and selecting "Map network drive" from the menu that pops
+ up, you can assign a drive letter to that shared folder.</para>
+
+ <para>Alternatively, on the Windows command line, use the
+ following:</para>
+
+ <screen>net use x: \\vboxsvr\sharename</screen>
+
+ <para>While <computeroutput>vboxsvr</computeroutput> is a fixed
+ name (note that <computeroutput>vboxsrv</computeroutput> would
+ also work), replace "x:" with the drive letter that you want to
+ use for the share, and <computeroutput>sharename</computeroutput>
+ with the share name specified with
+ <computeroutput>VBoxManage</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para>In a Linux guest, use the following command:</para>
+
+ <screen>mount -t vboxsf [-o OPTIONS] sharename mountpoint</screen>
+
+ <para>To mount a shared folder during boot, add the following
+ entry to /etc/fstab:</para>
+
+ <screen>sharename mountpoint vboxsf defaults 0 0</screen>
+ </listitem>
+
+ <listitem>
+ <para>In a Solaris guest, use the following command:</para>
+
+ <screen>mount -F vboxfs [-o OPTIONS] sharename mountpoint</screen>
+
+ <para>Replace <computeroutput>sharename</computeroutput> (use
+ lowercase) with the share name specified with
+ <computeroutput>VBoxManage</computeroutput> or the GUI, and
+ <computeroutput>mountpoint</computeroutput> with the path where
+ you want the share to be mounted on the guest (e.g.
+ <computeroutput>/mnt/share</computeroutput>). The usual mount
+ rules apply, that is, create this directory first if it does not
+ exist yet.</para>
+
+ <para>Here is an example of mounting the shared folder for the
+ user "jack" on Solaris:</para>
+
+ <screen>$ id
+uid=5000(jack) gid=1(other)
+$ mkdir /export/home/jack/mount
+$ pfexec mount -F vboxfs -o uid=5000,gid=1 jackshare /export/home/jack/mount
+$ cd ~/mount
+$ ls
+sharedfile1.mp3 sharedfile2.txt
+$</screen>
+
+ <para>Beyond the standard options supplied by the
+ <computeroutput>mount</computeroutput> command, the following are
+ available:</para>
+
+ <screen>iocharset CHARSET</screen>
+
+ <para>to set the character set used for I/O operations (utf8 by
+ default) and</para>
+
+ <screen>convertcp CHARSET</screen>
+
+ <para>to specify the character set used for the shared folder name
+ (utf8 by default).</para>
+
+ <para>The generic mount options (documented in the mount manual
+ page) apply also. Especially useful are the options
+ <computeroutput>uid</computeroutput>,
+ <computeroutput>gid</computeroutput> and
+ <computeroutput>mode</computeroutput>, as they allow access by
+ normal users (in read/write mode, depending on the settings) even
+ if root has mounted the filesystem.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect2>
+
+ <sect2 id="sf_mount_auto">
+ <title>Automatic mounting</title>
+
+ <para>Starting with version 4.0, VirtualBox can mount shared folders
+ automatically, at your option. If automatic mounting is enabled for a
+ specific shared folder, the Guest Additions will automatically mount
+ that folder as soon as a user logs into the guest OS. The details depend
+ on the guest OS type:<itemizedlist>
+ <listitem>
+ <para>With <emphasis role="bold">Windows guests,</emphasis> any
+ auto-mounted shared folder will receive its own drive letter (e.g.
+ <computeroutput>E:</computeroutput>) depending on the free drive
+ letters remaining in the guest.</para>
+
+ <para>If there no free drive letters left, auto-mounting will
+ fail; as a result, the number of auto-mounted shared folders is
+ typically limited to 22 or less with Windows guests.</para>
+ </listitem>
+
+ <listitem>
+ <para>With <emphasis role="bold">Linux guests,</emphasis>
+ auto-mounted shared folders are mounted into the
+ <computeroutput>/media</computeroutput> directory, along with the
+ prefix <computeroutput>sf_</computeroutput>. For example, the
+ shared folder <computeroutput>myfiles</computeroutput> would be
+ mounted to <computeroutput>/media/sf_myfiles</computeroutput> on
+ Linux and <computeroutput>/mnt/sf_myfiles</computeroutput> on
+ Solaris.</para>
+
+ <para>The guest property
+ <computeroutput>/VirtualBox/GuestAdd/SharedFolders/MountPrefix</computeroutput>
+ determines the prefix that is used. Change that guest property to
+ a value other than "sf" to change that prefix; see <xref
+ linkend="guestadd-guestprops" /> for details.<note>
+ <para>Access to auto-mounted shared folders is only
+ granted to the user group
+ <computeroutput>vboxsf</computeroutput>, which is created by
+ the VirtualBox Guest Additions installer. Hence guest users
+ have to be member of that group to have read/write
+ access or to have read-only access in case the folder is not
+ mapped writable.</para>
+ </note></para>
+
+ <para>To change the mount directory to something other than
+ <computeroutput>/media</computeroutput>, you can set the guest
+ property
+ <computeroutput>/VirtualBox/GuestAdd/SharedFolders/MountDir</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Solaris guests</emphasis> behave like
+ Linux guests except that <computeroutput>/mnt</computeroutput> is
+ used as the default mount directory instead of
+ <computeroutput>/media</computeroutput>.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>To have any changes to auto-mounted shared folders applied while a
+ VM is running, the guest OS needs to be rebooted. (This applies only to
+ auto-mounted shared folders, not the ones which are mounted
+ manually.)</para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="guestadd-video">
+ <title>Hardware-accelerated graphics</title>
+
+ <sect2 id="guestadd-3d">
+ <title>Hardware 3D acceleration (OpenGL and Direct3D 8/9)</title>
+
+ <para>The VirtualBox Guest Additions contain experimental hardware 3D
+ support for Windows, Linux and Solaris guests.<footnote>
+ <para>OpenGL support for Windows guests was added with VirtualBox
+ 2.1; support for Linux and Solaris followed with VirtualBox 2.2.
+ With VirtualBox 3.0, Direct3D 8/9 support was added for Windows
+ guests. OpenGL 2.0 is now supported as well.
+ With VirtualBox 4.1 Windows Aero theme support is added for
+ Windows Vista and Windows 7 guests (experimental)</para>
+ </footnote></para>
+
+ <para>With this feature, if an application inside your virtual machine
+ uses 3D features through the OpenGL or Direct3D 8/9 programming
+ interfaces, instead of emulating them in software (which would be slow),
+ VirtualBox will attempt to use your host's 3D hardware. This works for
+ all supported host platforms (Windows, Mac, Linux, Solaris), provided
+ that your host operating system can make use of your accelerated 3D
+ hardware in the first place.</para>
+
+ <para>The 3D acceleration currently has the following
+ preconditions:<orderedlist>
+ <listitem>
+ <para>It is only available for certain Windows, Linux and Solaris
+ guests. In particular:<itemizedlist>
+ <listitem>
+ <para>3D acceleration with Windows guests requires Windows
+ 2000, Windows XP, Vista or Windows 7. Both OpenGL and
+ Direct3D 8/9 (not with Windows 2000) are supported
+ (experimental).</para>
+ </listitem>
+
+ <listitem>
+ <para>OpenGL on Linux requires kernel 2.6.27 and higher as
+ well as X.org server version 1.5 and higher. Ubuntu 10.10
+ and Fedora 14 have been tested and confirmed as
+ working.</para>
+ </listitem>
+
+ <listitem>
+ <para>OpenGL on Solaris guests requires X.org server version
+ 1.5 and higher.</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para>The Guest Additions must be installed.<note>
+ <para>For the basic Direct3D acceleration to work in a Windows Guest,
+ VirtualBox needs to replace Windows system files in the
+ virtual machine. As a result, the Guest Additions installation
+ program offers Direct3D acceleration as an option that must
+ be explicitly enabled. Also, you must install the Guest
+ Additions in "Safe Mode". This does <emphasis role="bold">not</emphasis>
+ apply to the experimental WDDM Direct3D video
+ driver available for Vista and Windows 7 guests,
+ see <xref linkend="KnownIssues" />
+ for details.</para></note>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Because 3D support is still experimental at this time, it is
+ disabled by default and must be <emphasis role="bold">manually
+ enabled</emphasis> in the VM settings (see <xref
+ linkend="generalsettings" />).<note>
+ <para>
+ Untrusted guest systems should not be allowed to use
+ VirtualBox's 3D acceleration features, just as untrusted host
+ software should not be allowed to use 3D acceleration. Drivers
+ for 3D hardware are generally too complex to be made properly
+ secure and any software which is allowed to access them may be
+ able to compromise the operating system running them. In
+ addition, enabling 3D acceleration gives the guest direct access
+ to a large body of additional program code in the VirtualBox
+ host process which it might conceivably be able to use to crash
+ the virtual machine.
+ </para>
+ </note></para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>With VirtualBox 4.1, Windows Aero theme support is added for
+ Windows Vista and Windows 7 guests. To enable Aero theme support,
+ the experimental VirtualBox WDDM video driver must be installed,
+ which is available with the Guest Additions installation.
+ Since the WDDM video driver is still experimental at this time, it is
+ not installed by default and must be <emphasis role="bold">manually
+ selected</emphasis> in the Guest Additions installer by answering "No"
+ int the "Would you like to install basic Direct3D support" dialog
+ displayed when the Direct3D feature is selected.
+ <note><para>Unlike the current basic Direct3D support, the WDDM video
+ driver installation does <emphasis role="bold">not</emphasis> require
+ the "Safe Mode".</para></note>
+ <para>The Aero theme is not enabled by default. To enable it<itemizedlist>
+ <listitem>
+ <para>In Windows Vista guest: right-click on the desktop, in the
+ contect menu select "Personalize", then select "Windows Color and Appearance"
+ in the "Personalization" window, in the "Appearance Settings" dialog select
+ "Windows Aero" and press "OK"</para></listitem>
+ <listitem>
+ <para>In Windows 7 guest: right-click on the desktop, in the
+ contect menu select "Personalize" and select any Aero theme
+ in the "Personalization" window</para></listitem>
+ </itemizedlist>
+ </para>
+ </para>
+
+ <para>Technically, VirtualBox implements this by installing an
+ additional hardware 3D driver inside your guest when the Guest Additions
+ are installed. This driver acts as a hardware 3D driver and reports to
+ the guest operating system that the (virtual) hardware is capable of 3D
+ hardware acceleration. When an application in the guest then requests
+ hardware acceleration through the OpenGL or Direct3D programming
+ interfaces, these are sent to the host through a special communication
+ tunnel implemented by VirtualBox, and then the <emphasis>host</emphasis>
+ performs the requested 3D operation via the host's programming
+ interfaces.</para>
+ </sect2>
+
+ <sect2 id="guestadd-2d">
+ <title>Hardware 2D video acceleration for Windows guests</title>
+
+ <para>Starting with version 3.1, the VirtualBox Guest Additions contain
+ experimental hardware 2D video acceleration support for Windows
+ guests.</para>
+
+ <para>With this feature, if an application (e.g. a video player) inside
+ your Windows VM uses 2D video overlays to play a movie clip, then
+ VirtualBox will attempt to use your host's video acceleration hardware
+ instead of performing overlay stretching and color conversion in
+ software (which would be slow). This currently works for Windows, Linux
+ and Mac host platforms, provided that your host operating system can
+ make use of 2D video acceleration in the first place.</para>
+
+ <para>The 2D video acceleration currently has the following
+ preconditions:<orderedlist>
+ <listitem>
+ <para>It is only available for Windows guests (XP or
+ later).</para>
+ </listitem>
+
+ <listitem>
+ <para>The Guest Additions must be installed.</para>
+ </listitem>
+
+ <listitem>
+ <para>Because 2D support is still experimental at this time, it is
+ disabled by default and must be <emphasis role="bold">manually
+ enabled</emphasis> in the VM settings (see <xref
+ linkend="generalsettings" />).</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>Technically, VirtualBox implements this by exposing video overlay
+ DirectDraw capabilities in the Guest Additions video driver. The driver
+ sends all overlay commands to the host through a special communication
+ tunnel implemented by VirtualBox. On the host side, OpenGL is then used
+ to implement color space transformation and scaling</para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="seamlesswindows">
+ <title>Seamless windows</title>
+
+ <para>With the "seamless windows" feature of VirtualBox, you can have the
+ windows that are displayed within a virtual machine appear side by side
+ next to the windows of your host. This feature is supported for the
+ following guest operating systems (provided that the Guest Additions are
+ installed):<itemizedlist>
+ <listitem>
+ <para>Windows guests (support added with VirtualBox 1.5);</para>
+ </listitem>
+
+ <listitem>
+ <para>Supported Linux or Solaris guests running the X Window System
+ (added with VirtualBox 1.6).</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>After seamless windows are enabled (see below), VirtualBox
+ suppresses the display of the Desktop background of your guest, allowing
+ you to run the windows of your guest operating system seamlessly next to
+ the windows of your host:</para>
+
+ <para><mediaobject>
+ <imageobject>
+ <imagedata align="center" fileref="images/seamless.png" width="14cm" />
+ </imageobject>
+ </mediaobject>To enable seamless mode, after starting the virtual
+ machine, press the Host key (normally the right control key) together with
+ "L". This will enlarge the size of the VM's display to the size of your
+ host screen and mask out the guest operating system's background. To go
+ back to the "normal" VM display (i.e. to disable seamless windows), press
+ the Host key and "L" again.</para>
+ </sect1>
+
+ <sect1 id="guestadd-guestprops">
+ <title>Guest properties</title>
+
+ <para>Starting with version 2.1, VirtualBox allows for requesting certain
+ properties from a running guest, provided that the VirtualBox Guest
+ Additions are installed and the VM is running. This is good for two
+ things:<orderedlist>
+ <listitem>
+ <para>A number of predefined VM characteristics are automatically
+ maintained by VirtualBox and can be retrieved on the host, e.g. to
+ monitor VM performance and statistics.</para>
+ </listitem>
+
+ <listitem>
+ <para>In addition, arbitrary string data can be exchanged between
+ guest and host. This works in both directions.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>To accomplish this, VirtualBox establishes a private communication
+ channel between the VirtualBox Guest Additions and the host, and software
+ on both sides can use this channel to exchange string data for arbitrary
+ purposes. Guest properties are simply string keys to which a value is
+ attached. They can be set (written to) by either the host and the guest,
+ and they can also be read from both sides.</para>
+
+ <para>In addition to establishing the general mechanism of reading and
+ writing values, a set of predefined guest properties is automatically
+ maintained by the VirtualBox Guest Additions to allow for retrieving
+ interesting guest data such as the guest's exact operating system and
+ service pack level, the installed version of the Guest Additions, users
+ that are currently logged into the guest OS, network statistics and more.
+ These predefined properties are all prefixed with
+ <computeroutput>/VirtualBox/</computeroutput> and organized into a
+ hierarchical tree of keys.</para>
+
+ <para>Some of this runtime information is shown when you select "Session
+ Information Dialog" from a virtual machine's "Machine" menu.</para>
+
+ <para>A more flexible way to use this channel is via the
+ <computeroutput>VBoxManage guestproperty</computeroutput> command set; see
+ <xref linkend="vboxmanage-guestproperty" /> for details. For example, to
+ have <emphasis>all</emphasis> the available guest properties for a given
+ running VM listed with their respective values, use this:<screen>$ VBoxManage guestproperty enumerate "Windows Vista III"
+VirtualBox Command Line Management Interface Version $VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILD
+(C) 2005-$VBOX_C_YEAR $VBOX_VENDOR
+All rights reserved.
+
+Name: /VirtualBox/GuestInfo/OS/Product, value: Windows Vista Business Edition,
+ timestamp: 1229098278843087000, flags:
+Name: /VirtualBox/GuestInfo/OS/Release, value: 6.0.6001,
+ timestamp: 1229098278950553000, flags:
+Name: /VirtualBox/GuestInfo/OS/ServicePack, value: 1,
+ timestamp: 1229098279122627000, flags:
+Name: /VirtualBox/GuestAdd/InstallDir,
+ value: C:/Program Files/Oracle/VirtualBox
+ Guest Additions, timestamp: 1229098279269739000, flags:
+Name: /VirtualBox/GuestAdd/Revision, value: 40720,
+ timestamp: 1229098279345664000, flags:
+Name: /VirtualBox/GuestAdd/Version, value: $VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILD,
+ timestamp: 1229098279479515000, flags:
+Name: /VirtualBox/GuestAdd/Components/VBoxControl.exe, value: $VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILDr40720,
+ timestamp: 1229098279651731000, flags:
+Name: /VirtualBox/GuestAdd/Components/VBoxHook.dll, value: $VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILDr40720,
+ timestamp: 1229098279804835000, flags:
+Name: /VirtualBox/GuestAdd/Components/VBoxDisp.dll, value: $VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILDr40720,
+ timestamp: 1229098279880611000, flags:
+Name: /VirtualBox/GuestAdd/Components/VBoxMRXNP.dll, value: $VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILDr40720,
+ timestamp: 1229098279882618000, flags:
+Name: /VirtualBox/GuestAdd/Components/VBoxService.exe, value: $VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILDr40720,
+ timestamp: 1229098279883195000, flags:
+Name: /VirtualBox/GuestAdd/Components/VBoxTray.exe, value: $VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILDr40720,
+ timestamp: 1229098279885027000, flags:
+Name: /VirtualBox/GuestAdd/Components/VBoxGuest.sys, value: $VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILDr40720,
+ timestamp: 1229098279886838000, flags:
+Name: /VirtualBox/GuestAdd/Components/VBoxMouse.sys, value: $VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILDr40720,
+ timestamp: 1229098279890600000, flags:
+Name: /VirtualBox/GuestAdd/Components/VBoxSF.sys, value: $VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILDr40720,
+ timestamp: 1229098279893056000, flags:
+Name: /VirtualBox/GuestAdd/Components/VBoxVideo.sys, value: $VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILDr40720,
+ timestamp: 1229098279895767000, flags:
+Name: /VirtualBox/GuestInfo/OS/LoggedInUsers, value: 1,
+ timestamp: 1229099826317660000, flags:
+Name: /VirtualBox/GuestInfo/OS/NoLoggedInUsers, value: false,
+ timestamp: 1229098455580553000, flags:
+Name: /VirtualBox/GuestInfo/Net/Count, value: 1,
+ timestamp: 1229099826299785000, flags:
+Name: /VirtualBox/HostInfo/GUI/LanguageID, value: C,
+ timestamp: 1229098151272771000, flags:
+Name: /VirtualBox/GuestInfo/Net/0/V4/IP, value: 192.168.2.102,
+ timestamp: 1229099826300088000, flags:
+Name: /VirtualBox/GuestInfo/Net/0/V4/Broadcast, value: 255.255.255.255,
+ timestamp: 1229099826300220000, flags:
+Name: /VirtualBox/GuestInfo/Net/0/V4/Netmask, value: 255.255.255.0,
+ timestamp: 1229099826300350000, flags:
+Name: /VirtualBox/GuestInfo/Net/0/Status, value: Up,
+ timestamp: 1229099826300524000, flags:
+Name: /VirtualBox/GuestInfo/OS/LoggedInUsersList, value: username,
+ timestamp: 1229099826317386000, flags:</screen></para>
+
+ <para>To query the value of a single property, use the "get" subcommand
+ like this:<screen>$ VBoxManage guestproperty get "Windows Vista III"
+ "/VirtualBox/GuestInfo/OS/Product"
+VirtualBox Command Line Management Interface Version $VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILD
+(C) 2005-$VBOX_C_YEAR $VBOX_VENDOR
+All rights reserved.
+
+Value: Windows Vista Business Edition
+</screen></para>
+
+ <para>To add or change guest properties from the guest, use the tool
+ <computeroutput>VBoxControl</computeroutput>. This tool is included in the
+ Guest Additions of VirtualBox 2.2 or later. When started from a Linux
+ guest, this tool requires root privileges for security reasons:<screen>$ sudo VBoxControl guestproperty enumerate
+VirtualBox Guest Additions Command Line Management Interface Version $VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILD
+(C) 2009-$VBOX_C_YEAR $VBOX_VENDOR
+All rights reserved.
+
+Name: /VirtualBox/GuestInfo/OS/Release, value: 2.6.28-18-generic,
+ timestamp: 1265813265835667000, flags: &lt;NULL&gt;
+Name: /VirtualBox/GuestInfo/OS/Version, value: #59-Ubuntu SMP Thu Jan 28 01:23:03 UTC 2010,
+ timestamp: 1265813265836305000, flags: &lt;NULL&gt;
+ ...</screen></para>
+
+ <para>For more complex needs, you can use the VirtualBox programming
+ interfaces; see <xref linkend="VirtualBoxAPI" />.</para>
+ </sect1>
+
+ <sect1 id="guestadd-guestcontrol">
+ <title>Guest control</title>
+
+ <para>Starting with version 3.2, the Guest Additions of VirtualBox allow
+ starting applications inside a VM from the host system.</para>
+
+ <para>For this to work, the application needs to be installed inside the
+ guest; no additional software needs to be installed on the host.
+ Additionally, text mode output (to stdout and stderr) can be shown on the
+ host for further processing along with options to specify user credentials
+ and a timeout value (in milliseconds) to limit time the application is
+ able to run.</para>
+
+ <para>This feature can be used to automate deployment of software within
+ the guest.</para>
+
+ <para>Starting with version 4.0, the Guest Additions for Windows allow for
+ automatic updating (only already installed Guest Additions 4.0 or later).
+ Also, copying files from host to the guest as well as remotely creating
+ guest directories is available.</para>
+
+ <para>To use these features, use the VirtualBox command line, see <xref
+ linkend="vboxmanage-guestcontrol" />.</para>
+ </sect1>
+
+ <sect1>
+ <title>Memory overcommitment</title>
+
+ <para>In server environments with many VMs; the Guest Additions can be
+ used to share physical host memory between several VMs, reducing the total
+ amount of memory in use by the VMs. If memory usage is the limiting factor
+ and CPU resources are still available, this can help with packing more VMs
+ on each host.</para>
+
+ <sect2 id="guestadd-balloon">
+ <title>Memory ballooning</title>
+
+ <para>Starting with version 3.2, the Guest Additions of VirtualBox can
+ change the amount of host memory that a VM uses while the machine is
+ running. Because of how this is implemented, this feature is called
+ "memory ballooning".</para>
+
+ <note>
+ <para>VirtualBox supports memory ballooning only on 64-bit hosts, and
+ it is not supported on Mac OS X hosts.</para>
+ </note>
+
+ <para>Normally, to change the amount of memory allocated to a virtual
+ machine, one has to shut down the virtual machine entirely and modify
+ its settings. With memory ballooning, memory that was allocated for a
+ virtual machine can be given to another virtual machine without having
+ to shut the machine down.</para>
+
+ <para>When memory ballooning is requested, the VirtualBox Guest
+ Additions (which run inside the guest) allocate physical memory from the
+ guest operating system on the kernel level and lock this memory down in
+ the guest. This ensures that the guest will not use that memory any
+ longer: no guest applications can allocate it, and the guest kernel will
+ not use it either. VirtualBox can then re-use this memory and give it to
+ another virtual machine.</para>
+
+ <para>The memory made available through the ballooning mechanism is only
+ available for re-use by VirtualBox. It is <emphasis>not</emphasis>
+ returned as free memory to the host. Requesting balloon memory from a
+ running guest will therefore not increase the amount of free,
+ unallocated memory on the host. Effectively, memory ballooning is
+ therefore a memory overcommitment mechanism for multiple virtual
+ machines while they are running. This can be useful to temporarily start
+ another machine, or in more complicated environments, for sophisticated
+ memory management of many virtual machines that may be running in
+ parallel depending on how memory is used by the guests.</para>
+
+ <para>At this time, memory ballooning is only supported through
+ VBoxManage. Use the following command to increase or decrease the size
+ of the memory balloon within a running virtual machine that has Guest
+ Additions installed: <screen>VBoxManage controlvm "VM name" guestmemoryballoon &lt;n&gt;</screen>where
+ <computeroutput>"VM name"</computeroutput> is the name or UUID of the
+ virtual machine in question and
+ <computeroutput>&lt;n&gt;</computeroutput> is the amount of memory to
+ allocate from the guest in megabytes. See <xref
+ linkend="vboxmanage-controlvm" /> for more information.</para>
+
+ <para>You can also set a default balloon that will automatically be
+ requested from the VM every time after it has started up with the
+ following command: <screen>VBoxManage modifyvm "VM name" --guestmemoryballoon &lt;n&gt;</screen></para>
+
+ <para>By default, no balloon memory is allocated. This is a VM setting,
+ like other <computeroutput>modifyvm</computeroutput> settings, and
+ therefore can only be set while the machine is shut down; see <xref
+ linkend="vboxmanage-modifyvm" />.</para>
+ </sect2>
+
+ <sect2 id="guestadd-pagefusion">
+ <title>Page Fusion</title>
+
+ <para>Whereas memory ballooning simply reduces the amount of RAM that is
+ available to a VM, Page Fusion works differently: it avoids memory
+ duplication between several similar running VMs.</para>
+
+ <para>In a server environment running several similar VMs (e.g. with
+ identical operating systems) on the same host, lots of memory pages are
+ identical. VirtualBox's Page Fusion technology, introduced with
+ VirtualBox 3.2, is a novel technique to efficiently identify these
+ identical memory pages and share them between multiple VMs.<note>
+ <para>VirtualBox supports Page Fusion only on 64-bit hosts, and it
+ is not supported on Mac OS X hosts. Page Fusion currently works only
+ with Windows guests (2000 and later).</para>
+ </note></para>
+
+ <para>The more similar the VMs on a given host are, the more efficiently
+ Page Fusion can reduce the amount of host memory that is in use. It
+ therefore works best if all VMs on a host run identical operating
+ systems (e.g. Windows XP Service Pack 2). Instead of having a complete
+ copy of each operating system in each VM, Page Fusion identifies the
+ identical memory pages in use by these operating systems and eliminates
+ the duplicates, sharing host memory between several machines
+ ("deduplication"). If a VM tries to modify a page that has been shared
+ with other VMs, a new page is allocated again for that VM with a copy of
+ the shared page ("copy on write"). All this is fully transparent to the
+ virtual machine.</para>
+
+ <para>You may be familiar with this kind of memory overcommitment from
+ other hypervisor products, which call this feature "page sharing" or
+ "same page merging". However, Page Fusion differs significantly from
+ those other solutions, whose approaches have several
+ drawbacks:<orderedlist>
+ <listitem>
+ <para>Traditional hypervisors scan <emphasis>all</emphasis> guest
+ memory and compute checksums (hashes) for every single memory
+ page. Then, they look for pages with identical hashes and compare
+ the entire content of those pages; if two pages produce the same
+ hash, it is very likely that the pages are identical in content.
+ This, of course, can take rather long, especially if the system is
+ not idling. As a result, the additional memory only becomes
+ available after a significant amount of time (this can be hours or
+ even days!). Even worse, this kind of page sharing algorithm
+ generally consumes significant CPU resources and increases the
+ virtualization overhead by 10-20%.</para>
+
+ <para>Page Fusion in VirtualBox uses logic in the VirtualBox Guest
+ Additions to quickly identify memory cells that are most likely
+ identical across VMs. It can therefore achieve most of the
+ possible savings of page sharing almost immediately and with
+ almost no overhead.</para>
+ </listitem>
+
+ <listitem>
+ <para>Page Fusion is also much less likely to be confused by
+ identical memory that it will eliminate just to learn seconds
+ later that the memory will now change and having to perform a
+ highly expensive and often service-disrupting reallocation.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>At this time, Page Fusion can only be controlled with VBoxManage,
+ and only while a VM is shut down. To enable Page Fusion for a VM, use
+ the following command:<screen>VBoxManage modifyvm "VM name" --pagefusion on</screen></para>
+
+ <para>You can observe Page Fusion operation using some metrics.
+ <computeroutput>RAM/VMM/Shared</computeroutput> shows the total amount
+ of fused pages, whereas the per-VM metric
+ <computeroutput>Guest/RAM/Usage/Shared</computeroutput> will return the
+ amount of fused memory for a given VM. Please refer to <xref
+ linkend="metrics" /> for information on how to query metrics.</para>
+ </sect2>
+ </sect1>
+</chapter>
diff --git a/doc/manual/en_US/user_Installation.xml b/doc/manual/en_US/user_Installation.xml
new file mode 100644
index 00000000..0966e1cf
--- /dev/null
+++ b/doc/manual/en_US/user_Installation.xml
@@ -0,0 +1,868 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<chapter id="installation">
+ <title>Installation details</title>
+
+ <para>As installation of VirtualBox varies depending on your host operating
+ system, we provide installation instructions in four separate chapters for
+ Windows, Mac OS X, Linux and Solaris, respectively.</para>
+
+ <sect1 id="installation_windows">
+ <title>Installing on Windows hosts</title>
+
+ <sect2>
+ <title>Prerequisites</title>
+
+ <para>For the various versions of Windows that we support as host
+ operating systems, please refer to <xref
+ linkend="hostossupport" />.</para>
+
+ <para>In addition, Windows Installer 1.1 or higher must be present on
+ your system. This should be the case if you have all recent Windows
+ updates installed.</para>
+ </sect2>
+
+ <sect2>
+ <title>Performing the installation</title>
+
+ <para>The VirtualBox installation can be started <itemizedlist>
+ <listitem>
+ <para>either by double-clicking on its executable file (contains
+ both 32- and 64-bit architectures)</para>
+ </listitem>
+
+ <listitem>
+ <para>or by entering <screen>VirtualBox.exe -extract</screen></para>
+
+ <para>on the command line. This will extract both installers into
+ a temporary directory in which you'll then find the usual .MSI
+ files. Then you can do a <screen>msiexec /i VirtualBox-&lt;version&gt;-MultiArch_&lt;x86|amd64&gt;.msi</screen>
+ to perform the installation.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>In either case, this will display the installation welcome dialog
+ and allow you to choose where to install VirtualBox to and which
+ components to install. In addition to the VirtualBox application, the
+ following components are available:<glosslist>
+ <glossentry>
+ <glossterm>USB support</glossterm>
+
+ <glossdef>
+ <para>This package contains special drivers for your Windows
+ host that VirtualBox requires to fully support USB devices
+ inside your virtual machines.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Networking</glossterm>
+
+ <glossdef>
+ <para>This package contains extra networking drivers for your
+ Windows host that VirtualBox needs to support Bridged Networking
+ (to make your VM's virtual network cards accessible from other
+ machines on your physical network).</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Python Support</glossterm>
+
+ <glossdef>
+ <para>This package contains Python scripting support for the
+ VirtualBox API (see <xref linkend="VirtualBoxAPI" />). For this
+ to work, an already working Windows Python installation on the
+ system is required.<footnote>
+ <para>See, for example, <ulink
+ url="http://www.python.org/download/windows/">http://www.python.org/download/windows/</ulink>.</para>
+ </footnote></para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+
+ <para>Depending on your Windows configuration, you may see warnings
+ about "unsigned drivers" or similar. Please select "Continue" on these
+ warnings as otherwise VirtualBox might not function correctly after
+ installation.</para>
+
+ <para>The installer will create a "VirtualBox" group in the Windows
+ "Start" menu which allows you to launch the application and access its
+ documentation.</para>
+
+ <para>With standard settings, VirtualBox will be installed for all users
+ on the local system. In case this is not wanted, you have to invoke the
+ installer by first extracting it by using <screen>VirtualBox.exe -extract</screen>
+ and then do as follows: <screen>VirtualBox.exe -msiparams ALLUSERS=2</screen>
+ or <screen>msiexec /i VirtualBox-&lt;version&gt;-MultiArch_&lt;x86|amd64&gt;.msi ALLUSERS=2</screen>
+ on the extracted .MSI files. This will install VirtualBox only for the
+ current user.</para>
+
+ <para>If you do not want to install all features of VirtualBox, you can
+ set the optional <computeroutput>ADDLOCAL</computeroutput> parameter to
+ explicitly name the features to be installed. The following features are
+ available: <glosslist>
+ <glossentry>
+ <glossterm>VBoxApplication</glossterm>
+
+ <glossdef>
+ <para>Main binaries of VirtualBox.<note>
+ <para>This feature must not be absent since it contains the
+ minimum set of files to have working VirtualBox
+ installation.</para>
+ </note></para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>VBoxUSB</glossterm>
+
+ <glossdef>
+ <para>USB support.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>VBoxNetwork</glossterm>
+
+ <glossdef>
+ <para>All networking support; includes the VBoxNetworkFlt and
+ VBoxNetworkAdp features (see below).</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>VBoxNetworkFlt</glossterm>
+
+ <glossdef>
+ <para>Bridged networking support.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>VBoxNetworkAdp</glossterm>
+
+ <glossdef>
+ <para>Host-only networking support.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>VBoxPython</glossterm>
+
+ <glossdef>
+ <para>Python support.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist>For example, to only install USB support along with the
+ main binaries, do a: <screen>VirtualBox.exe -msiparams ADDLOCAL=VBoxApplication,VBoxUSB</screen>
+ or <screen>msiexec /i VirtualBox-&lt;version&gt;-MultiArch_&lt;x86|amd64&gt;.msi ADDLOCAL=VBoxApplication,VBoxUSB</screen></para>
+ </sect2>
+
+ <sect2>
+ <title>Uninstallation</title>
+
+ <para>As VirtualBox uses the standard Microsoft Windows installer,
+ VirtualBox can be safely uninstalled at any time by choosing the program
+ entry in the "Add/Remove Programs" applet in the Windows Control
+ Panel.</para>
+ </sect2>
+
+ <sect2>
+ <title>Unattended installation</title>
+
+ <para>Unattended installations can be performed using the standard MSI
+ support.</para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Installing on Mac OS X hosts</title>
+
+ <sect2>
+ <title>Performing the installation</title>
+
+ <para>For Mac OS X hosts, VirtualBox ships in a disk image
+ (<computeroutput>dmg</computeroutput>) file. Perform the following
+ steps: <orderedlist>
+ <listitem>
+ <para>Double-click on that file to have its contents
+ mounted.</para>
+ </listitem>
+
+ <listitem>
+ <para>A window will open telling you to double click on the
+ <computeroutput>VirtualBox.mpkg</computeroutput> installer file
+ displayed in that window.</para>
+ </listitem>
+
+ <listitem>
+ <para>This will start the installer, which will allow you to
+ select where to install VirtualBox to.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>After installation, you can find a VirtualBox icon in the
+ "Applications" folder in the Finder.</para>
+ </sect2>
+
+ <sect2>
+ <title>Uninstallation</title>
+
+ <para>To uninstall VirtualBox, open the disk image (dmg) file again and
+ double-click on the uninstall icon contained therein.</para>
+ </sect2>
+
+ <sect2>
+ <title>Unattended installation</title>
+
+ <para>To perform a non-interactive installation of VirtualBox you can
+ use the command line version of the installer application.</para>
+
+ <para>Mount the disk image (dmg) file as described in the normal
+ installation. Then open a terminal session and execute:</para>
+
+ <screen>sudo installer -pkg /Volumes/VirtualBox/VirtualBox.mpkg \
+ -target /Volumes/Macintosh\ HD</screen>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title id="install-linux-host">Installing on Linux hosts</title>
+
+ <sect2>
+ <title>Prerequisites</title>
+
+ <para>For the various versions of Linux that we support as host
+ operating systems, please refer to <xref
+ linkend="hostossupport" />.</para>
+
+ <para>You will need to install the following packages on your Linux
+ system before starting the installation (some systems will do this for
+ you automatically when you install VirtualBox):</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Qt 4.4.0 or higher;</para>
+ </listitem>
+
+ <listitem>
+ <para>SDL 1.2.7 or higher (this graphics library is typically called
+ <computeroutput>libsdl</computeroutput> or similar).</para>
+ </listitem>
+ </itemizedlist>
+
+ <note>
+ <para>To be precise, these packages are only required if you want to
+ run the VirtualBox graphical user interfaces. In particular,
+ <computeroutput>VirtualBox</computeroutput>, the graphical VirtualBox
+ manager, requires both Qt and SDL;
+ <computeroutput>VBoxSDL</computeroutput>, our simplified GUI, requires
+ only SDL. By contrast, if you only want to run
+ <computeroutput>VBoxHeadless</computeroutput>, neither Qt nor SDL are
+ required.</para>
+ </note>
+ </sect2>
+
+ <sect2 id="externalkernelmodules">
+ <title>The VirtualBox kernel module</title>
+
+ <para>VirtualBox uses a special kernel module called
+ <computeroutput>vboxdrv</computeroutput> to perform physical memory
+ allocation and to gain control of the processor for guest system
+ execution. Without this kernel module, you can still use the VirtualBox
+ manager to configure virtual machines, but they will not start. In
+ addition, there are the network kernel modules
+ <computeroutput>vboxnetflt</computeroutput> and
+ <computeroutput>vboxnetadp</computeroutput> which are required for the
+ more advanced networking features of VirtualBox.</para>
+
+ <para>The VirtualBox kernel module is automatically installed on your
+ system when you install VirtualBox. To maintain it with future kernel
+ updates, for those Linux distributions which provide it -- most current
+ ones -- we recommend installing Dynamic Kernel Module Support
+ (DKMS)<footnote>
+ <para>See <ulink
+ url="http://en.wikipedia.org/wiki/Dynamic_Kernel_Module_Support">http://en.wikipedia.org/wiki/Dynamic_Kernel_Module_Support</ulink>
+ for an introduction.</para>
+ </footnote>. This framework helps with building and upgrading kernel
+ modules.</para>
+
+ <para>If DKMS is not already installed, execute one of the following:
+ <itemizedlist>
+ <listitem>
+ <para>On an Ubuntu system:</para>
+
+ <screen>sudo apt-get install dkms</screen>
+ </listitem>
+
+ <listitem>
+ <para>On a Fedora system:<screen>yum install dkms</screen></para>
+ </listitem>
+
+ <listitem>
+ <para>On a Mandriva or Mageia system:<screen>urpmi dkms</screen></para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>If DKMS is available and installed, the VirtualBox kernel module
+ should always work automatically, and it will be automatically rebuilt
+ if your host kernel is updated.</para>
+
+ <para>Otherwise, there are only two situations in which you will need to
+ worry about the kernel module:<orderedlist>
+ <listitem>
+ <para>The original installation fails. This probably means that
+ your Linux system is not prepared for building external kernel
+ modules.</para>
+
+ <para>Most Linux distributions can be set up simply by installing
+ the right packages - normally, these will be the GNU compiler
+ (GCC), GNU Make (make) and packages containing header files for
+ your kernel - and making sure that all system updates are
+ installed and that the system is running the most up-to-date
+ kernel included in the distribution. <emphasis>The version numbers
+ of the header file packages must be the same as that of the kernel
+ you are using.</emphasis></para>
+
+ <itemizedlist>
+ <listitem>
+ <para>With Debian and Ubuntu releases, you must install the
+ right version of the
+ <computeroutput>linux-headers</computeroutput> and if it
+ exists the <computeroutput>linux-kbuild</computeroutput>
+ package. Current Ubuntu releases should have the right
+ packages installed by default.</para>
+ </listitem>
+
+ <listitem>
+ <para>In even older Debian and Ubuntu releases, you must
+ install the right version of the
+ <computeroutput>kernel-headers</computeroutput>
+ package.</para>
+ </listitem>
+
+ <listitem>
+ <para>On Fedora and Redhat systems, the package is
+ <computeroutput>kernel-devel</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para>On SUSE and openSUSE Linux, you must install the right
+ versions of the <computeroutput>kernel-source</computeroutput>
+ and <computeroutput>kernel-syms</computeroutput>
+ packages.</para>
+ </listitem>
+
+ <listitem>
+ <para>If you have built your own kernel, you will need to make
+ sure that you also installed all the required header and other
+ files for building external modules to the right locations.
+ The details of how to do this will depend on how you built
+ your kernel, and if you are unsure you should consult the
+ documentation which you followed to do so.</para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+
+ <listitem>
+ <para>The kernel of your Linux host was updated and DKMS is not
+ installed. In that case, the kernel module will need to be
+ reinstalled by executing (as root):</para>
+
+ <screen>/etc/init.d/vboxdrv setup</screen>
+ </listitem>
+ </orderedlist></para>
+ </sect2>
+
+ <sect2>
+ <title>Performing the installation</title>
+
+ <para>VirtualBox is available in a number of package formats native to
+ various common Linux distributions (see <xref linkend="hostossupport" />
+ for details). In addition, there is an alternative generic installer
+ (.run) which should work on most Linux distributions.</para>
+
+ <sect3>
+ <title>Installing VirtualBox from a Debian/Ubuntu package</title>
+
+ <para>First, download the appropriate package for your distribution.
+ The following examples assume that you are installing to a 32-bit
+ Ubuntu Karmic system. Use <computeroutput>dpkg</computeroutput> to
+ install the Debian package:</para>
+
+ <screen>sudo dpkg -i VirtualBox-3.2_$VBOX_VERSION_STRING_Ubuntu_karmic_i386.deb</screen>
+
+ <para>You will be asked to accept the VirtualBox Personal Use and
+ Evaluation License. Unless you answer "yes" here, the installation
+ will be aborted.</para>
+
+ <para>The installer will also search for a VirtualBox kernel module
+ suitable for your kernel. The package includes pre-compiled modules
+ for the most common kernel configurations. If no suitable kernel
+ module is found, the installation script tries to build a module
+ itself. If the build process is not successful you will be shown a
+ warning and the package will be left unconfigured. Please have a look
+ at <computeroutput>/var/log/vbox-install.log</computeroutput> to find
+ out why the compilation failed. You may have to install the
+ appropriate Linux kernel headers (see <xref
+ linkend="externalkernelmodules" />). After correcting any problems, do
+ <screen>sudo /etc/init.d/vboxdrv setup</screen>This will start a
+ second attempt to build the module.</para>
+
+ <para>If a suitable kernel module was found in the package or the
+ module was successfully built, the installation script will attempt to
+ load that module. If this fails, please see <xref
+ linkend="ts_linux-kernelmodule-fails-to-load" /> for further
+ information.</para>
+
+ <para>Once VirtualBox has been successfully installed and configured,
+ you can start it by selecting "VirtualBox" in your start menu or from
+ the command line (see <xref linkend="startingvboxonlinux" />).</para>
+ </sect3>
+
+ <sect3>
+ <title>Using the alternative installer (VirtualBox.run)</title>
+
+ <para>The alternative installer performs the following steps:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>It unpacks the application files to the target directory,
+ <screen>/opt/VirtualBox/</screen> which cannot be changed.</para>
+ </listitem>
+
+ <listitem>
+ <para>It builds the VirtualBox kernel modules
+ (<computeroutput>vboxdrv</computeroutput>,
+ <computeroutput>vboxnetflt</computeroutput> and
+ <computeroutput>vboxnetadp</computeroutput>) and installs
+ them.</para>
+ </listitem>
+
+ <listitem>
+ <para>It creates
+ <computeroutput>/etc/init.d/vboxdrv</computeroutput>, an init
+ script to start the VirtualBox kernel module.</para>
+ </listitem>
+
+ <listitem>
+ <para>It creates a new system group called
+ <computeroutput>vboxusers</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para>It creates symbolic links in
+ <computeroutput>/usr/bin</computeroutput> to the a shell script
+ (<computeroutput>/opt/VirtualBox/VBox</computeroutput>) which does
+ some sanity checks and dispatches to the actual executables,
+ <computeroutput>VirtualBox</computeroutput>,
+ <computeroutput>VBoxSDL</computeroutput>,
+ <computeroutput>VBoxVRDP</computeroutput>,
+ <computeroutput>VBoxHeadless</computeroutput> and
+ <computeroutput>VBoxManage</computeroutput></para>
+ </listitem>
+
+ <listitem>
+ <para>It creates
+ <computeroutput>/etc/udev/rules.d/10-vboxdrv.rules</computeroutput>,
+ a description file for udev, if that is present, which makes the
+ USB devices accessible to all users in the
+ <computeroutput>vboxusers</computeroutput> group.</para>
+ </listitem>
+
+ <listitem>
+ <para>It writes the installation directory to
+ <computeroutput>/etc/vbox/vbox.cfg</computeroutput>.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>The installer must be executed as root with either
+ <computeroutput>install</computeroutput> or
+ <computeroutput>uninstall</computeroutput> as the first
+ parameter.</para>
+
+ <screen>sudo ./VirtualBox.run install</screen>
+
+ <para>Or if you do not have the "sudo" command available, run the
+ following as root instead:<screen>./VirtualBox.run install</screen></para>
+
+ <para>After that you need to put every user which should be able to
+ access USB devices from VirtualBox guests in the group
+ <computeroutput>vboxusers</computeroutput>, either through the GUI
+ user management tools or by running the following command as
+ root:</para>
+
+ <screen>sudo usermod -a -G vboxusers username</screen>
+
+ <para><note>
+ <para>The <computeroutput>usermod</computeroutput> command of some
+ older Linux distributions does not support the
+ <computeroutput>-a</computeroutput> option (which adds the user to
+ the given group without affecting membership of other groups). In
+ this case, find out the current group memberships with the
+ <computeroutput>groups</computeroutput> command and add all these
+ groups in a comma-separated list to the command line after the
+ <computeroutput>-G</computeroutput> option, e.g. like this:
+ <computeroutput>usermod -G group1,group2,vboxusers
+ username</computeroutput>.</para>
+ </note></para>
+ </sect3>
+
+ <sect3>
+ <title>Performing a manual installation</title>
+
+ <para>If, for any reason, you cannot use the shell script installer
+ described previously, you can also perform a manual installation.
+ Invoke the installer like this:</para>
+
+ <screen>./VirtualBox.run --keep --noexec</screen>
+
+ <para>This will unpack all the files needed for installation in the
+ directory <computeroutput>install</computeroutput> under the current
+ directory. The VirtualBox application files are contained in
+ <computeroutput>VirtualBox.tar.bz2</computeroutput> which you can
+ unpack to any directory on your system. For example:</para>
+
+ <screen>sudo mkdir /opt/VirtualBox
+sudo tar jxf ./install/VirtualBox.tar.bz2 -C /opt/VirtualBox</screen>
+
+ <para>or as root:<screen>mkdir /opt/VirtualBox
+tar jxf ./install/VirtualBox.tar.bz2 -C /opt/VirtualBox</screen></para>
+
+ <para>The sources for VirtualBox's kernel module are provided in the
+ <computeroutput>src</computeroutput> directory. To build the module,
+ change to the directory and issue</para>
+
+ <screen>make</screen>
+
+ <para>If everything builds correctly, issue the following command to
+ install the module to the appropriate module directory:</para>
+
+ <screen>sudo make install</screen>
+
+ <para>In case you do not have sudo, switch the user account to root
+ and perform<screen>make install</screen></para>
+
+ <para>The VirtualBox kernel module needs a device node to operate. The
+ above make command will tell you how to create the device node,
+ depending on your Linux system. The procedure is slightly different
+ for a classical Linux setup with a
+ <computeroutput>/dev</computeroutput> directory, a system with the now
+ deprecated <computeroutput>devfs</computeroutput> and a modern Linux
+ system with <computeroutput>udev</computeroutput>.</para>
+
+ <para>On certain Linux distributions, you might experience
+ difficulties building the module. You will have to analyze the error
+ messages from the build system to diagnose the cause of the problems.
+ In general, make sure that the correct Linux kernel sources are used
+ for the build process.</para>
+
+ <para>Note that the <computeroutput>/dev/vboxdrv</computeroutput>
+ kernel module device node must be owned by root:root and must be
+ read/writable only for the user.</para>
+
+ <para>Next, you will have to install the system initialization script
+ for the kernel module:<screen>cp /opt/VirtualBox/vboxdrv.sh /etc/init.d/vboxdrv</screen>(assuming
+ you installed VirtualBox to the
+ <computeroutput>/opt/VirtualBox</computeroutput> directory) and
+ activate the initialization script using the right method for your
+ distribution. You should create VirtualBox's configuration
+ file:<screen>mkdir /etc/vbox
+echo INSTALL_DIR=/opt/VirtualBox &gt; /etc/vbox/vbox.cfg</screen>and, for
+ convenience, create the following symbolic links:</para>
+
+ <screen>ln -sf /opt/VirtualBox/VBox.sh /usr/bin/VirtualBox
+ln -sf /opt/VirtualBox/VBox.sh /usr/bin/VBoxManage
+ln -sf /opt/VirtualBox/VBox.sh /usr/bin/VBoxHeadless
+ln -sf /opt/VirtualBox/VBox.sh /usr/bin/VBoxSDL</screen>
+ </sect3>
+
+ <sect3>
+ <title>Updating and uninstalling VirtualBox</title>
+
+ <para>Before updating or uninstalling VirtualBox, you must terminate
+ any virtual machines which are currently running and exit the
+ VirtualBox or VBoxSVC applications. To update VirtualBox, simply run
+ the installer of the updated version. To uninstall VirtualBox, invoke
+ the installer like this: <screen>sudo ./VirtualBox.run uninstall</screen>
+ or as root<screen>./VirtualBox.run uninstall</screen>. Starting with
+ version 2.2.2, you can uninstall the .run package by invoking <screen>/opt/VirtualBox/uninstall.sh</screen>To
+ manually uninstall VirtualBox, simply undo the steps in the manual
+ installation in reverse order.</para>
+ </sect3>
+
+ <sect3>
+ <title>Automatic installation of Debian packages</title>
+
+ <para>The Debian packages will request some user feedback when
+ installed for the first time. The debconf system is used to perform
+ this task. To prevent any user interaction during installation,
+ default values can be defined. A file
+ <computeroutput>vboxconf</computeroutput> can contain the following
+ debconf settings: <screen>virtualbox virtualbox/module-compilation-allowed boolean true
+virtualbox virtualbox/delete-old-modules boolean true</screen>The first line
+ allows compilation of the vboxdrv kernel module if no module was found
+ for the current kernel. The second line allows the package to delete
+ any old vboxdrv kernel modules compiled by previous
+ installations.</para>
+
+ <para>These default settings can be applied with <screen>debconf-set-selections vboxconf</screen>
+ prior to the installation of the VirtualBox Debian package.</para>
+
+ <para>In addition there are some common configuration options that can
+ be set prior to the installation, described in <xref
+ linkend="linux_install_opts" />.</para>
+ </sect3>
+
+ <sect3>
+ <title>Automatic installation of .rpm packages</title>
+
+ <para>The .rpm format does not provide a configuration system
+ comparable to the debconf system. See <xref
+ linkend="linux_install_opts" /> for how to set some common
+ installation options provided by VirtualBox.</para>
+ </sect3>
+
+ <sect3>
+ <title id="linux_install_opts">Automatic installation options</title>
+
+ <para>To configure the installation process of our .deb and .rpm
+ packages, you can create a response file named
+ <computeroutput>/etc/default/virtualbox</computeroutput>. The
+ automatic generation of the udev rule can be prevented by the
+ following setting: <screen>INSTALL_NO_UDEV=1</screen> The creation of
+ the group vboxusers can be prevented by <screen>INSTALL_NO_GROUP=1</screen>
+ If the line <screen>INSTALL_NO_VBOXDRV=1</screen> is specified, the
+ package installer will not try to build the
+ <computeroutput>vboxdrv</computeroutput> kernel module if no module
+ fitting the current kernel was found.</para>
+ </sect3>
+ </sect2>
+
+ <sect2>
+ <title>The vboxusers group</title>
+
+ <para>The Linux installers create the system user group
+ <computeroutput>vboxusers</computeroutput> during installation. Any
+ system user who is going to use USB devices from VirtualBox guests must
+ be a member of that group. A user can be made a member of the group
+ <computeroutput>vboxusers</computeroutput> through the GUI user/group
+ management or at the command line with</para>
+
+ <screen>sudo usermod -a -G vboxusers username</screen>
+
+ <para>Note that adding an active user to that group will require that
+ user to log out and back in again. This should be done manually after
+ successful installation of the package.</para>
+ </sect2>
+
+ <sect2 id="startingvboxonlinux">
+ <title>Starting VirtualBox on Linux</title>
+
+ <para>The easiest way to start a VirtualBox program is by running the
+ program of your choice (<computeroutput>VirtualBox</computeroutput>,
+ <computeroutput>VBoxManage</computeroutput>,
+ <computeroutput>VBoxSDL</computeroutput> or
+ <computeroutput>VBoxHeadless</computeroutput>) from a terminal. These
+ are symbolic links to <computeroutput>VBox.sh</computeroutput> that
+ start the required program for you.</para>
+
+ <para>The following detailed instructions should only be of interest if
+ you wish to execute VirtualBox without installing it first. You should
+ start by compiling the <computeroutput>vboxdrv</computeroutput> kernel
+ module (see above) and inserting it into the Linux kernel. VirtualBox
+ consists of a service daemon (<computeroutput>VBoxSVC</computeroutput>)
+ and several application programs. The daemon is automatically started if
+ necessary. All VirtualBox applications will communicate with the daemon
+ through Unix local domain sockets. There can be multiple daemon
+ instances under different user accounts and applications can only
+ communicate with the daemon running under the user account as the
+ application. The local domain socket resides in a subdirectory of your
+ system's directory for temporary files called
+ <computeroutput>.vbox-&lt;username&gt;-ipc</computeroutput>. In case of
+ communication problems or server startup problems, you may try to remove
+ this directory.</para>
+
+ <para>All VirtualBox applications
+ (<computeroutput>VirtualBox</computeroutput>,
+ <computeroutput>VBoxSDL</computeroutput>,
+ <computeroutput>VBoxManage</computeroutput> and
+ <computeroutput>VBoxHeadless</computeroutput>) require the VirtualBox
+ directory to be in the library path:</para>
+
+ <screen>LD_LIBRARY_PATH=. ./VBoxManage showvminfo "Windows XP"</screen>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title id="install-solaris-host">Installing on Solaris hosts</title>
+
+ <para>For the specific versions of Solaris that we support as host
+ operating systems, please refer to <xref
+ linkend="hostossupport" />.</para>
+
+ <para>If you have a previously installed instance of VirtualBox on your
+ Solaris host, please uninstall it first before installing a new instance.
+ Refer to <xref linkend="uninstallsolhost" /> for uninstall
+ instructions.</para>
+
+ <sect2>
+ <title>Performing the installation</title>
+
+ <para>VirtualBox is available as a standard Solaris package. Download
+ the VirtualBox SunOS package which includes both the 32-bit and 64-bit
+ versions of VirtualBox. <emphasis>The installation must be performed as
+ root and from the global zone</emphasis> as the VirtualBox installer
+ loads kernel drivers which cannot be done from non-global zones. To
+ verify which zone you are currently in, execute the
+ <computeroutput>zonename</computeroutput> command. Execute the following
+ commands:</para>
+
+ <screen>gunzip -cd VirtualBox-$VBOX_VERSION_STRING-SunOS.tar.gz | tar xvf -</screen>
+
+ <para>Starting with VirtualBox 3.1 the VirtualBox kernel package is no
+ longer a separate package and has been integrated into the main package.
+ Install the VirtualBox package using:</para>
+
+ <screen>pkgadd -d VirtualBox-$VBOX_VERSION_STRING-SunOS.pkg</screen>
+
+ <note>
+ <para>If you are using Solaris Zones, to install VirtualBox only into
+ the current zone and not into any other zone, use
+ <computeroutput>pkgadd -G</computeroutput>. For more information refer
+ to the <computeroutput>pkgadd</computeroutput> manual; see also <xref
+ linkend="solariszones" />.</para>
+ </note>
+
+ <para>The installer will then prompt you to enter the package you wish
+ to install. Choose "1" or "all" and proceed. Next the installer will ask
+ you if you want to allow the postinstall script to be executed. Choose
+ "y" and proceed as it is essential to execute this script which installs
+ the VirtualBox kernel module. Following this confirmation the installer
+ will install VirtualBox and execute the postinstall setup script.</para>
+
+ <para>Once the postinstall script has been executed your installation is
+ now complete. You may now safely delete the uncompressed package and
+ <computeroutput>autoresponse</computeroutput> files from your system.
+ VirtualBox would be installed in
+ <computeroutput>/opt/VirtualBox</computeroutput>.</para>
+ </sect2>
+
+ <sect2>
+ <title>The vboxuser group</title>
+
+ <para>Starting with VirtualBox 4.1, the installer creates the system
+ user group <computeroutput>vboxuser</computeroutput> during installation
+ for Solaris hosts that support the USB features required by VirtualBox.
+ Any system user who is going to use USB devices from VirtualBox guests
+ must be a member of this group. A user can be made a member of this
+ group through the GUI user/group management or at the command line by
+ executing as root:</para>
+
+ <screen>usermod -G vboxuser username</screen>
+
+ <para>Note that adding an active user to that group will require that
+ user to log out and back in again. This should be done manually after
+ successful installation of the package.</para>
+ </sect2>
+
+ <sect2>
+ <title>Starting VirtualBox on Solaris</title>
+
+ <para>The easiest way to start a VirtualBox program is by running the
+ program of your choice (<computeroutput>VirtualBox</computeroutput>,
+ <computeroutput>VBoxManage</computeroutput>,
+ <computeroutput>VBoxSDL</computeroutput> or
+ <computeroutput>VBoxHeadless</computeroutput>) from a terminal. These
+ are symbolic links to <computeroutput>VBox.sh</computeroutput> that
+ start the required program for you.</para>
+
+ <para>Alternatively, you can directly invoke the required programs from
+ <computeroutput>/opt/VirtualBox</computeroutput>. Using the links
+ provided is easier as you do not have to type the full path.</para>
+
+ <para>You can configure some elements of the
+ <computeroutput>VirtualBox</computeroutput> Qt GUI such as fonts and
+ colours by executing <computeroutput>VBoxQtconfig</computeroutput> from
+ the terminal.</para>
+ </sect2>
+
+ <sect2>
+ <title id="uninstallsolhost">Uninstallation</title>
+
+ <para>Uninstallation of VirtualBox on Solaris requires root permissions.
+ To perform the uninstallation, start a root terminal session and
+ execute:</para>
+
+ <screen>pkgrm SUNWvbox</screen>
+
+ <para>After confirmation, this will remove VirtualBox from your
+ system.</para>
+
+ <para>If you are uninstalling VirtualBox version 3.0 or lower, you need
+ to remove the VirtualBox kernel interface package, execute:</para>
+
+ <para><screen>pkgrm SUNWvboxkern</screen></para>
+ </sect2>
+
+ <sect2>
+ <title>Unattended installation</title>
+
+ <para>To perform a non-interactive installation of VirtualBox we have
+ provided a response file named
+ <computeroutput>autoresponse</computeroutput> that the installer will
+ use for responses to inputs rather than ask them from you.</para>
+
+ <para>Extract the tar.gz package as described in the normal
+ installation. Then open a root terminal session and execute:</para>
+
+ <screen>pkgadd -d VirtualBox-$VBOX_VERSION_STRING-SunOS-x86 -n -a autoresponse SUNWvbox</screen>
+
+ <para>To perform a non-interactive uninstallation, open a root terminal
+ session and execute:</para>
+
+ <screen>pkgrm -n -a /opt/VirtualBox/autoresponse SUNWvbox</screen>
+ </sect2>
+
+ <sect2>
+ <title id="solariszones">Configuring a zone for running
+ VirtualBox</title>
+
+ <para>Starting with VirtualBox 1.6 it is possible to run VirtualBox from
+ within Solaris zones. For an introduction of Solaris zones, please refer
+ to <ulink
+ url="http://www.sun.com/bigadmin/features/articles/solaris_zones.jsp">http://www.sun.com/bigadmin/features/articles/solaris_zones.jsp</ulink>.</para>
+
+ <para>Assuming that VirtualBox has already been installed into your
+ zone, you need to give the zone access to VirtualBox's device node. This
+ is done by performing the following steps. Start a root terminal and
+ execute:</para>
+
+ <screen>zonecfg -z vboxzone</screen>
+
+ <para>Inside the <computeroutput>zonecfg</computeroutput> prompt add the
+ <computeroutput>device</computeroutput> resource and
+ <computeroutput>match</computeroutput> properties to the zone. Here's
+ how it can be done:</para>
+
+ <screen>zonecfg:vboxzone&gt;add device
+zonecfg:vboxzone:device&gt;set match=/dev/vboxdrv
+zonecfg:vboxzone:device&gt;end
+zonecfg:vboxzone&gt;verify
+zonecfg:vboxzone&gt;exit</screen>
+
+ <para>If you are running VirtualBox 2.2.0 or above on Solaris 11 or
+ Nevada hosts, you should add a device for
+ <computeroutput>/dev/vboxusbmon</computeroutput> too, similar to what
+ was shown above. This does not apply to Solaris 10 hosts due to lack of
+ USB support.</para>
+
+ <para>Replace "vboxzone" with the name of the zone in which you intend
+ to run VirtualBox. Next reboot the zone using
+ <computeroutput>zoneadm</computeroutput> and you should be able to run
+ VirtualBox from within the configured zone.</para>
+ </sect2>
+ </sect1>
+</chapter> \ No newline at end of file
diff --git a/doc/manual/en_US/user_Introduction.xml b/doc/manual/en_US/user_Introduction.xml
new file mode 100644
index 00000000..e4f4b03d
--- /dev/null
+++ b/doc/manual/en_US/user_Introduction.xml
@@ -0,0 +1,1691 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<chapter>
+ <title id="Introduction">First steps</title>
+
+ <para>Welcome to $VBOX_PRODUCT!</para>
+
+ <para>VirtualBox is a cross-platform virtualization application. What does
+ that mean? For one thing, it installs on your existing Intel or AMD-based
+ computers, whether they are running Windows, Mac, Linux or Solaris operating
+ systems. Secondly, it extends the capabilities of your existing computer so
+ that it can run multiple operating systems (inside multiple virtual
+ machines) at the same time. So, for example, you can run Windows and Linux
+ on your Mac, run Windows Server 2008 on your Linux server, run Linux on your
+ Windows PC, and so on, all alongside your existing applications. You can
+ install and run as many virtual machines as you like -- the only practical
+ limits are disk space and memory.</para>
+
+ <para>VirtualBox is deceptively simple yet also very powerful. It can run
+ everywhere from small embedded systems or desktop class machines all the way
+ up to datacenter deployments and even Cloud environments.</para>
+
+ <para>The following screenshot shows you how VirtualBox, installed on a Mac
+ computer, is running Windows 7 in a virtual machine window:</para>
+
+ <para><mediaobject>
+ <imageobject>
+ <imagedata align="center" fileref="images/vm-vista-running.png"
+ width="14cm" />
+ </imageobject>
+ </mediaobject></para>
+
+ <para>In this User Manual, we'll begin simply with a quick introduction to
+ virtualization and how to get your first virtual machine running with the
+ easy-to-use VirtualBox graphical user interface. Subsequent chapters will go
+ into much more detail covering more powerful tools and features, but
+ fortunately, it is not necessary to read the entire User Manual before you
+ can use VirtualBox.</para>
+
+ <para>You can find a summary of VirtualBox's capabilities in <xref
+ linkend="features-overview" />. For existing VirtualBox users who just want
+ to see what's new in this release, there is a detailed list in <xref
+ linkend="ChangeLog" />.</para>
+
+ <sect1>
+ <title>Why is virtualization useful?</title>
+
+ <para>The techniques and features that VirtualBox provides are useful for
+ several scenarios:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">Running multiple operating systems
+ simultaneously.</emphasis> VirtualBox allows you to run more than one
+ operating system at a time. This way, you can run software written for
+ one operating system on another (for example, Windows software on
+ Linux or a Mac) without having to reboot to use it. Since you can
+ configure what kinds of "virtual" hardware should be presented to each
+ such operating system, you can install an old operating system such as
+ DOS or OS/2 even if your real computer's hardware is no longer
+ supported by that operating system.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Easier software installations.</emphasis>
+ Software vendors can use virtual machines to ship entire software
+ configurations. For example, installing a complete mail server
+ solution on a real machine can be a tedious task. With VirtualBox,
+ such a complex setup (then often called an "appliance") can be packed
+ into a virtual machine. Installing and running a mail server becomes
+ as easy as importing such an appliance into VirtualBox.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Testing and disaster recovery.</emphasis>
+ Once installed, a virtual machine and its virtual hard disks can be
+ considered a "container" that can be arbitrarily frozen, woken up,
+ copied, backed up, and transported between hosts.</para>
+
+ <para>On top of that, with the use of another VirtualBox feature
+ called "snapshots", one can save a particular state of a virtual
+ machine and revert back to that state, if necessary. This way, one can
+ freely experiment with a computing environment. If something goes
+ wrong (e.g. after installing misbehaving software or infecting the
+ guest with a virus), one can easily switch back to a previous snapshot
+ and avoid the need of frequent backups and restores.</para>
+
+ <para>Any number of snapshots can be created, allowing you to travel
+ back and forward in virtual machine time. You can delete snapshots
+ while a VM is running to reclaim disk space.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Infrastructure consolidation.</emphasis>
+ Virtualization can significantly reduce hardware and electricity
+ costs. Most of the time, computers today only use a fraction of their
+ potential power and run with low average system loads. A lot of
+ hardware resources as well as electricity is thereby wasted. So,
+ instead of running many such physical computers that are only
+ partially used, one can pack many virtual machines onto a few powerful
+ hosts and balance the loads between them.</para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title id="virtintro">Some terminology</title>
+
+ <para>When dealing with virtualization (and also for understanding the
+ following chapters of this documentation), it helps to acquaint oneself
+ with a bit of crucial terminology, especially the following terms:</para>
+
+ <glosslist>
+ <glossentry>
+ <glossterm>Host operating system (host OS).</glossterm>
+
+ <glossdef>
+ <para>This is the operating system of the physical computer on which
+ VirtualBox was installed. There are versions of VirtualBox for
+ Windows, Mac OS X, Linux and Solaris hosts; for details, please see
+ <xref linkend="hostossupport" />.</para>
+
+ <para>Most of the time, this User Manual discusses all VirtualBox
+ versions together. There may be platform-specific differences which
+ we will point out where appropriate.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Guest operating system (guest OS).</glossterm>
+
+ <glossdef>
+ <para>This is the operating system that is running inside the
+ virtual machine. Theoretically, VirtualBox can run any x86 operating
+ system (DOS, Windows, OS/2, FreeBSD, OpenBSD), but to achieve
+ near-native performance of the guest code on your machine, we had to
+ go through a lot of optimizations that are specific to certain
+ operating systems. So while your favorite operating system
+ <emphasis>may</emphasis> run as a guest, we officially support and
+ optimize for a select few (which, however, include the most common
+ ones).</para>
+
+ <para>See <xref linkend="guestossupport" /> for details.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Virtual machine (VM).</glossterm>
+
+ <glossdef>
+ <para>This is the special environment that VirtualBox creates for
+ your guest operating system while it is running. In other words, you
+ run your guest operating system "in" a VM. Normally, a VM will be
+ shown as a window on your computer's desktop, but depending on which
+ of the various frontends of VirtualBox you use, it can be displayed
+ in full screen mode or remotely on another computer.</para>
+
+ <para>In a more abstract way, internally, VirtualBox thinks of a VM
+ as a set of parameters that determine its behavior. They include
+ hardware settings (how much memory the VM should have, what hard
+ disks VirtualBox should virtualize through which container files,
+ what CDs are mounted etc.) as well as state information (whether the
+ VM is currently running, saved, its snapshots etc.). These settings
+ are mirrored in the VirtualBox Manager window as well as the
+ <computeroutput>VBoxManage</computeroutput> command line program;
+ see <xref linkend="vboxmanage" />. In other words, a VM is also what
+ you can see in its settings dialog.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Guest Additions.</glossterm>
+
+ <glossdef>
+ <para>This refers to special software packages which are shipped
+ with VirtualBox but designed to be installed
+ <emphasis>inside</emphasis> a VM to improve performance of the guest
+ OS and to add extra features. This is described in detail in <xref
+ linkend="guestadditions" />.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist>
+ </sect1>
+
+ <sect1 id="features-overview">
+ <title>Features overview</title>
+
+ <para>Here's a brief outline of VirtualBox's main features:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">Portability.</emphasis> VirtualBox runs on
+ a large number of 32-bit and 64-bit host operating systems (again, see
+ <xref linkend="hostossupport" /> for details).</para>
+
+ <para>VirtualBox is a so-called "hosted" hypervisor (sometimes
+ referred to as a "type 2" hypervisor). Whereas a "bare-metal" or "type
+ 1" hypervisor would run directly on the hardware, VirtualBox requires
+ an existing operating system to be installed. It can thus run
+ alongside existing applications on that host.</para>
+
+ <para>To a very large degree, VirtualBox is functionally identical on
+ all of the host platforms, and the same file and image formats are
+ used. This allows you to run virtual machines created on one host on
+ another host with a different host operating system; for example, you
+ can create a virtual machine on Windows and then run it under
+ Linux.</para>
+
+ <para>In addition, virtual machines can easily be imported and
+ exported using the Open Virtualization Format (OVF, see <xref
+ linkend="ovf" />), an industry standard created for this purpose. You
+ can even import OVFs that were created with a different virtualization
+ software.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">No hardware virtualization
+ required.</emphasis> For many scenarios, VirtualBox does not require
+ the processor features built into newer hardware like Intel VT-x or
+ AMD-V. As opposed to many other virtualization solutions, you can
+ therefore use VirtualBox even on older hardware where these features
+ are not present. The technical details are explained in <xref
+ linkend="hwvirt" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Guest Additions: shared folders, seamless
+ windows, 3D virtualization.</emphasis> The VirtualBox Guest Additions
+ are software packages which can be installed
+ <emphasis>inside</emphasis> of supported guest systems to improve
+ their performance and to provide additional integration and
+ communication with the host system. After installing the Guest
+ Additions, a virtual machine will support automatic adjustment of
+ video resolutions, seamless windows, accelerated 3D graphics and more.
+ The Guest Additions are described in detail in <xref
+ linkend="guestadditions" />.</para>
+
+ <para>In particular, Guest Additions provide for "shared folders",
+ which let you access files from the host system from within a guest
+ machine. Shared folders are described in <xref
+ linkend="sharedfolders" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Great hardware support.</emphasis> Among
+ others, VirtualBox supports:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">Guest multiprocessing
+ (SMP).</emphasis> VirtualBox can present up to 32 virtual CPUs to
+ each virtual machine, irrespective of how many CPU cores are
+ physically present on your host.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">USB device support.</emphasis>
+ VirtualBox implements a virtual USB controller and allows you to
+ connect arbitrary USB devices to your virtual machines without
+ having to install device-specific drivers on the host. USB support
+ is not limited to certain device categories. For details, see
+ <xref linkend="settings-usb" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Hardware compatibility.</emphasis>
+ VirtualBox virtualizes a vast array of virtual devices, among them
+ many devices that are typically provided by other virtualization
+ platforms. That includes IDE, SCSI and SATA hard disk controllers,
+ several virtual network cards and sound cards, virtual serial and
+ parallel ports and an Input/Output Advanced Programmable Interrupt
+ Controller (I/O APIC), which is found in many modern PC systems.
+ This eases cloning of PC images from real machines and importing
+ of third-party virtual machines into VirtualBox.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Full ACPI support.</emphasis> The
+ Advanced Configuration and Power Interface (ACPI) is fully
+ supported by VirtualBox. This eases cloning of PC images from real
+ machines or third-party virtual machines into VirtualBox. With its
+ unique <emphasis role="bold">ACPI power status support,</emphasis>
+ VirtualBox can even report to ACPI-aware guest operating systems
+ the power status of the host. For mobile systems running on
+ battery, the guest can thus enable energy saving and notify the
+ user of the remaining power (e.g. in full screen modes).</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Multiscreen resolutions.</emphasis>
+ VirtualBox virtual machines support screen resolutions many times
+ that of a physical screen, allowing them to be spread over a large
+ number of screens attached to the host system.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Built-in iSCSI support.</emphasis>
+ This unique feature allows you to connect a virtual machine
+ directly to an iSCSI storage server without going through the host
+ system. The VM accesses the iSCSI target directly without the
+ extra overhead that is required for virtualizing hard disks in
+ container files. For details, see <xref
+ linkend="storage-iscsi" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">PXE Network boot.</emphasis> The
+ integrated virtual network cards of VirtualBox fully support
+ remote booting via the Preboot Execution Environment (PXE).</para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Multigeneration branched
+ snapshots.</emphasis> VirtualBox can save arbitrary snapshots of the
+ state of the virtual machine. You can go back in time and revert the
+ virtual machine to any such snapshot and start an alternative VM
+ configuration from there, effectively creating a whole snapshot tree.
+ For details, see <xref linkend="snapshots" />. You can create and
+ delete snapshots while the virtual machine is running.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Clean architecture; unprecedented
+ modularity.</emphasis> VirtualBox has an extremely modular design with
+ well-defined internal programming interfaces and a clean separation of
+ client and server code. This makes it easy to control it from several
+ interfaces at once: for example, you can start a VM simply by clicking
+ on a button in the VirtualBox graphical user interface and then
+ control that machine from the command line, or even remotely. See
+ <xref linkend="frontends" /> for details.</para>
+
+ <para>Due to its modular architecture, VirtualBox can also expose its
+ full functionality and configurability through a comprehensive
+ <emphasis role="bold">software development kit (SDK),</emphasis> which
+ allows for integrating every aspect of VirtualBox with other software
+ systems. Please see <xref linkend="VirtualBoxAPI" /> for
+ details.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Remote machine display.</emphasis> The
+ VirtualBox Remote Desktop Extension (VRDE) allows for high-performance
+ remote access to any running virtual machine. This extension supports
+ the Remote Desktop Protocol (RDP) originally built into Microsoft
+ Windows, with special additions for full client USB support.</para>
+
+ <para>The VRDE does not rely on the RDP server that is built into
+ Microsoft Windows; instead, it is plugged directly into the
+ virtualization layer. As a result, it works with guest operating
+ systems other than Windows (even in text mode) and does not require
+ application support in the virtual machine either. The VRDE is
+ described in detail in <xref linkend="vrde" />.</para>
+
+ <para>On top of this special capacity, VirtualBox offers you more
+ unique features:<itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">Extensible RDP
+ authentication.</emphasis> VirtualBox already supports Winlogon
+ on Windows and PAM on Linux for RDP authentication. In addition,
+ it includes an easy-to-use SDK which allows you to create
+ arbitrary interfaces for other methods of authentication; see
+ <xref linkend="vbox-auth" /> for details.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">USB over RDP.</emphasis> Via RDP
+ virtual channel support, VirtualBox also allows you to connect
+ arbitrary USB devices locally to a virtual machine which is
+ running remotely on a VirtualBox RDP server; see <xref
+ linkend="usb-over-rdp" /> for details.</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title id="hostossupport">Supported host operating systems</title>
+
+ <para>Currently, VirtualBox runs on the following host operating
+ systems:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">Windows</emphasis> hosts:<itemizedlist>
+ <listitem>
+ <para>Windows XP, all service packs (32-bit)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Server 2003 (32-bit)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Vista (32-bit and 64-bit<footnote>
+ <para>Support for 64-bit Windows was added with VirtualBox
+ 1.5.</para>
+ </footnote>).</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Server 2008 (32-bit and 64-bit)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows 7 (32-bit and 64-bit)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows 8 (32-bit and 64-bit)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Server 2012 (64-bit)</para>
+ </listitem>
+
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Mac OS X</emphasis> hosts:<footnote>
+ <para>Preliminary Mac OS X support (beta stage) was added with
+ VirtualBox 1.4, full support with 1.6. Mac OS X 10.4 (Tiger)
+ support was removed with VirtualBox 3.1.</para>
+ </footnote></para>
+
+ <itemizedlist>
+ <listitem>
+ <para>10.6 (Snow Leopard, 32-bit and 64-bit)</para>
+ </listitem>
+
+ <listitem>
+ <para>10.7 (Lion, 32-bit and 64-bit)</para>
+ </listitem>
+
+ <listitem>
+ <para>10.8 (Mountain Lion, 64-bit)</para>
+ </listitem>
+
+ </itemizedlist>
+
+ <para>Intel hardware is required; please see <xref
+ linkend="KnownIssues" /> also.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Linux</emphasis> hosts (32-bit and
+ 64-bit<footnote>
+ <para>Support for 64-bit Linux was added with VirtualBox
+ 1.4.</para>
+ </footnote>). Among others, this includes:<itemizedlist>
+ <listitem>
+ <para>8.04 ("Hardy Heron"),
+ 8.10 ("Intrepid Ibex"), 9.04 ("Jaunty Jackalope"), 9.10 ("Karmic
+ Koala"), 10.04 ("Lucid Lynx"), 10.10 ("Maverick Meerkat),
+ 11.04 ("Natty Narwhal"), 11.10 ("Oneiric Oncelot"),
+ 12.04 ("Precise Pangolin")</para>
+ </listitem>
+
+ <listitem>
+ <para>Debian GNU/Linux 5.0 ("lenny") and 6.0 ("squeeze")</para>
+ </listitem>
+
+ <listitem>
+ <para>Oracle Enterprise Linux 4 and 5, Oracle Linux 6</para>
+ </listitem>
+
+ <listitem>
+ <para>Redhat Enterprise Linux 4, 5 and 6</para>
+ </listitem>
+
+ <listitem>
+ <para>Fedora Core 4 to 17</para>
+ </listitem>
+
+ <listitem>
+ <para>Gentoo Linux</para>
+ </listitem>
+
+ <listitem>
+ <para>openSUSE 11.0, 11.1, 11.2, 11.3, 11.4, 12.1, 12.2</para>
+ </listitem>
+
+ <listitem>
+ <para>Mandriva 2010 and 2011</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>It should be possible to use VirtualBox on most systems based on
+ Linux kernel 2.6 using either the VirtualBox installer or by doing a
+ manual installation; see <xref linkend="install-linux-host" />. However,
+ the formally tested and supported Linux distributions are those for
+ which we offer a dedicated package.</para>
+
+ <para>Note that starting with VirtualBox 2.1, Linux 2.4-based host
+ operating systems are no longer supported.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Solaris</emphasis> hosts (32-bit and
+ 64-bit) are supported with the restrictions listed in <xref
+ linkend="KnownIssues" />:<itemizedlist>
+ <listitem>
+ <para>Solaris 11 including Solaris 11 Express</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris 10 (u8 and higher)</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+ </itemizedlist>
+ <para>Note that the above list is informal. Oracle support for customers
+ who have a support contract is limited to a subset of the listed host
+ operating systems. Also, any feature which is marked as <emphasis
+ role="bold">experimental</emphasis> is not supported. Feedback and
+ suggestions about such features are welcome.</para>
+ </sect1>
+
+ <sect1 id="intro-installing">
+ <title>Installing VirtualBox and extension packs</title>
+
+ <para>VirtualBox comes in many different packages, and installation
+ depends on your host operating system. If you have installed software
+ before, installation should be straightforward: on each host platform,
+ VirtualBox uses the installation method that is most common and easy to
+ use. If you run into trouble or have special requirements, please refer to
+ <xref linkend="installation" /> for details about the various installation
+ methods.</para>
+
+ <para>Starting with version 4.0, VirtualBox is split into several
+ components.<orderedlist>
+ <listitem>
+ <para>The base package consists of all open-source components and is
+ licensed under the GNU General Public License V2.</para>
+ </listitem>
+
+ <listitem>
+ <para>Additional extension packs can be downloaded which extend the
+ functionality of the VirtualBox base package. Currently, Oracle
+ provides the one extension pack, which can be found at <ulink
+ url="http://www.virtualbox.org">http://www.virtualbox.org</ulink>
+ and provides the following added functionality:<orderedlist>
+ <listitem>
+ <para>The virtual USB 2.0 (EHCI) device; see <xref
+ linkend="settings-usb" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox Remote Desktop Protocol (VRDP) support; see
+ <xref linkend="vrde" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>Intel PXE boot ROM with support for the E1000 network
+ card.</para>
+ </listitem>
+
+ <listitem>
+ <para>Experimental support for PCI passthrough on Linux hosts;
+ see <xref linkend="pcipassthrough" />.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>VirtualBox extension packages have a
+ <computeroutput>.vbox-extpack</computeroutput> file name extension.
+ To install an extension, simply double-click on the package file,
+ and the VirtualBox Manager will guide you through the required
+ steps.</para>
+
+ <para>To view the extension packs that are currently installed,
+ please start the VirtualBox Manager (see the next section). From the
+ "File" menu, please select "Preferences". In the window that shows
+ up, go to the "Extensions" category which shows you the extensions
+ which are currently installed and allows you to remove a package or
+ add a new one.</para>
+
+ <para>Alternatively you can use VBoxManage on the command line: see
+ <xref linkend="vboxmanage-extpack" /> for details.</para>
+ </listitem>
+ </orderedlist></para>
+ </sect1>
+
+ <sect1>
+ <title>Starting VirtualBox</title>
+
+ <para>After installation, you can start VirtualBox as
+ follows:<itemizedlist>
+ <listitem>
+ <para>On a Windows host, in the standard "Programs" menu, click on
+ the item in the "VirtualBox" group. On Vista or Windows 7, you can
+ also type "VirtualBox" in the search box of the "Start" menu.</para>
+ </listitem>
+
+ <listitem>
+ <para>On a Mac OS X host, in the Finder, double-click on the
+ "VirtualBox" item in the "Applications" folder. (You may want to
+ drag this item onto your Dock.)</para>
+ </listitem>
+
+ <listitem>
+ <para>On a Linux or Solaris host, depending on your desktop
+ environment, a "VirtualBox" item may have been placed in either the
+ "System" or "System Tools" group of your "Applications" menu.
+ Alternatively, you can type
+ <computeroutput>VirtualBox</computeroutput> in a terminal.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>When you start VirtualBox for the first time, a window like the
+ following should come up:</para>
+
+ <para><mediaobject>
+ <imageobject>
+ <imagedata align="center" fileref="images/virtualbox-main-empty.png"
+ width="10cm" />
+ </imageobject>
+ </mediaobject>This window is called the <emphasis
+ role="bold">"VirtualBox Manager".</emphasis> On the left, you can see a
+ pane that will later list all your virtual machines. Since you have not
+ created any, the list is empty. A row of buttons above it allows you to
+ create new VMs and work on existing VMs, once you have some. The pane on
+ the right displays the properties of the virtual machine currently
+ selected, if any. Again, since you don't have any machines yet, the pane
+ displays a welcome message.</para>
+
+ <para>To give you an idea what VirtualBox might look like later, after you
+ have created many machines, here's another example:</para>
+
+ <para><mediaobject>
+ <imageobject>
+ <imagedata align="center" fileref="images/virtualbox-main.png"
+ width="10cm" />
+ </imageobject>
+ </mediaobject></para>
+ </sect1>
+
+ <sect1 id="gui-createvm">
+ <title>Creating your first virtual machine</title>
+
+ <para>Click on the "New" button at the top of the VirtualBox Manager
+ window. A wizard will pop up to guide you through setting up a new virtual
+ machine (VM):</para>
+
+ <para><mediaobject>
+ <imageobject>
+ <imagedata align="center" fileref="images/create-vm-1.png"
+ width="10cm" />
+ </imageobject>
+ </mediaobject>On the following pages, the wizard will ask you for the
+ bare minimum of information that is needed to create a VM, in
+ particular:<orderedlist>
+ <listitem>
+ <para>The <emphasis role="bold">VM name</emphasis> will later be
+ shown in the VM list of the VirtualBox Manager window, and it will
+ be used for the VM's files on disk. Even though any name could be
+ used, keep in mind that once you have created a few VMs, you will
+ appreciate if you have given your VMs rather informative names; "My
+ VM" would thus be less useful than "Windows XP SP2 with
+ OpenOffice".</para>
+ </listitem>
+
+ <listitem>
+ <para>For <emphasis role="bold">"Operating System Type",</emphasis>
+ select the operating system that you want to install later. The
+ supported operating systems are grouped; if you want to install
+ something very unusual that is not listed, select "Other". Depending
+ on your selection, VirtualBox will enable or disable certain VM
+ settings that your guest operating system may require. This is
+ particularly important for 64-bit guests (see <xref
+ linkend="intro-64bitguests" />). It is therefore recommended to
+ always set it to the correct value.</para>
+ </listitem>
+
+ <listitem>
+ <para>On the next page, select the <emphasis role="bold">memory
+ (RAM)</emphasis> that VirtualBox should allocate every time the
+ virtual machine is started. The amount of memory given here will be
+ taken away from your host machine and presented to the guest
+ operating system, which will report this size as the (virtual)
+ computer's installed RAM.</para>
+
+ <para><note>
+ <para>Choose this setting carefully! The memory you give to the
+ VM will not be available to your host OS while the VM is
+ running, so do not specify more than you can spare. For example,
+ if your host machine has 1 GB of RAM and you enter 512 MB as the
+ amount of RAM for a particular virtual machine, while that VM is
+ running, you will only have 512 MB left for all the other
+ software on your host. If you run two VMs at the same time, even
+ more memory will be allocated for the second VM (which may not
+ even be able to start if that memory is not available). On the
+ other hand, you should specify as much as your guest OS (and
+ your applications) will require to run properly.</para>
+ </note></para>
+
+ <para>A Windows XP guest will require at least a few hundred MB RAM
+ to run properly, and Windows Vista will even refuse to install with
+ less than 512 MB. Of course, if you want to run graphics-intensive
+ applications in your VM, you may require even more RAM.</para>
+
+ <para>So, as a rule of thumb, if you have 1 GB of RAM or more in
+ your host computer, it is usually safe to allocate 512 MB to each
+ VM. But, in any case, make sure you always have at least 256 to 512
+ MB of RAM left on your host operating system. Otherwise you may
+ cause your host OS to excessively swap out memory to your hard disk,
+ effectively bringing your host system to a standstill.</para>
+
+ <para>As with the other settings, you can change this setting later,
+ after you have created the VM.</para>
+ </listitem>
+
+ <listitem>
+ <para>Next, you must specify a <emphasis role="bold">virtual hard
+ disk</emphasis> for your VM.</para>
+
+ <para>There are many and potentially complicated ways in which
+ VirtualBox can provide hard disk space to a VM (see <xref
+ linkend="storage" /> for details), but the most common way is to use
+ a large image file on your "real" hard disk, whose contents
+ VirtualBox presents to your VM as if it were a complete hard disk.
+ This file represents an entire hard disk then, so you can even copy
+ it to another host and use it with another VirtualBox
+ installation.</para>
+
+ <para>The wizard shows you the following window:</para>
+
+ <para><mediaobject>
+ <imageobject>
+ <imagedata align="center" fileref="images/create-vm-2.png"
+ width="10cm" />
+ </imageobject>
+ </mediaobject></para>
+
+ <para>Here you have the following options:</para>
+
+ <para><itemizedlist>
+ <listitem>
+ <para>To create a new, empty virtual hard disk, press the
+ <emphasis role="bold">"New"</emphasis> button.</para>
+ </listitem>
+
+ <listitem>
+ <para>You can pick an <emphasis
+ role="bold">existing</emphasis> disk image file.</para>
+
+ <para>The <emphasis role="bold">drop-down list</emphasis>
+ presented in the window contains all disk images which are
+ currently remembered by VirtualBox, probably because they are
+ currently attached to a virtual machine (or have been in the
+ past).</para>
+
+ <para>Alternatively, you can click on the small <emphasis
+ role="bold">folder button</emphasis> next to the drop-down
+ list to bring up a standard file dialog, which allows you to
+ pick any disk image file on your host disk.</para>
+ </listitem>
+ </itemizedlist>Most probably, if you are using VirtualBox for the
+ first time, you will want to create a new disk image. Hence, press
+ the "New" button.</para>
+
+ <para>This brings up another window, the <emphasis
+ role="bold">"Create New Virtual Disk Wizard",</emphasis> which helps
+ you create a new disk image file in the new virtual machine's
+ folder.</para>
+
+ <para>VirtualBox supports two types of image files:<itemizedlist>
+ <listitem>
+ <para>A <emphasis role="bold">dynamically allocated
+ file</emphasis> will only grow in size when the guest actually
+ stores data on its virtual hard disk. It will therefore
+ initially be small on the host hard drive and only later grow
+ to the size specified as it is filled with data.</para>
+ </listitem>
+
+ <listitem>
+ <para>A <emphasis role="bold">fixed-size file</emphasis> will
+ immediately occupy the file specified, even if only a fraction
+ of the virtual hard disk space is actually in use. While
+ occupying much more space, a fixed-size file incurs less
+ overhead and is therefore slightly faster than a dynamically
+ allocated file.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>For details about the differences, please refer to <xref
+ linkend="vdidetails" />.</para>
+
+ <para>To prevent your physical hard disk from running full,
+ VirtualBox limits the size of the image file. Still, it needs to be
+ large enough to hold the contents of your operating system and the
+ applications you want to install -- for a modern Windows or Linux
+ guest, you will probably need several gigabytes for any serious
+ use:</para>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" fileref="images/create-vdi-1.png"
+ width="10cm" />
+ </imageobject>
+ </mediaobject>
+
+ <para>After having selected or created your image file, again press
+ <emphasis role="bold">"Next"</emphasis> to go to the next
+ page.</para>
+ </listitem>
+
+ <listitem>
+ <para>After clicking on <emphasis role="bold">"Finish"</emphasis>,
+ your new virtual machine will be created. You will then see it in
+ the list on the left side of the Manager window, with the name you
+ entered initially.</para>
+ </listitem>
+ </orderedlist></para>
+ </sect1>
+
+ <sect1>
+ <title>Running your virtual machine</title>
+
+ <para>To start a virtual machine, you have several options:<itemizedlist>
+ <listitem>
+ <para>Double-click on its entry in the list within the Manager
+ window or</para>
+ </listitem>
+
+ <listitem>
+ <para>select its entry in the list in the Manager window it and
+ press the "Start" button at the top or</para>
+ </listitem>
+
+ <listitem>
+ <para>for virtual machines created with VirtualBox 4.0 or later,
+ navigate to the "VirtualBox VMs" folder in your system user's home
+ directory, find the subdirectory of the machine you want to start
+ and double-click on the machine settings file (with a
+ <computeroutput>.vbox</computeroutput> file extension).</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>This opens up a new window, and the virtual machine which you
+ selected will boot up. Everything which would normally be seen on the
+ virtual system's monitor is shown in the window, as can be seen with the
+ image in <xref linkend="virtintro" />.</para>
+
+ <para>In general, you can use the virtual machine much like you would use
+ a real computer. There are couple of points worth mentioning
+ however.</para>
+
+ <sect2>
+ <title>Starting a new VM for the first time</title>
+
+ <para>When a VM gets started for the first time, another wizard -- the
+ <emphasis role="bold">"First Start Wizard"</emphasis> -- will pop up to
+ help you select an <emphasis role="bold">installation medium</emphasis>.
+ Since the VM is created empty, it would otherwise behave just like a
+ real computer with no operating system installed: it will do nothing and
+ display an error message that no bootable operating system was
+ found.</para>
+
+ <para>For this reason, the wizard helps you select a medium to install
+ an operating system from.</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>If you have physical CD or DVD media from which you want to
+ install your guest operating system (e.g. in the case of a Windows
+ installation CD or DVD), put the media into your host's CD or DVD
+ drive.</para>
+
+ <para>Then, in the wizard's drop-down list of installation media,
+ select <emphasis role="bold">"Host drive"</emphasis> with the
+ correct drive letter (or, in the case of a Linux host, device file).
+ This will allow your VM to access the media in your host drive, and
+ you can proceed to install from there.</para>
+ </listitem>
+
+ <listitem>
+ <para>If you have downloaded installation media from the Internet in
+ the form of an ISO image file (most probably in the case of a Linux
+ distribution), you would normally burn this file to an empty CD or
+ DVD and proceed as just described. With VirtualBox however, you can
+ skip this step and mount the ISO file directly. VirtualBox will then
+ present this file as a CD or DVD-ROM drive to the virtual machine,
+ much like it does with virtual hard disk images.</para>
+
+ <para>For this case, the wizard's drop-down list contains a list of
+ installation media that were previously used with VirtualBox.</para>
+
+ <para>If your medium is not in the list (especially if you are using
+ VirtualBox for the first time), select the small folder icon next to
+ the drop-down list to bring up a standard file dialog, with which
+ you can pick the image file on your host disks.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>In both cases, after making the choices in the wizard, you will be
+ able to install your operating system.</para>
+ </sect2>
+
+ <sect2>
+ <title id="keyb_mouse_normal">Capturing and releasing keyboard and
+ mouse</title>
+
+ <para>As of version 3.2, VirtualBox provides a virtual USB tablet device
+ to new virtual machines through which mouse events are communicated to
+ the guest operating system. As a result, if you are running a modern
+ guest operating system that can handle such devices, mouse support may
+ work out of the box without the mouse being "captured" as described
+ below; see <xref linkend="settings-motherboard" /> for more
+ information.</para>
+
+ <para>Otherwise, if the virtual machine only sees standard PS/2 mouse
+ and keyboard devices, since the operating system in the virtual machine
+ does not "know" that it is not running on a real computer, it expects to
+ have exclusive control over your keyboard and mouse. This is, however,
+ not the case since, unless you are running the VM in full screen mode,
+ your VM needs to share keyboard and mouse with other applications and
+ possibly other VMs on your host.</para>
+
+ <para>As a result, initially after installing a guest operating system
+ and before you install the Guest Additions (we will explain this in a
+ minute), only one of the two -- your VM or the rest of your computer --
+ can "own" the keyboard and the mouse. You will see a
+ <emphasis>second</emphasis> mouse pointer which will always be confined
+ to the limits of the VM window. Basically, you activate the VM by
+ clicking inside it.</para>
+
+ <para>To return ownership of keyboard and mouse to your host operating
+ system, VirtualBox reserves a special key on your keyboard for itself:
+ the <emphasis role="bold">"host key".</emphasis> By default, this is the
+ <emphasis>right Control key</emphasis> on your keyboard; on a Mac host,
+ the default host key is the left Command key. You can change this
+ default in the VirtualBox Global Settings. In any case, the current
+ setting for the host key is always displayed <emphasis>at the bottom
+ right of your VM window,</emphasis> should you have forgotten about
+ it:</para>
+
+ <para><mediaobject>
+ <imageobject>
+ <imagedata align="center" fileref="images/vm-hostkey.png"
+ width="7cm" />
+ </imageobject>
+ </mediaobject>In detail, all this translates into the
+ following:</para>
+
+ <para><itemizedlist>
+ <listitem>
+ <para>Your <emphasis role="bold">keyboard</emphasis> is owned by
+ the VM if the VM window on your host desktop has the keyboard
+ focus (and then, if you have many windows open in your guest
+ operating system as well, the window that has the focus in your
+ VM). This means that if you want to type within your VM, click on
+ the title bar of your VM window first.</para>
+
+ <para>To release keyboard ownership, press the Host key (as
+ explained above, typically the right Control key).</para>
+
+ <para>Note that while the VM owns the keyboard, some key sequences
+ (like Alt-Tab for example) will no longer be seen by the host, but
+ will go to the guest instead. After you press the host key to
+ re-enable the host keyboard, all key presses will go through the
+ host again, so that sequences like Alt-Tab will no longer reach
+ the guest.</para>
+ </listitem>
+
+ <listitem>
+ <para>Your <emphasis role="bold">mouse</emphasis> is owned by the
+ VM only after you have clicked in the VM window. The host mouse
+ pointer will disappear, and your mouse will drive the guest's
+ pointer instead of your normal mouse pointer.</para>
+
+ <para>Note that mouse ownership is independent of that of the
+ keyboard: even after you have clicked on a titlebar to be able to
+ type into the VM window, your mouse is not necessarily owned by
+ the VM yet.</para>
+
+ <para>To release ownership of your mouse by the VM, also press the
+ Host key.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>As this behavior can be inconvenient, VirtualBox provides a set of
+ tools and device drivers for guest systems called the "VirtualBox Guest
+ Additions" which make VM keyboard and mouse operation a lot more
+ seamless. Most importantly, the Additions will get rid of the second
+ "guest" mouse pointer and make your host mouse pointer work directly in
+ the guest.</para>
+
+ <para>This will be described later in <xref
+ linkend="guestadditions" />.</para>
+ </sect2>
+
+ <sect2>
+ <title>Typing special characters</title>
+
+ <para>Operating systems expect certain key combinations to initiate
+ certain procedures. Some of these key combinations may be difficult to
+ enter into a virtual machine, as there are three candidates as to who
+ receives keyboard input: the host operating system, VirtualBox, or the
+ guest operating system. Who of these three receives keypresses depends
+ on a number of factors, including the key itself.</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Host operating systems reserve certain key combinations for
+ themselves. For example, it is impossible to enter the <emphasis
+ role="bold">Ctrl+Alt+Delete</emphasis> combination if you want to
+ reboot the guest operating system in your virtual machine, because
+ this key combination is usually hard-wired into the host OS (both
+ Windows and Linux intercept this), and pressing this key combination
+ will therefore reboot your <emphasis>host</emphasis>.</para>
+
+ <para>Also, on Linux and Solaris hosts, which use the X Window
+ System, the key combination <emphasis
+ role="bold">Ctrl+Alt+Backspace</emphasis> normally resets the X
+ server (to restart the entire graphical user interface in case it
+ got stuck). As the X server intercepts this combination, pressing it
+ will usually restart your <emphasis>host</emphasis> graphical user
+ interface (and kill all running programs, including VirtualBox, in
+ the process).</para>
+
+ <para>Third, on Linux hosts supporting virtual terminals, the key
+ combination <emphasis role="bold">Ctrl+Alt+Fx</emphasis> (where Fx
+ is one of the function keys from F1 to F12) normally allows to
+ switch between virtual terminals. As with Ctrl+Alt+Delete, these
+ combinations are intercepted by the host operating system and
+ therefore always switch terminals on the
+ <emphasis>host</emphasis>.</para>
+
+ <para>If, instead, you want to send these key combinations to the
+ <emphasis>guest</emphasis> operating system in the virtual machine,
+ you will need to use one of the following methods:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Use the items in the "Machine" menu of the virtual machine
+ window. There you will find "Insert Ctrl+Alt+Delete" and
+ "Ctrl+Alt+Backspace"; the latter will only have an effect with
+ Linux or Solaris guests, however.</para>
+ </listitem>
+
+ <listitem>
+ <para>Press special key combinations with the Host key (normally
+ the right Control key), which VirtualBox will then translate for
+ the virtual machine:<itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">Host key + Del</emphasis> to
+ send Ctrl+Alt+Del (to reboot the guest);</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Host key +
+ Backspace</emphasis> to send Ctrl+Alt+Backspace (to
+ restart the graphical user interface of a Linux or Solaris
+ guest);</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Host key + F1</emphasis> (or
+ other function keys) to simulate Ctrl+Alt+F1 (or other
+ function keys, i.e. to switch between virtual terminals in
+ a Linux guest).</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+
+ <listitem>
+ <para>For some other keyboard combinations such as <emphasis
+ role="bold">Alt-Tab</emphasis> (to switch between open windows),
+ VirtualBox allows you to configure whether these combinations will
+ affect the host or the guest, if a virtual machine currently has the
+ focus. This is a global setting for all virtual machines and can be
+ found under "File" -&gt; "Preferences" -&gt; "Input" -&gt;
+ "Auto-capture keyboard".</para>
+ </listitem>
+ </itemizedlist>
+ </sect2>
+
+ <sect2>
+ <title>Changing removable media</title>
+
+ <para>While a virtual machine is running, you can change removable media
+ in the "Devices" menu of the VM's window. Here you can select in detail
+ what VirtualBox presents to your VM as a CD, DVD, or floppy.</para>
+
+ <para>The settings are the same as would be available for the VM in the
+ "Settings" dialog of the VirtualBox main window, but since that dialog
+ is disabled while the VM is in the "running" or "saved" state, this
+ extra menu saves you from having to shut down and restart the VM every
+ time you want to change media.</para>
+
+ <para>Hence, in the "Devices" menu, VirtualBox allows you to attach the
+ host drive to the guest or select a floppy or DVD image using the Disk
+ Image Manager, all as described in <xref
+ linkend="configbasics" />.</para>
+ </sect2>
+
+ <sect2 id="intro-resize-window">
+ <title>Resizing the machine's window</title>
+
+ <para>You can resize the virtual machine's window when it is running. In
+ that case, one of three things will happen:<orderedlist>
+ <listitem>
+ <para>If you have <emphasis role="bold">"scale mode"</emphasis>
+ enabled, then the virtual machine's screen will be scaled to the
+ size of the window. This can be useful if you have many machines
+ running and want to have a look at one of them while it is running
+ in the background. Alternatively, it might be useful to enlarge a
+ window if the VM's output screen is very small, for example
+ because you are running an old operating system in it.</para>
+
+ <para>To enable scale mode, press the <emphasis role="bold">host
+ key + C</emphasis>, or select "Scale mode" from the "Machine" menu
+ in the VM window. To leave scale mode, press the host key + C
+ again.</para>
+
+ <para>The aspect ratio of the guest screen is preserved when
+ resizing the window. To ignore the aspect ratio, press Shift
+ during the resize operation.</para>
+
+ <para>Please see <xref linkend="KnownIssues" /> for additional
+ remarks.</para>
+ </listitem>
+
+ <listitem>
+ <para>If you have the Guest Additions installed and they support
+ automatic <emphasis role="bold">resizing</emphasis>, the Guest
+ Additions will automatically adjust the screen resolution of the
+ guest operating system. For example, if you are running a Windows
+ guest with a resolution of 1024x768 pixels and you then resize the
+ VM window to make it 100 pixels wider, the Guest Additions will
+ change the Windows display resolution to 1124x768.</para>
+
+ <para>Please see <xref linkend="guestadditions" /> for more
+ information about the Guest Additions.</para>
+ </listitem>
+
+ <listitem>
+ <para>Otherwise, if the window is bigger than the VM's screen, the
+ screen will be centered. If it is smaller, then scroll bars will
+ be added to the machine window.</para>
+ </listitem>
+ </orderedlist></para>
+ </sect2>
+
+ <sect2>
+ <title>Saving the state of the machine</title>
+
+ <para>When you click on the "Close" button of your virtual machine
+ window (at the top right of the window, just like you would close any
+ other window on your system), VirtualBox asks you whether you want to
+ "save" or "power off" the VM. (As a shortcut, you can also press the
+ Host key together with "Q".)</para>
+
+ <para><mediaobject>
+ <imageobject>
+ <imagedata align="center" fileref="images/vm-close.png"
+ width="11cm" />
+ </imageobject>
+ </mediaobject>The difference between these three options is crucial.
+ They mean:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">Save the machine state:</emphasis> With
+ this option, VirtualBox "freezes" the virtual machine by completely
+ saving its state to your local disk.</para>
+
+ <para>When you start the VM again later, you will find that the VM
+ continues exactly where it was left off. All your programs will
+ still be open, and your computer resumes operation. Saving the state
+ of a virtual machine is thus in some ways similar to suspending a
+ laptop computer (e.g. by closing its lid).</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Send the shutdown signal.</emphasis>
+ This will send an ACPI shutdown signal to the virtual machine, which
+ has the same effect as if you had pressed the power button on a real
+ computer. So long as the VM is running a fairly modern operating
+ system, this should trigger a proper shutdown mechanism from within
+ the VM.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Power off the machine:</emphasis> With
+ this option, VirtualBox also stops running the virtual machine, but
+ <emphasis>without</emphasis> saving its state.<warning>
+ <para>This is equivalent to pulling the power plug on a real
+ computer without shutting it down properly. If you start the
+ machine again after powering it off, your operating system will
+ have to reboot completely and may begin a lengthy check of its
+ (virtual) system disks. As a result, this should not normally be
+ done, since it can potentially cause data loss or an
+ inconsistent state of the guest system on disk.</para>
+ </warning></para>
+
+ <para>As an exception, if your virtual machine has any snapshots
+ (see the next chapter), you can use this option to quickly <emphasis
+ role="bold">restore the current snapshot</emphasis> of the virtual
+ machine. In that case, powering off the machine will not disrupt its
+ state, but any changes made since that snapshot was taken will be
+ lost.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>The <emphasis role="bold">"Discard"</emphasis> button in the
+ VirtualBox Manager window discards a virtual machine's saved state. This
+ has the same effect as powering it off, and the same warnings
+ apply.</para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="snapshots">
+ <title>Snapshots</title>
+
+ <para>With snapshots, you can save a particular state of a virtual machine
+ for later use. At any later time, you can revert to that state, even
+ though you may have changed the VM considerably since then. A snapshot of
+ a virtual machine is thus similar to a machine in "saved" state, as
+ described above, but there can be many of them, and these saved states are
+ preserved.</para>
+
+ <para>You can see the snapshots of a virtual machine by first selecting a
+ machine in the VirtualBox Manager and then clicking on the "Snapshots"
+ button at the top right. Until you take a snapshot of the machine, the
+ list of snapshots will be empty except for the "Current state" item, which
+ represents the "Now" point in the lifetime of the virtual machine.</para>
+
+ <sect2>
+ <title>Taking, restoring and deleting snapshots</title>
+
+ <para>There are three operations related to snapshots:<orderedlist>
+ <listitem>
+ <para>You can <emphasis role="bold">take a snapshot</emphasis>.
+ This makes a copy of the machine's current state, to which you can
+ go back at any given time later.<itemizedlist>
+ <listitem>
+ <para>If your VM is currently running, select "Take
+ snapshot" from the "Machine" pull-down menu of the VM
+ window.</para>
+ </listitem>
+
+ <listitem>
+ <para>If your VM is currently in either the "saved" or the
+ "powered off" state (as displayed next to the VM in the
+ VirtualBox main window), click on the "Snapshots" tab on the
+ top right of the main window, and then<itemizedlist>
+ <listitem>
+ <para>either on the small camera icon (for "Take
+ snapshot") or</para>
+ </listitem>
+
+ <listitem>
+ <para>right-click on the "Current State" item in the
+ list and select "Take snapshot" from the menu.</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>In any case, a window will pop up and ask you for a snapshot
+ name. This name is purely for reference purposes to help you
+ remember the state of the snapshot. For example, a useful name
+ would be "Fresh installation from scratch, no Guest Additions", or
+ "Service Pack 3 just installed". You can also add a longer text in
+ the "Description" field if you want.</para>
+
+ <para>Your new snapshot will then appear in the snapshots list.
+ Underneath your new snapshot, you will see an item called "Current
+ state", signifying that the current state of your VM is a
+ variation based on the snapshot you took earlier. If you later
+ take another snapshot, you will see that they will be displayed in
+ sequence, and each subsequent snapshot is derived from an earlier
+ one:<mediaobject>
+ <imageobject>
+ <imagedata align="center" fileref="images/snapshots-1.png"
+ width="12cm" />
+ </imageobject>
+ </mediaobject></para>
+
+ <para>VirtualBox imposes no limits on the number of snapshots you
+ can take. The only practical limitation is disk space on your
+ host: each snapshot stores the state of the virtual machine and
+ thus occupies some disk space. (See the next section for details
+ on what exactly is stored in a snapshot.)</para>
+ </listitem>
+
+ <listitem>
+ <para>You can <emphasis role="bold">restore a snapshot</emphasis>
+ by right-clicking on any snapshot you have taken in the list of
+ snapshots. By restoring a snapshot, you go back (or forward) in
+ time: the current state of the machine is lost, and the machine is
+ restored to the exact state it was in when the snapshot was
+ taken.<footnote>
+ <para>Both the terminology and the functionality of restoring
+ snapshots has changed with VirtualBox 3.1. Before that
+ version, it was only possible to go back to the very last
+ snapshot taken -- not earlier ones, and the operation was
+ called "Discard current state" instead of "Restore last
+ snapshot". The limitation has been lifted with version 3.1. It
+ is now possible to restore <emphasis>any</emphasis> snapshot,
+ going backward and forward in time.</para>
+ </footnote></para>
+
+ <note>
+ <para>Restoring a snapshot will affect the virtual hard drives
+ that are connected to your VM, as the entire state of the
+ virtual hard drive will be reverted as well. This means also
+ that all files that have been created since the snapshot and all
+ other file changes <emphasis>will be lost. </emphasis>In order
+ to prevent such data loss while still making use of the snapshot
+ feature, it is possible to add a second hard drive in
+ "write-through" mode using the
+ <computeroutput>VBoxManage</computeroutput> interface and use it
+ to store your data. As write-through hard drives are
+ <emphasis>not</emphasis> included in snapshots, they remain
+ unaltered when a machine is reverted. See <xref
+ linkend="hdimagewrites" os="" /> for details.</para>
+ </note>
+
+ <para>To avoid losing the current state when restoring a snapshot,
+ you can create a new snapshot before the restore.</para>
+
+ <para>By restoring an earlier snapshot and taking more snapshots
+ from there, it is even possible to create a kind of alternate
+ reality and to switch between these different histories of the
+ virtual machine. This can result in a whole tree of virtual
+ machine snapshots, as shown in the screenshot above.</para>
+ </listitem>
+
+ <listitem>
+ <para>You can also <emphasis role="bold">delete a
+ snapshot</emphasis>, which will not affect the state of the
+ virtual machine, but only release the files on disk that
+ VirtualBox used to store the snapshot data, thus freeing disk
+ space. To delete a snapshot, right-click on it in the snapshots
+ tree and select "Delete". As of VirtualBox 3.2, snapshots can be
+ deleted even while a machine is running.<note>
+ <para>Whereas taking and restoring snapshots are fairly quick
+ operations, deleting a snapshot can take a considerable amount
+ of time since large amounts of data may need to be copied
+ between several disk image files. Temporary disk files may
+ also need large amounts of disk space while the operation is
+ in progress.</para>
+ </note></para>
+
+ <para>There are some situations which cannot be handled while a VM
+ is running, and you will get an appropriate message that you need
+ to perform this snapshot deletion when the VM is shut down.</para>
+ </listitem>
+ </orderedlist></para>
+ </sect2>
+
+ <sect2>
+ <title>Snapshot contents</title>
+
+ <para>Think of a snapshot as a point in time that you have preserved.
+ More formally, a snapshot consists of three things:<itemizedlist>
+ <listitem>
+ <para>It contains a complete copy of the VM settings, including
+ the hardware configuration, so that when you restore a snapshot,
+ the VM settings are restored as well. (For example, if you changed
+ the hard disk configuration or the VM's system settings, that
+ change is undone when you restore the snapshot.)</para>
+
+ <para>The copy of the settings is stored in the machine
+ configuration, an XML text file, and thus occupies very little
+ space.</para>
+ </listitem>
+
+ <listitem>
+ <para>The complete state of all the virtual disks attached to the
+ machine is preserved. Going back to a snapshot means that all
+ changes that had been made to the machine's disks -- file by file,
+ bit by bit -- will be undone as well. Files that were since
+ created will disappear, files that were deleted will be restored,
+ changes to files will be reverted.</para>
+
+ <para>(Strictly speaking, this is only true for virtual hard disks
+ in "normal" mode. As mentioned above, you can configure disks to
+ behave differently with snapshots; see <xref
+ linkend="hdimagewrites" />. Even more formally and technically
+ correct, it is not the virtual disk itself that is restored when a
+ snapshot is restored. Instead, when a snapshot is taken,
+ VirtualBox creates differencing images which contain only the
+ changes since the snapshot were taken, and when the snapshot is
+ restored, VirtualBox throws away that differencing image, thus
+ going back to the previous state. This is both faster and uses
+ less disk space. For the details, which can be complex, please see
+ <xref linkend="diffimages" />.)</para>
+
+ <para>Creating the differencing image as such does not occupy much
+ space on the host disk initially, since the differencing image
+ will initially be empty (and grow dynamically later with each
+ write operation to the disk). The longer you use the machine after
+ having created the snapshot, however, the more the differencing
+ image will grow in size.</para>
+ </listitem>
+
+ <listitem>
+ <para>Finally, if you took a snapshot while the machine was
+ running, the memory state of the machine is also saved in the
+ snapshot (the same way the memory can be saved when you close the
+ VM window). When you restore such a snapshot, execution resumes at
+ exactly the point when the snapshot was taken.</para>
+
+ <para>The memory state file can be as large as the memory size of
+ the virtual machine and will therefore occupy quite some disk
+ space as well.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title id="configbasics">Virtual machine configuration</title>
+
+ <para>When you select a virtual machine from the list in the Manager
+ window, you will see a summary of that machine's settings on the
+ right.</para>
+
+ <para>Clicking on the "Settings" button in the toolbar at the top brings
+ up a detailed window where you can configure many of the properties of the
+ selected VM. But be careful: even though it is possible to change all VM
+ settings after installing a guest operating system, certain changes might
+ prevent a guest operating system from functioning correctly if done after
+ installation.</para>
+
+ <note>
+ <para>The "Settings" button is disabled while a VM is either in the
+ "running" or "saved" state. This is simply because the settings dialog
+ allows you to change fundamental characteristics of the virtual computer
+ that is created for your guest operating system, and this operating
+ system may not take it well when, for example, half of its memory is
+ taken away from under its feet. As a result, if the "Settings" button is
+ disabled, shut down the current VM first.</para>
+ </note>
+
+ <para>VirtualBox provides a plethora of parameters that can be changed for
+ a virtual machine. The various settings that can be changed in the
+ "Settings" window are described in detail in <xref
+ linkend="BasicConcepts" />. Even more parameters are available with the
+ VirtualBox command line interface; see <xref
+ linkend="vboxmanage" />.</para>
+ </sect1>
+
+ <sect1>
+ <title>Removing virtual machines</title>
+
+ <para>To remove a virtual machine which you no longer need, right-click on
+ it in the Manager's VM list select "Remove" from the context menu that
+ comes up.</para>
+
+ <para>A confirmation window will come up that allows you to select whether
+ the machine should only be removed from the list of machines or whether
+ the files associated with it should also be deleted.</para>
+
+ <para>The "Remove" menu item is disabled while a machine is
+ running.</para>
+ </sect1>
+
+ <sect1 id="clone">
+ <title>Cloning virtual machines</title>
+
+ <para>To experiment with a VM configuration, test different guest OS levels
+ or to simply backup a VM, VirtualBox can create a full or a linked copy of
+ an existing VM.<footnote>Cloning support was introduced with VirtualBox
+ 4.1.</footnote></para>
+
+ <para>A wizard will guide you through the clone process:</para>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" fileref="images/clone-vm.png"
+ width="10cm" />
+ </imageobject>
+ </mediaobject>
+
+ <para>This wizard can be invoked from the context menu of the Manager's VM
+ list (select "Clone") or the "Snapshots" view of the selected VM. First
+ choose a new name for the clone. When you select <emphasis
+ role="bold">Reinitialize the MAC address of all network cards</emphasis>
+ every network card get a new MAC address assigned. This is useful when
+ both, the source VM and the cloned VM, have to operate on the same network.
+ If you leave this unchanged, all network cards have the same MAC address
+ like the one in the source VM. Depending on how you invoke the wizard you
+ have different choices for the cloning operation. First you need to decide
+ if the clone should be linked to the source VM or a fully independent clone
+ should be created:</para>
+ <itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">Full clone:</emphasis> In this mode all
+ depending disk images are copied to the new VM folder. The clone
+ can fully operate without the source VM.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Linked clone:</emphasis> In this mode new
+ differencing disk images are created where the parent disk images
+ are the source disk images. If you selected the current state of
+ the source VM as clone point, a new snapshot will be created
+ implicitly.
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ <para>After selecting the clone mode, you need to decide about what exactly
+ should be cloned. You can always create a clone of the <emphasis
+ role="italic">current state</emphasis> only or <emphasis
+ role="italic">all</emphasis>. When you select <emphasis
+ role="italic">all</emphasis>, the current state and in addition all
+ snapshots are cloned. Have you started from a snapshot which has additional
+ children, you can also clone the <emphasis role="italic">current state and
+ all children</emphasis>. This creates a clone starting with this
+ snapshot and includes all child snaphots.</para>
+
+ <para>The clone operation itself can be a lengthy operation depending on
+ the size and count of the attached disk images. Also keep in mind that
+ every snapshot has differencing disk images attached, which need to be cloned
+ as well.</para>
+
+ <para>The "Clone" menu item is disabled while a machine is running.</para>
+
+ <para>For how to clone a VM at the command line, please see <xref
+ linkend="vboxmanage-clonevm" />.</para>
+ </sect1>
+
+ <sect1 id="ovf">
+ <title>Importing and exporting virtual machines</title>
+
+ <para>VirtualBox can import and export virtual machines in the
+ industry-standard Open Virtualization Format (OVF).<footnote>
+ <para>OVF support was originally introduced with VirtualBox 2.2 and
+ has seen major improvements with every version since.</para>
+ </footnote></para>
+
+ <para>OVF is a cross-platform standard supported by many virtualization
+ products which allows for creating ready-made virtual machines that can
+ then be imported into a virtualizer such as VirtualBox. VirtualBox makes
+ OVF import and export easy to access and supports it from the Manager
+ window as well as its command-line interface. This allows for packaging
+ so-called <emphasis role="bold">virtual appliances</emphasis>: disk images
+ together with configuration settings that can be distributed easily. This
+ way one can offer complete ready-to-use software packages (operating
+ systems with applications) that need no configuration or installation
+ except for importing into VirtualBox.<note>
+ <para>The OVF standard is complex, and support in VirtualBox is an
+ ongoing process. In particular, no guarantee is made that VirtualBox
+ supports all appliances created by other virtualization software. For
+ a list of known limitations, please see <xref
+ linkend="KnownIssues" />.</para>
+ </note></para>
+
+ <para>Appliances in OVF format can appear in two variants:<orderedlist>
+ <listitem>
+ <para>They can come in several files, as one or several disk images,
+ typically in the widely-used VMDK format (see <xref
+ linkend="vdidetails" />) and a textual description file in an XML
+ dialect with an <computeroutput>.ovf</computeroutput> extension.
+ These files must then reside in the same directory for VirtualBox to
+ be able to import them.</para>
+ </listitem>
+
+ <listitem>
+ <para>Alternatively, the above files can be packed together into a
+ single archive file, typically with an
+ <computeroutput>.ova</computeroutput> extension. (Such archive files
+ use a variant of the TAR archive format and can therefore be
+ unpacked outside of VirtualBox with any utility that can unpack
+ standard TAR files.)</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>To <emphasis role="bold">import</emphasis> an appliance in one of
+ the above formats, simply double-click on the OVF/OVA file.<footnote>
+ <para>Starting with version 4.0, VirtualBox creates file type
+ associations for OVF and OVA files on your host operating
+ system.</para>
+ </footnote> Alternatively, select "File" -&gt; "Import appliance" from
+ the Manager window. In the file dialog that comes up, navigate to the file
+ with either the <computeroutput>.ovf</computeroutput> or the
+ <computeroutput>.ova</computeroutput> file extension.</para>
+
+ <para>If VirtualBox can handle the file, a dialog similar to the following
+ will appear:</para>
+
+ <para><mediaobject>
+ <imageobject>
+ <imagedata align="center" fileref="images/ovf-import.png"
+ width="12cm" />
+ </imageobject>
+ </mediaobject>This presents the virtual machines described in the OVF
+ file and allows you to change the virtual machine settings by
+ double-clicking on the description items. Once you click on <emphasis
+ role="bold">"Import"</emphasis>, VirtualBox will copy the disk images and
+ create local virtual machines with the settings described in the dialog.
+ These will then show up in the Manager's list of virtual machines.</para>
+
+ <para>Note that since disk images tend to be big, and VMDK images that
+ come with virtual appliances are typically shipped in a special compressed
+ format that is unsuitable for being used by virtual machines directly, the
+ images will need to be unpacked and copied first, which can take a few
+ minutes.</para>
+
+ <para>For how to import an image at the command line, please see <xref
+ linkend="vboxmanage-import" />.</para>
+
+ <para>Conversely, to <emphasis role="bold">export</emphasis> virtual
+ machines that you already have in VirtualBox, select "File" -&gt; "Export
+ appliance". A different dialog window shows up that allows you to combine
+ several virtual machines into an OVF appliance. Then, select the target
+ location where the target files should be stored, and the conversion
+ process begins. This can again take a while.</para>
+
+ <para>For how to export an image at the command line, please see <xref
+ linkend="vboxmanage-export" />.<note>
+ <para>OVF cannot describe snapshots that were taken for a virtual
+ machine. As a result, when you export a virtual machine that has
+ snapshots, only the current state of the machine will be exported, and
+ the disk images in the export will have a "flattened" state identical
+ to the current state of the virtual machine.</para>
+ </note></para>
+ </sect1>
+
+ <sect1 id="frontends">
+ <title>Alternative front-ends</title>
+
+ <para>As briefly mentioned in <xref linkend="features-overview" />,
+ VirtualBox has a very flexible internal design that allows for using
+ multiple interfaces to control the same virtual machines. To illustrate,
+ you can, for example, start a virtual machine with the VirtualBox Manager
+ window and then stop it from the command line. With VirtualBox's support
+ for the Remote Desktop Protocol (RDP), you can even run virtual machines
+ remotely on a headless server and have all the graphical output redirected
+ over the network.</para>
+
+ <para>In detail, the following front-ends are shipped in the standard
+ VirtualBox package:</para>
+
+ <para><orderedlist>
+ <listitem>
+ <para><computeroutput>VirtualBox</computeroutput> is the VirtualBox
+ Manager. This graphical user interface uses the Qt toolkit; most of
+ this User Manual is dedicated to describing it. While this is the
+ easiest to use, some of the more advanced VirtualBox features are
+ kept away from it to keep it simple.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>VBoxManage</computeroutput> is our
+ command-line interface for automated and very detailed control of
+ every aspect of VirtualBox. It is described in <xref
+ linkend="vboxmanage" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>VBoxSDL</computeroutput> is an alternative,
+ simple graphical front-end with an intentionally limited feature
+ set, designed to only display virtual machines that are controlled
+ in detail with <computeroutput>VBoxManage</computeroutput>. This is
+ interesting for business environments where displaying all the bells
+ and whistles of the full GUI is not feasible.
+ <computeroutput>VBoxSDL</computeroutput> is described in <xref
+ linkend="vboxsdl" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>Finally, <computeroutput>VBoxHeadless</computeroutput> is yet
+ another front-end that produces no visible output on the host at
+ all, but merely acts as a RDP server if the VirtualBox Remote
+ Desktop Extension (VRDE) is installed. As opposed to the other
+ graphical interfaces, the headless front-end requires no graphics
+ support. This is useful, for example, if you want to host your
+ virtual machines on a headless Linux server that has no X Window
+ system installed. For details, see <xref
+ linkend="vboxheadless" />.</para>
+ </listitem>
+ </orderedlist>If the above front-ends still do not satisfy your
+ particular needs, it is possible to create yet another front-end to the
+ complex virtualization engine that is the core of VirtualBox, as the
+ VirtualBox core neatly exposes all of its features in a clean API; please
+ refer to <xref linkend="VirtualBoxAPI" />.</para>
+ </sect1>
+</chapter>
diff --git a/doc/manual/en_US/user_KnownIssues.xml b/doc/manual/en_US/user_KnownIssues.xml
new file mode 100644
index 00000000..da7a4d01
--- /dev/null
+++ b/doc/manual/en_US/user_KnownIssues.xml
@@ -0,0 +1,305 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<chapter id="KnownIssues">
+ <title>Known limitations</title>
+ <sect1 id="ExperimentalFeatures">
+ <title>Experimental Features</title>
+ <para>Some VirtualBox features are labeled as experimental. Such
+ features are provided on an "as-is" basis and are not formally
+ supported. However, feedback and suggestions about such features are
+ welcome. A comprehensive list of experimental features follows:</para>
+ <itemizedlist>
+ <listitem>
+ WDDM Direct3D video driver for Windows guests
+ </listitem>
+ <listitem>
+ Hardware 3D acceleration support for Windows, Linux, and Solaris
+ guests
+ </listitem>
+ <listitem>
+ Hardware 2D video playback acceleration support for Windows
+ guests
+ </listitem>
+ <listitem>
+ PCI pass-through (Linux hosts only)
+ </listitem>
+ <listitem>
+ Mac OS X guests (Mac hosts only)
+ </listitem>
+ <listitem>
+ ICH9 chipset emulation
+ </listitem>
+ <listitem>
+ EFI firmware
+ </listitem>
+ <listitem>
+ Host CD/DVD drive pass-through
+ </listitem>
+ <listitem>
+ Support of iSCSI via internal networking
+ </listitem>
+ <listitem>
+ Synthetic CPU reporting
+ </listitem>
+ </itemizedlist>
+ </sect1>
+ <sect1 id="KnownProblems">
+ <title>Known Issues</title>
+ <para>The following section describes known problems with VirtualBox
+ $VBOX_VERSION_STRING. Unless marked otherwise, these issues are planned to
+ be fixed in later releases.</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>The following <emphasis role="bold">Guest SMP (multiprocessor)
+ limitations</emphasis> exist:<itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">Poor performance</emphasis> with
+ 32-bit guests on AMD CPUs. This affects mainly Windows and Solaris
+ guests, but possibly also some Linux kernel revisions. Partially
+ solved in 3.0.6 for 32 bits Windows NT, 2000, XP and 2003 guests.
+ Requires 3.0.6 or higher Guest Additions to be installed.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Poor performance</emphasis> with
+ 32-bit guests on certain Intel CPU models that do not include
+ virtual APIC hardware optimization support. This affects mainly
+ Windows and Solaris guests, but possibly also some Linux kernel
+ revisions. Partially solved in 3.0.12 for 32 bits Windows NT,
+ 2000, XP and 2003 guests. Requires 3.0.12 or higher Guest
+ Additions to be installed.</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">64-bit guests on some 32-bit host systems
+ with VT-x</emphasis> can cause instabilities to your system. If you
+ experience this, do not attempt to execute 64-bit guests. Refer to the
+ VirtualBox user forum for additional information.</para>
+ </listitem>
+
+ <listitem>
+ <para>For <emphasis role="bold">basic Direct3D support in Windows
+ guests</emphasis> to work, the Guest Additions must be installed in
+ Windows "safe mode". Press F8 when the Windows guest is booting and
+ select "Safe mode", then install the Guest Additions. Otherwise Windows'
+ file protection mechanism will interfere with the replacement DLLs
+ installed by VirtualBox and keep restoring the original Windows system
+ DLLs. <note>
+ <para>This does <emphasis role="bold">not</emphasis> apply to the
+ experimental WDDM Direct3D video
+ driver available for Vista and Windows 7 guests shipped with
+ VirtualBox 4.1.</para>
+ </note></para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Guest control.</emphasis> On Windows guests,
+ a process lauched via the guest control execute support will not be able
+ to display a graphical user interface <emphasis>unless</emphasis> the
+ user account under which it is running is currently logged in and has a
+ desktop session.</para>
+
+ <para>Also, to use accounts without or with an empty password, the
+ guest's group policy must be changed. To do so, open the group policy
+ editor on the command line by typing
+ <computeroutput>gpedit.msc</computeroutput>, open the key
+ <emphasis>Computer Configuration\Windows Settings\Security
+ Settings\Local Policies\Security Options</emphasis> and change the value
+ of <emphasis>Accounts: Limit local account use of blank passwords to
+ console logon only</emphasis> to <emphasis>Disabled</emphasis>.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Compacting virtual disk images is limited to
+ VDI files.</emphasis> The <code>VBoxManage modifyhd --compact</code>
+ command is currently only implemented for VDI files. At the moment the
+ only way to optimize the size of a virtual disk images in other formats
+ (VMDK, VHD) is to clone the image and then use the cloned image in the
+ VM configuration.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">OVF import/export:</emphasis><itemizedlist>
+ <listitem>
+ <para>OVF localization (multiple languages in one OVF file) is not
+ yet supported.</para>
+ </listitem>
+
+ <listitem>
+ <para>Some OVF sections like StartupSection,
+ DeploymentOptionSection and InstallSection are ignored.</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF environment documents, including their property sections
+ and appliance configuration with ISO images, are not yet
+ supported.</para>
+ </listitem>
+
+ <listitem>
+ <para>Remote files via HTTP or other mechanisms are not yet
+ supported.</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para>Neither <emphasis role="bold">scale mode</emphasis> nor <emphasis
+ role="bold">seamless mode</emphasis> work correctly with guests using
+ OpenGL 3D features (such as with compiz-enabled window managers).</para>
+ </listitem>
+
+ <listitem>
+ <para>The RDP server in the VirtualBox extension pack supports only
+ audio streams in format 22.05kHz stereo 16 bit. If the RDP client
+ requests any other audio format there will be no audio.</para>
+ </listitem>
+
+ <listitem>
+ <para>Preserving the aspect ratio in scale mode works only on Windows
+ hosts and on Mac OS X hosts.</para>
+ </listitem>
+
+ <listitem>
+ <para>On <emphasis role="bold">Mac OS X hosts,</emphasis> the following
+ features are not yet implemented:</para>
+
+ <para><itemizedlist>
+ <listitem>
+ <para>Numlock emulation</para>
+ </listitem>
+
+ <listitem>
+ <para>CPU frequency metric</para>
+ </listitem>
+
+ <listitem>
+ <para>Memory ballooning</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Mac OS X guests:</emphasis>
+ <itemizedlist>
+ <listitem>
+ <para>Mac OS X guests can only run on a certain host hardware.
+ For details about license and host hardware limitations, please
+ see <xref linkend="intro-macosxguests" /> and check the Apple
+ software license conditions.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox does not provide Guest Additions for Mac OS X
+ at this time.</para>
+ </listitem>
+
+ <listitem>
+ <para>The graphics resolution currently defaults to 1024x768 as
+ Mac OS X falls back to the built-in EFI display support. See
+ <xref linkend="efividmode" /> for more information on how to
+ change EFI video modes.</para>
+ </listitem>
+
+ <listitem>
+ <para>Even when idle, Mac OS X guests currently burn 100% CPU.
+ This is a power management issue that will be addressed in a
+ future release.</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X guests only work with one CPU assigned to the
+ VM. Support for SMP will be provided in a future release.</para>
+ </listitem>
+
+ <listitem>
+ <para>Depending on your system and version of Mac OS X, you
+ might experience guest hangs after some time. This can be fixed
+ by turning off energy saving (set timeout to "Never") in the
+ system preferences.</para>
+ </listitem>
+
+ <listitem>
+ <para>By default, the VirtualBox EFI enables debug output of the
+ Mac OS X kernel to help you diagnose boot problems. Note that
+ there is a lot of output and not all errors are fatal (they
+ would also show on your physical Mac). You can turn off these
+ messages by issuing this command:<screen>VBoxManage setextradata "VM name" "VBoxInternal2/EfiBootArgs" " "</screen>To
+ revert to the previous behavior, use:<screen>VBoxManage setextradata "VM name" "VBoxInternal2/EfiBootArgs" ""</screen></para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Solaris hosts:</emphasis> <itemizedlist>
+ <listitem>
+ <para>There is no support for USB devices connected to Solaris 10
+ hosts.</para>
+ </listitem>
+
+ <listitem>
+ <para>USB support on Solaris hosts requires Solaris 11 version
+ snv_124 or higher. Webcams and other isochronous devices are known
+ to have poor performance.</para>
+ </listitem>
+
+ <listitem>
+ <para>No ACPI information (battery status, power source) is
+ reported to the guest.</para>
+ </listitem>
+
+ <listitem>
+ <para>No support for using wireless adapters with bridged
+ networking.</para>
+ </listitem>
+
+ <listitem>
+ <para>Crossbow-based bridged networking on Solaris 11 hosts does
+ not work directly with aggregate links. However, you can manually
+ create a VNIC (using <computeroutput>dladm</computeroutput>) over
+ the aggregate link and use that with a VM. This technical
+ limitation will be addressed in a future Solaris 11 release.</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Guest Additions of version 4.1, 4.1.2 and 4.1.4 for Windows</emphasis>
+ Thus VirtualBox WDDM Video driver may be installed and kept in guest system
+ if Guest additions uninstallation is performed.
+ This is caused by a bug in Guest Additions uninstaller.
+ <note>
+ <para>This does <emphasis role="bold">not</emphasis> apply to Guest Additions update,
+ i.e. installing a one version of Guest Additions on top of another works correctly.</para>
+ </note>
+ To solve this problem, one should uninstall the VirtualBox WDDM Video driver manually.
+ To do that open Device Manager, and check whether the Display Adapter is named
+ "VirtualBox Graphics Adapter ..". If no - there is nothing to be done. If yes - right-clik
+ the VirtualBox Graphics Adapter in Device Manager, select "Uninstall", check "Delete the driver software for this device"
+ and click "OK". Once uninstallation is done - in Device Manager go to menu "Action" and select
+ "Scan for hardware changes" to make the propper (Windows default) driver be picked up for the Graphics adapter.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Neither <emphasis>virtio</emphasis> nor <emphasis>Intel PRO/1000
+ </emphasis> drivers for <emphasis role="bold">Windows XP guests
+ </emphasis> support segmentation offloading. Therefore
+ Windows XP guests have slower transmission rates comparing to other
+ guest types. Refer to MS Knowledge base article 842264 for additional
+ information.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Guest Additions for OS/2.</emphasis> Shared
+ folders are not yet supported with OS/2 guests. In addition, seamless
+ windows and automatic guest resizing will probably never be implemented
+ due to inherent limitations of the OS/2 graphics system.</para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+</chapter>
diff --git a/doc/manual/en_US/user_Networking.xml b/doc/manual/en_US/user_Networking.xml
new file mode 100644
index 00000000..36d32b49
--- /dev/null
+++ b/doc/manual/en_US/user_Networking.xml
@@ -0,0 +1,873 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<chapter id="networkingdetails">
+ <title>Virtual networking</title>
+
+ <para>As briefly mentioned in <xref linkend="settings-network" />,
+ VirtualBox provides up to eight virtual PCI Ethernet cards for each virtual
+ machine. For each such card, you can individually select<orderedlist>
+ <listitem>
+ <para>the hardware that will be virtualized as well as</para>
+ </listitem>
+
+ <listitem>
+ <para>the virtualization mode that the virtual card will be operating
+ in with respect to your physical networking hardware on the
+ host.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>Four of the network cards can be configured in the "Network" section
+ of the settings dialog in the graphical user interface of VirtualBox. You
+ can configure all eight network cards on the command line via VBoxManage
+ modifyvm; see <xref linkend="vboxmanage-modifyvm" />.</para>
+
+ <para>This chapter explains the various networking settings in more
+ detail.</para>
+
+ <sect1 id="nichardware">
+ <title>Virtual networking hardware</title>
+
+ <para>For each card, you can individually select what kind of
+ <emphasis>hardware</emphasis> will be presented to the virtual machine.
+ VirtualBox can virtualize the following six types of networking
+ hardware:<itemizedlist>
+ <listitem>
+ <para>AMD PCNet PCI II (Am79C970A);</para>
+ </listitem>
+
+ <listitem>
+ <para>AMD PCNet FAST III (Am79C973, the default);</para>
+ </listitem>
+
+ <listitem>
+ <para>Intel PRO/1000 MT Desktop (82540EM);</para>
+ </listitem>
+
+ <listitem>
+ <para>Intel PRO/1000 T Server (82543GC);</para>
+ </listitem>
+
+ <listitem>
+ <para>Intel PRO/1000 MT Server (82545EM);</para>
+ </listitem>
+
+ <listitem>
+ <para>Paravirtualized network adapter (virtio-net).</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>The PCNet FAST III is the default because it is supported by nearly
+ all operating systems out of the box, as well as the GNU GRUB boot
+ manager. As an exception, the Intel PRO/1000 family adapters are chosen
+ for some guest operating system types that no longer ship with drivers for
+ the PCNet card, such as Windows Vista.</para>
+
+ <para>The Intel PRO/1000 MT Desktop type works with Windows Vista and
+ later versions. The T Server variant of the Intel PRO/1000 card is
+ recognized by Windows XP guests without additional driver installation.
+ The MT Server variant facilitates OVF imports from other platforms.</para>
+
+ <para>The <emphasis role="bold">"Paravirtualized network adapter
+ (virtio-net)"</emphasis> is special. If you select this, then VirtualBox
+ does <emphasis>not</emphasis> virtualize common networking hardware (that
+ is supported by common guest operating systems out of the box). Instead,
+ VirtualBox then expects a special software interface for virtualized
+ environments to be provided by the guest, thus avoiding the complexity of
+ emulating networking hardware and improving network performance. Starting
+ with version 3.1, VirtualBox provides support for the industry-standard
+ "virtio" networking drivers, which are part of the open-source KVM
+ project.</para>
+
+ <para>The "virtio" networking drivers are available for the following
+ guest operating systems:</para>
+
+ <para><itemizedlist>
+ <listitem>
+ <para>Linux kernels version 2.6.25 or later can be configured to
+ provide virtio support; some distributions also back-ported virtio
+ to older kernels.</para>
+ </listitem>
+
+ <listitem>
+ <para>For Windows 2000, XP and Vista, virtio drivers can be
+ downloaded and installed from the KVM project web page.<footnote>
+ <para><ulink
+ url="http://www.linux-kvm.org/page/WindowsGuestDrivers">http://www.linux-kvm.org/page/WindowsGuestDrivers</ulink>.</para>
+ </footnote></para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>VirtualBox also has limited support for so-called <emphasis
+ role="bold">jumbo frames</emphasis>, i.e. networking packets with more
+ than 1500 bytes of data, provided that you use the Intel card
+ virtualization and bridged networking. In other words, jumbo frames are
+ not supported with the AMD networking devices; in those cases, jumbo
+ packets will silently be dropped for both the transmit and the receive
+ direction. Guest operating systems trying to use this feature will observe
+ this as a packet loss, which may lead to unexpected application behavior
+ in the guest. This does not cause problems with guest operating systems in
+ their default configuration, as jumbo frames need to be explicitly
+ enabled.</para>
+ </sect1>
+
+ <sect1 id="networkingmodes">
+ <title>Introduction to networking modes</title>
+
+ <para>Each of the eight networking adapters can be separately configured
+ to operate in one of the following modes:<glosslist>
+ <glossentry>
+ <glossterm>Not attached</glossterm>
+
+ <glossdef>
+ <para>In this mode, VirtualBox reports to the guest that a network
+ card is present, but that there is no connection -- as if no
+ Ethernet cable was plugged into the card. This way it is possible
+ to "pull" the virtual Ethernet cable and disrupt the connection,
+ which can be useful to inform a guest operating system that no
+ network connection is available and enforce a
+ reconfiguration.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Network Address Translation (NAT)</glossterm>
+
+ <glossdef>
+ <para>If all you want is to browse the Web, download files and
+ view e-mail inside the guest, then this default mode should be
+ sufficient for you, and you can safely skip the rest of this
+ section. Please note that there are certain limitations when using
+ Windows file sharing (see <xref linkend="nat-limitations" /> for
+ details).</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Bridged networking</glossterm>
+
+ <glossdef>
+ <para>This is for more advanced networking needs such as network
+ simulations and running servers in a guest. When enabled,
+ VirtualBox connects to one of your installed network cards and
+ exchanges network packets directly, circumventing your host
+ operating system's network stack.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Internal networking</glossterm>
+
+ <glossdef>
+ <para>This can be used to create a different kind of
+ software-based network which is visible to selected virtual
+ machines, but not to applications running on the host or to the
+ outside world.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Host-only networking</glossterm>
+
+ <glossdef>
+ <para>This can be used to create a network containing the host and
+ a set of virtual machines, without the need for the host's
+ physical network interface. Instead, a virtual network interface
+ (similar to a loopback interface) is created on the host,
+ providing connectivity among virtual machines and the host.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Generic networking</glossterm>
+
+ <glossdef>
+ <para>Rarely used modes share the same generic network interface,
+ by allowing the user to select a driver which can be included with
+ VirtualBox or be distributed in an extension pack.</para>
+
+ <para>At the moment there are potentially two available
+ sub-modes:</para>
+
+ <para><glosslist>
+ <glossentry>
+ <glossterm>UDP Tunnel</glossterm>
+
+ <glossdef>
+ <para>This can be used to interconnect virtual machines
+ running on different hosts directly, easily and
+ transparently, over existing network
+ infrastructure.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>VDE (Virtual Distributed Ethernet)
+ networking</glossterm>
+
+ <glossdef>
+ <para>This option can be used to connect to a Virtual
+ Distributed Ethernet switch on a Linux or a FreeBSD host.
+ At the moment this needs compiling VirtualBox from
+ sources, as the Oracle packages do not include it.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+
+ <para>The following sections describe the available network modes in more
+ detail.</para>
+ </sect1>
+
+ <sect1 id="network_nat">
+ <title>Network Address Translation (NAT)</title>
+
+ <para>Network Address Translation (NAT) is the simplest way of accessing
+ an external network from a virtual machine. Usually, it does not require
+ any configuration on the host network and guest system. For this reason,
+ it is the default networking mode in VirtualBox.</para>
+
+ <para>A virtual machine with NAT enabled acts much like a real computer
+ that connects to the Internet through a router. The "router", in this
+ case, is the VirtualBox networking engine, which maps traffic from and to
+ the virtual machine transparently. In VirtualBox this router is placed
+ between each virtual machine and the host. This separation maximizes
+ security since by default virtual machines cannot talk to each
+ other.</para>
+
+ <para>The disadvantage of NAT mode is that, much like a private network
+ behind a router, the virtual machine is invisible and unreachable from the
+ outside internet; you cannot run a server this way unless you set up port
+ forwarding (described below).</para>
+
+ <para>The network frames sent out by the guest operating system are
+ received by VirtualBox's NAT engine, which extracts the TCP/IP data and
+ resends it using the host operating system. To an application on the host,
+ or to another computer on the same network as the host, it looks like the
+ data was sent by the VirtualBox application on the host, using an IP
+ address belonging to the host. VirtualBox listens for replies to the
+ packages sent, and repacks and resends them to the guest machine on its
+ private network.</para>
+
+ <para>The virtual machine receives its network address and configuration
+ on the private network from a DHCP server integrated into VirtualBox. The
+ IP address thus assigned to the virtual machine is usually on a completely
+ different network than the host. As more than one card of a virtual
+ machine can be set up to use NAT, the first card is connected to the
+ private network 10.0.2.0, the second card to the network 10.0.3.0 and so
+ on. If you need to change the guest-assigned IP range for some reason,
+ please refer to <xref linkend="changenat" />.</para>
+
+ <sect2 id="natforward">
+ <title>Configuring port forwarding with NAT</title>
+
+ <para>As the virtual machine is connected to a private network internal
+ to VirtualBox and invisible to the host, network services on the guest
+ are not accessible to the host machine or to other computers on the same
+ network. However, like a physical router, VirtualBox can make selected
+ services available to the world outside the guest through <emphasis
+ role="bold">port forwarding.</emphasis> This means that VirtualBox
+ listens to certain ports on the host and resends all packets which
+ arrive there to the guest, on the same or a different port.</para>
+
+ <para>To an application on the host or other physical (or virtual)
+ machines on the network, it looks as though the service being proxied is
+ actually running on the host. This also means that you cannot run the
+ same service on the same ports on the host. However, you still gain the
+ advantages of running the service in a virtual machine -- for example,
+ services on the host machine or on other virtual machines cannot be
+ compromised or crashed by a vulnerability or a bug in the service, and
+ the service can run in a different operating system than the host
+ system.</para>
+
+ <para>You can set up a guest service which you wish to proxy using the
+ command line tool <computeroutput>VBoxManage</computeroutput>; for
+ details, please refer to <xref linkend="vboxmanage-modifyvm" />.</para>
+
+ <para>You will need to know which ports on the guest the service uses
+ and to decide which ports to use on the host (often but not always you
+ will want to use the same ports on the guest and on the host). You can
+ use any ports on the host which are not already in use by a service. For
+ example, to set up incoming NAT connections to an
+ <computeroutput>ssh</computeroutput> server in the guest, use the
+ following command: <screen>VBoxManage modifyvm "VM name" --natpf1 "guestssh,tcp,,2222,,22"</screen>With
+ the above example, all TCP traffic arriving on port 2222 on any host
+ interface will be forwarded to port 22 in the guest. The protocol name
+ <computeroutput>tcp</computeroutput> is a mandatory attribute defining
+ which protocol should be used for forwarding
+ (<computeroutput>udp</computeroutput> could also be used). The name
+ <computeroutput>guestssh</computeroutput> is purely descriptive and will
+ be auto-generated if omitted. The number after
+ <computeroutput>--natpf</computeroutput> denotes the network card, like
+ in other parts of VBoxManage.</para>
+
+ <para>To remove this forwarding rule again, use the following command:
+ <screen>VBoxManage modifyvm "VM name" --natpf1 delete "guestssh"</screen></para>
+
+ <para>If for some reason the guest uses a static assigned IP address not
+ leased from the built-in DHCP server, it is required to specify the
+ guest IP when registering the forwarding rule: <screen>VBoxManage modifyvm "VM name" --natpf1 "guestssh,tcp,,2222,10.0.2.19,22"</screen>This
+ example is identical to the previous one, except that the NAT engine is
+ being told that the guest can be found at the 10.0.2.19 address.</para>
+
+ <para>To forward <emphasis>all</emphasis> incoming traffic from a
+ specific host interface to the guest, specify the IP of that host
+ interface like this:<screen>VBoxManage modifyvm "VM name" --natpf1 "guestssh,tcp,127.0.0.1,2222,,22"</screen>This
+ forwards all TCP traffic arriving on the localhost interface (127.0.0.1)
+ via port 2222 to port 22 in the guest.</para>
+
+ <para>It is not possible to configure incoming NAT connections while the
+ VM is running. However, you can change the settings for a VM which is
+ currently saved (or powered off at a snapshot).</para>
+ </sect2>
+
+ <sect2 id="nat-tftp">
+ <title>PXE booting with NAT</title>
+
+ <para>PXE booting is now supported in NAT mode. The NAT DHCP server
+ provides a boot file name of the form
+ <computeroutput>vmname.pxe</computeroutput> if the directory
+ <computeroutput>TFTP</computeroutput> exists in the directory where the
+ user's <computeroutput>VirtualBox.xml</computeroutput> file is kept. It
+ is the responsibility of the user to provide
+ <computeroutput>vmname.pxe</computeroutput>.</para>
+ </sect2>
+
+ <sect2 id="nat-limitations">
+ <title>NAT limitations</title>
+
+ <para>There are four <emphasis role="bold">limitations</emphasis> of NAT
+ mode which users should be aware of:</para>
+
+ <glosslist>
+ <glossentry>
+ <glossterm>ICMP protocol limitations:</glossterm>
+
+ <glossdef>
+ <para>Some frequently used network debugging tools (e.g.
+ <computeroutput>ping</computeroutput> or tracerouting) rely on the
+ ICMP protocol for sending/receiving messages. While ICMP support
+ has been improved with VirtualBox 2.1
+ (<computeroutput>ping</computeroutput> should now work), some
+ other tools may not work reliably.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Receiving of UDP broadcasts is not reliable:</glossterm>
+
+ <glossdef>
+ <para>The guest does not reliably receive broadcasts, since, in
+ order to save resources, it only listens for a certain amount of
+ time after the guest has sent UDP data on a particular port. As a
+ consequence, NetBios name resolution based on broadcasts does not
+ always work (but WINS always works). As a workaround, you can use
+ the numeric IP of the desired server in the
+ <computeroutput>\\server\share</computeroutput> notation.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Protocols such as GRE are unsupported:</glossterm>
+
+ <glossdef>
+ <para>Protocols other than TCP and UDP are not supported. This
+ means some VPN products (e.g. PPTP from Microsoft) cannot be used.
+ There are other VPN products which use simply TCP and UDP.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Forwarding host ports &lt; 1024 impossible:</glossterm>
+
+ <glossdef>
+ <para>On Unix-based hosts (e.g. Linux, Solaris, Mac OS X) it is
+ not possible to bind to ports below 1024 from applications that
+ are not run by <computeroutput>root</computeroutput>. As a result,
+ if you try to configure such a port forwarding, the VM will refuse
+ to start.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist>
+
+ <para>These limitations normally don't affect standard network use. But
+ the presence of NAT has also subtle effects that may interfere with
+ protocols that are normally working. One example is NFS, where the
+ server is often configured to refuse connections from non-privileged
+ ports (i.e. ports not below 1024).</para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title id="network_bridged">Bridged networking</title>
+
+ <para>With bridged networking, VirtualBox uses a device driver on your
+ <emphasis>host</emphasis> system that filters data from your physical
+ network adapter. This driver is therefore called a "net filter" driver.
+ This allows VirtualBox to intercept data from the physical network and
+ inject data into it, effectively creating a new network interface in
+ software. When a guest is using such a new software interface, it looks to
+ the host system as though the guest were physically connected to the
+ interface using a network cable: the host can send data to the guest
+ through that interface and receive data from it. This means that you can
+ set up routing or bridging between the guest and the rest of your
+ network.</para>
+
+ <para>For this to work, VirtualBox needs a device driver on your host
+ system. The way bridged networking works has been completely rewritten
+ with VirtualBox 2.0 and 2.1, depending on the host operating system. From
+ the user perspective, the main difference is that complex configuration is
+ no longer necessary on any of the supported host operating
+ systems.<footnote>
+ <para>For Mac OS X and Solaris hosts, net filter drivers were already
+ added in VirtualBox 2.0 (as initial support for Host Interface
+ Networking on these platforms). With VirtualBox 2.1, net filter
+ drivers were also added for the Windows and Linux hosts, replacing the
+ mechanisms previously present in VirtualBox for those platforms;
+ especially on Linux, the earlier method required creating TAP
+ interfaces and bridges, which was complex and varied from one
+ distribution to the next. None of this is necessary anymore. Bridged
+ network was formerly called "Host Interface Networking" and has been
+ renamed with version 2.2 without any change in functionality.</para>
+ </footnote></para>
+
+ <para><note>
+ <para>Even though TAP is no longer necessary on Linux with bridged
+ networking, you <emphasis>can</emphasis> still use TAP interfaces for
+ certain advanced setups, since you can connect a VM to any host
+ interface -- which could also be a TAP interface.</para>
+ </note>To enable bridged networking, all you need to do is to open the
+ Settings dialog of a virtual machine, go to the "Network" page and select
+ "Bridged network" in the drop down list for the "Attached to" field.
+ Finally, select desired host interface from the list at the bottom of the
+ page, which contains the physical network interfaces of your systems. On a
+ typical MacBook, for example, this will allow you to select between "en1:
+ AirPort" (which is the wireless interface) and "en0: Ethernet", which
+ represents the interface with a network cable.</para>
+
+ <note><para>Bridging to a wireless interface is done differently from
+ bridging to a wired interface, because most wireless adapters do not
+ support promiscuous mode. All traffic has to use the MAC address of the
+ host's wireless adapter, and therefore VirtualBox needs to replace the
+ source MAC address in the Ethernet header of an outgoing packet to make
+ sure the reply will be sent to the host interface. When VirtualBox sees
+ an incoming packet with a destination IP address that belongs to one of
+ the virtual machine adapters it replaces the destination MAC address in
+ the Ethernet header with the VM adapter's MAC address and passes it on.
+ VirtualBox examines ARP and DHCP packets in order to learn the IP
+ addresses of virtual machines.</para></note>
+
+ <para>Depending on your host operating system, the following limitations
+ should be kept in mind:<itemizedlist>
+ <listitem>
+ <para>On <emphasis role="bold">Macintosh</emphasis> hosts,
+ functionality is limited when using AirPort (the Mac's wireless
+ networking) for bridged networking. Currently, VirtualBox supports
+ only IPv4 over AirPort. For other protocols such as IPv6 and IPX,
+ you must choose a wired interface.</para>
+ </listitem>
+
+ <listitem>
+ <para>On <emphasis role="bold">Linux</emphasis> hosts, functionality
+ is limited when using wireless interfaces for bridged networking.
+ Currently, VirtualBox supports only IPv4 over wireless. For other
+ protocols such as IPv6 and IPX, you must choose a wired
+ interface.</para>
+
+ <para>Also, setting the MTU to less than 1500 bytes on wired
+ interfaces provided by the sky2 driver on the Marvell Yukon II EC
+ Ultra Ethernet NIC is known to cause packet losses under certain
+ conditions.</para>
+
+ <para>Some adapters strip VLAN tags in hardware. This does not allow
+ to use VLAN trunking between VM and the external network with
+ pre-2.6.27 Linux kernels nor with host operating systems other than
+ Linux.</para>
+ </listitem>
+
+ <listitem>
+ <para>On <emphasis role="bold">Solaris</emphasis> hosts, there is no
+ support for using wireless interfaces. Filtering guest traffic using
+ IPFilter is also not completely supported due to technical
+ restrictions of the Solaris networking subsystem. These issues would
+ be addressed in a future release of Solaris 11.</para>
+
+ <para>Starting with VirtualBox 4.1, on Solaris 11 hosts (build 159
+ and above), it is possible to use Solaris' Crossbow Virtual Network
+ Interfaces (VNICs) directly with VirtualBox without any additional
+ configuration other than each VNIC must be exclusive for every guest
+ network interface. With VirtualBox 2.0.4 and above, VNICs can be
+ used but with the following caveats:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>A VNIC cannot be shared between multiple guest network
+ interfaces, i.e. each guest network interface must have its own,
+ exclusive VNIC.</para>
+ </listitem>
+
+ <listitem>
+ <para>The VNIC and the guest network interface that uses the
+ VNIC must be assigned identical MAC addresses.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>When using VLAN interfaces with VirtualBox, they must be named
+ according to the PPA-hack naming scheme (e.g. "e1000g513001"), as
+ otherwise the guest may receive packets in an unexpected
+ format.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect1>
+
+ <sect1 id="network_internal">
+ <title>Internal networking</title>
+
+ <para>Internal Networking is similar to bridged networking in that the VM
+ can directly communicate with the outside world. However, the "outside
+ world" is limited to other VMs on the same host which connect to the same
+ internal network.</para>
+
+ <para>Even though technically, everything that can be done using internal
+ networking can also be done using bridged networking, there are security
+ advantages with internal networking. In bridged networking mode, all
+ traffic goes through a physical interface of the host system. It is
+ therefore possible to attach a packet sniffer (such as Wireshark) to the
+ host interface and log all traffic that goes over it. If, for any reason,
+ you prefer two or more VMs on the same machine to communicate privately,
+ hiding their data from both the host system and the user, bridged
+ networking therefore is not an option.</para>
+
+ <para>Internal networks are created automatically as needed, i.e. there is
+ no central configuration. Every internal network is identified simply by
+ its name. Once there is more than one active virtual network card with the
+ same internal network ID, the VirtualBox support driver will automatically
+ "wire" the cards and act as a network switch. The VirtualBox support
+ driver implements a complete Ethernet switch and supports both
+ broadcast/multicast frames and promiscuous mode.</para>
+
+ <para>In order to attach a VM's network card to an internal network, set
+ its networking mode to "internal networking". There are two ways to
+ accomplish this:</para>
+
+ <para><itemizedlist>
+ <listitem>
+ <para>You can use a VM's "Settings" dialog in the VirtualBox
+ graphical user interface. In the "Networking" category of the
+ settings dialog, select "Internal Networking" from the drop-down
+ list of networking modes. Now select the name of an existing
+ internal network from the drop-down below or enter a new name into
+ the entry field.</para>
+ </listitem>
+
+ <listitem>
+ <para>You can use <screen>VBoxManage modifyvm "VM name" --nic&lt;x&gt; intnet</screen>
+ Optionally, you can specify a network name with the command <screen>VBoxManage modifyvm "VM name" --intnet&lt;x&gt; "network name"</screen>
+ If you do not specify a network name, the network card will be
+ attached to the network <computeroutput>intnet</computeroutput> by
+ default.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>Unless you configure the (virtual) network cards in the guest
+ operating systems that are participating in the internal network to use
+ static IP addresses, you may want to use the DHCP server that is built
+ into VirtualBox to manage IP addresses for the internal network. Please
+ see <xref linkend="vboxmanage-dhcpserver" /> for details.</para>
+
+ <para>As a security measure, the Linux implementation of internal
+ networking only allows VMs running under the same user ID to establish an
+ internal network.</para>
+ </sect1>
+
+ <sect1 id="network_hostonly">
+ <title>Host-only networking</title>
+
+ <para>Host-only networking is another networking mode that was added with
+ version 2.2 of VirtualBox. It can be thought of as a hybrid between the
+ bridged and internal networking modes: as with bridged networking, the
+ virtual machines can talk to each other and the host as if they were
+ connected through a physical ethernet switch. Similarly, as with internal
+ networking however, a physical networking interface need not be present,
+ and the virtual machines cannot talk to the world outside the host since
+ they are not connected to a physical networking interface.</para>
+
+ <para>Instead, when host-only networking is used, VirtualBox creates a new
+ software interface on the host which then appears next to your existing
+ network interfaces. In other words, whereas with bridged networking an
+ existing physical interface is used to attach virtual machines to, with
+ host-only networking a new "loopback" interface is created on the host.
+ And whereas with internal networking, the traffic between the virtual
+ machines cannot be seen, the traffic on the "loopback" interface on the
+ host can be intercepted.</para>
+
+ <para>Host-only networking is particularly useful for preconfigured
+ virtual appliances, where multiple virtual machines are shipped together
+ and designed to cooperate. For example, one virtual machine may contain a
+ web server and a second one a database, and since they are intended to
+ talk to each other, the appliance can instruct VirtualBox to set up a
+ host-only network for the two. A second (bridged) network would then
+ connect the web server to the outside world to serve data to, but the
+ outside world cannot connect to the database.</para>
+
+ <para>To change a virtual machine's virtual network interface to "host
+ only" mode:<itemizedlist>
+ <listitem>
+ <para>either go to the "Network" page in the virtual machine's
+ settings notebook in the graphical user interface and select
+ "Host-only networking", or</para>
+ </listitem>
+
+ <listitem>
+ <para>on the command line, type <computeroutput>VBoxManage modifyvm
+ "VM name" --nic&lt;x&gt; hostonly</computeroutput>; see <xref
+ linkend="vboxmanage-modifyvm" /> for details.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>For host-only networking, like with internal networking, you may
+ find the DHCP server useful that is built into VirtualBox. This can be
+ enabled to then manage the IP addresses in the host-only network since
+ otherwise you would need to configure all IP addresses
+ statically.<itemizedlist>
+ <listitem>
+ <para>In the VirtualBox graphical user interface, you can configure
+ all these items in the global settings via "File" -&gt; "Settings"
+ -&gt; "Network", which lists all host-only networks which are
+ presently in use. Click on the network name and then on the "Edit"
+ button to the right, and you can modify the adapter and DHCP
+ settings.</para>
+ </listitem>
+
+ <listitem>
+ <para>Alternatively, you can use <computeroutput>VBoxManage
+ dhcpserver</computeroutput> on the command line; please see <xref
+ linkend="vboxmanage-dhcpserver" /> for details.</para>
+ </listitem>
+ </itemizedlist></para>
+ <para><note>On Linux and Mac OS X hosts the number of host-only interfaces is
+ limited to 128. There is no such limit for Solaris and Windows hosts.</note></para>
+ </sect1>
+
+ <sect1 id="network_udp_tunnel">
+ <title>UDP Tunnel networking</title>
+
+ <para>This networking mode allows to interconnect virtual machines running
+ on different hosts.</para>
+
+ <para>Technically this is done by encapsulating Ethernet frames sent or
+ received by the guest network card into UDP/IP datagrams, and sending them
+ over any network available to the host.</para>
+
+ <para>UDP Tunnel mode has three parameters:<glosslist>
+ <glossentry>
+ <glossterm>Source UDP port</glossterm>
+
+ <glossdef>
+ <para>The port on which the host listens. Datagrams arriving on
+ this port from any source address will be forwarded to the
+ receiving part of the guest network card.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Destination address</glossterm>
+
+ <glossdef>
+ <para>IP address of the target host of the transmitted
+ data.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Destination UDP port</glossterm>
+
+ <glossdef>
+ <para>Port number to which the transmitted data is sent.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+
+ <para>When interconnecting two virtual machines on two different hosts,
+ their IP addresses must be swapped. On single host, source and destination
+ UDP ports must be swapped.</para>
+
+ <para>In the following example host 1 uses the IP address 10.0.0.1 and
+ host 2 uses IP address 10.0.0.2. Configuration via command-line:<screen> VBoxManage modifyvm "VM 01 on host 1" --nic&lt;x&gt; generic
+ VBoxManage modifyvm "VM 01 on host 1" --nicgenericdrv&lt;x&gt; UDPTunnel
+ VBoxManage modifyvm "VM 01 on host 1" --nicproperty&lt;x&gt; dest=10.0.0.2
+ VBoxManage modifyvm "VM 01 on host 1" --nicproperty&lt;x&gt; sport=10001
+ VBoxManage modifyvm "VM 01 on host 1" --nicproperty&lt;x&gt; dport=10002</screen>
+ and <screen> VBoxManage modifyvm "VM 02 on host 2" --nic&lt;y&gt; generic
+ VBoxManage modifyvm "VM 02 on host 2" --nicgenericdrv&lt;y&gt; UDPTunnel
+ VBoxManage modifyvm "VM 02 on host 2" --nicproperty&lt;y&gt; dest=10.0.0.1
+ VBoxManage modifyvm "VM 02 on host 2" --nicproperty&lt;y&gt; sport=10002
+ VBoxManage modifyvm "VM 02 on host 2" --nicproperty&lt;y&gt; dport=10001</screen></para>
+
+ <para>Of course, you can always interconnect two virtual machines on the
+ same host, by setting the destination address parameter to 127.0.0.1 on
+ both. It will act similarly to "Internal network" in this case, however
+ the host can see the network traffic which it could not in the normal
+ Internal network case.</para>
+
+ <para><note>
+ On Unix-based hosts (e.g. Linux, Solaris, Mac OS X) it is not possible to bind to ports below 1024 from applications that are not run by
+
+ <computeroutput>root</computeroutput>
+
+ . As a result, if you try to configure such a source UDP port, the VM will refuse to start.
+ </note></para>
+ </sect1>
+
+ <sect1 id="network_vde">
+ <title>VDE networking</title>
+
+ <para>Virtual Distributed Ethernet (VDE<footnote>
+ <para>VDE is a project developed by Renzo Davoli, Associate Professor
+ at the University of Bologna, Italy.</para>
+ </footnote>) is a flexible, virtual network infrastructure system,
+ spanning across multiple hosts in a secure way. It allows for L2/L3
+ switching, including spanning-tree protocol, VLANs, and WAN emulation. It
+ is an optional part of VirtualBox which is only included in the source
+ code.</para>
+
+ <para>The basic building blocks of the infrastructure are VDE switches,
+ VDE plugs and VDE wires which inter-connect the switches.</para>
+
+ <para>The VirtualBox VDE driver has one parameter:<glosslist>
+ <glossentry>
+ <glossterm>VDE network</glossterm>
+
+ <glossdef>
+ <para>The name of the VDE network switch socket to which the VM
+ will be connected.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+
+ <para>The following basic example shows how to connect a virtual machine
+ to a VDE switch:</para>
+
+ <para><orderedlist>
+ <listitem>
+ <para>Create a VDE switch: <screen>vde_switch -s /tmp/switch1</screen></para>
+ </listitem>
+
+ <listitem>
+ <para>Configuration via command-line: <screen>VBoxManage modifyvm "VM name" --nic&lt;x&gt; generic</screen>
+ <screen>VBoxManage modifyvm "VM name" --nicgenericdrv&lt;x&gt; VDE</screen>
+ To connect to automatically allocated switch port, use: <screen>VBoxManage modifyvm "VM name" --nicproperty&lt;x&gt; network=/tmp/switch1</screen>
+ To connect to specific switch port &lt;n&gt;, use: <screen>VBoxManage modifyvm "VM name" --nicproperty&lt;x&gt; network=/tmp/switch1[&lt;n&gt;]</screen>
+ The latter option can be useful for VLANs.</para>
+ </listitem>
+
+ <listitem>
+ <para>Optionally map between VDE switch port and VLAN: (from switch
+ CLI) <screen>vde$ vlan/create &lt;VLAN&gt;</screen> <screen>vde$ port/setvlan &lt;port&gt; &lt;VLAN&gt;</screen></para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>VDE is available on Linux and FreeBSD hosts only. It is only
+ available if the VDE software and the VDE plugin library from the
+ VirtualSquare project are installed on the host system<footnote>
+ <para>For Linux hosts, the shared library libvdeplug.so must be
+ available in the search path for shared libraries</para>
+ </footnote>. For more information on setting up VDE networks, please see
+ the documentation accompanying the software.<footnote>
+ <para><ulink
+ url="http://wiki.virtualsquare.org/wiki/index.php/VDE_Basic_Networking">http://wiki.virtualsquare.org/wiki/index.php/VDE_Basic_Networking</ulink>.</para>
+ </footnote></para>
+ </sect1>
+
+ <sect1 id="network_bandwidth_limit">
+ <title>Limiting bandwidth for network I/O</title>
+
+ <para>Starting with version 4.2, VirtualBox allows for limiting the
+ maximum bandwidth used for network transmission. Several network adapters
+ of one VM may share limits through bandwidth groups. It is possible
+ to have more than one such limit.</para>
+ <note><para>VirtualBox shapes VM traffic only in the transmit direction,
+ delaying the packets being sent by virtual machines. It does not limit
+ the traffic being received by virtual machines.</para>
+ </note>
+
+ <para>Limits are configured through
+ <computeroutput>VBoxManage</computeroutput>. The example below creates a
+ bandwidth group named "Limit", sets the limit to 20 Mbit/s and assigns the
+ group to the first and second adapters of the VM:<screen>VBoxManage bandwidthctl "VM name" add Limit --type network --limit 20m
+VBoxManage modifyvm "VM name" --nicbandwidthgroup1 Limit
+VBoxManage modifyvm "VM name" --nicbandwidthgroup2 Limit</screen></para>
+
+ <para>All adapters in a group share the bandwidth limit, meaning that in the
+ example above the bandwidth of both adapters combined can never exceed 20
+ Mbit/s. However, if one adapter doesn't require bandwidth the other can use the
+ remaining bandwidth of its group.</para>
+
+ <para>The limits for each group can be changed while the VM is running,
+ with changes being picked up immediately. The example below changes the
+ limit for the group created in the example above to 100 Kbit/s:<screen>VBoxManage bandwidthctl "VM name" set Limit --limit 100k</screen></para>
+
+ <para>To completely disable shaping for the first adapter of VM use the
+ following command:
+ <screen>VBoxManage modifyvm "VM name" --nicbandwidthgroup1 none</screen></para>
+
+ <para>It is also possible to disable shaping for all adapters assigned to a
+ bandwidth group while VM is running, by specifying the zero limit for the
+ group. For example, for the bandwidth group named "Limit" use:
+ <screen>VBoxManage bandwidthctl "VM name" set Limit --limit 0</screen></para>
+ </sect1>
+ <sect1 id="network_performance">
+ <title>Improving network performance</title>
+
+ <para>VirtualBox provides a variety of virtual network adapters that can be
+ "attached" to the host's network in a number of ways. Depending on which
+ types of adapters and attachments are used the network performance will
+ be different. Performance-wise the <emphasis>virtio</emphasis> network
+ adapter is preferrable over <emphasis>Intel PRO/1000</emphasis> emulated
+ adapters, which are preferred over <emphasis>PCNet</emphasis> family of
+ adapters. Both <emphasis>virtio</emphasis> and <emphasis>Intel PRO/1000
+ </emphasis> adapters enjoy the benefit of segmentation and checksum
+ offloading. Segmentation offloading is essential for high performance as
+ it allows for less context switches, drammatically increasing the sizes
+ of packets that cross VM/host bondary.</para>
+ <note><para>Neither <emphasis>virtio</emphasis> nor <emphasis>Intel PRO/1000
+ </emphasis> drivers for Windows XP do not support segmentation
+ offloading. Therefore Windows XP guests never reach the same
+ transmission rates as other guest types. Refer to MS Knowledge base
+ article 842264 for additional information.</para>
+ </note>
+ <para>Three attachment types: <emphasis>internal</emphasis>,
+ <emphasis>bridged</emphasis> and <emphasis>host-only</emphasis>, have
+ nearly identical performance, the <emphasis>internal</emphasis> type
+ being a little bit faster and using less CPU cycles as the packets never
+ reach the host's network stack. The <emphasis>NAT</emphasis> attachment
+ is the slowest (and safest) of all attachment types as it provides
+ network address translation. The generic driver attachment is special and
+ cannot be considered as an alternative to other attachment types.</para>
+ <para>The number of CPUs assigned to VM does not improve network
+ performance and in some cases may hurt it due to increased concurency in
+ the guest.</para>
+ <para>Here is the short summary of things to check in order to improve
+ network performance:</para>
+ <para><orderedlist>
+ <listitem>
+ <para>Whenever possible use <emphasis>virtio</emphasis> network
+ adapter, otherwise use one of <emphasis>Intel PRO/1000</emphasis>
+ adapters;</para>
+ </listitem>
+ <listitem>
+ <para>Use <emphasis>bridged</emphasis> attachment instead of
+ <emphasis>NAT</emphasis></para>;
+ </listitem>
+ <listitem>
+ <para>Make sure segmentation offloading is enabled in the guest OS.
+ Usually it will be enabled by default. You can check and modify
+ offloading settings using <computeroutput>ethtool</computeroutput>
+ command in Linux guests.</para>
+ </listitem>
+ </orderedlist></para>
+ </sect1>
+</chapter>
diff --git a/doc/manual/en_US/user_PrivacyPolicy.xml b/doc/manual/en_US/user_PrivacyPolicy.xml
new file mode 100644
index 00000000..bd247b86
--- /dev/null
+++ b/doc/manual/en_US/user_PrivacyPolicy.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+ "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<appendix id="privacy">
+ <title>VirtualBox privacy policy</title>
+
+ <para>Policy version 4, Apr 22, 2010</para>
+
+ <para>This privacy policy sets out how Oracle Corporation ("Oracle") treats
+ personal information related to the virtualbox.org website and the
+ VirtualBox application.</para>
+
+ <para><emphasis role="bold">§ 1 virtualbox.org.</emphasis> The
+ "virtualbox.org" website logs anonymous usage information such as your IP
+ address, geographical location, browser type, referral source, length of
+ visit and number of page views while you visit (collectively, "anonymous
+ data"). In addition, but only if you choose to register, the website's bug
+ tracking and forum services store the data you choose to reveal upon
+ registration, such as your user name and contact information.</para>
+
+ <para><emphasis role="bold">§ 2 Cookies.</emphasis> The virtualbox.org
+ website, the bug tracker and the forum services use cookies to identify and
+ track the visiting web browser and, if you have registered, to facilitate
+ login. Most browsers allow you to refuse to accept cookies. While you can
+ still visit the website with cookies disabled, logging into the bug tracker
+ and forum services will most likely not work without them.</para>
+
+ <para><emphasis role="bold">§ 3 VirtualBox registration process.</emphasis>
+ The VirtualBox application may ask that the user optionally register with
+ Oracle. in der If you choose to register, your name, e-mail address, country
+ and company will be submitted to Oracle and stored together with the IP
+ address of the submitter as well as product version and platform being used.
+ The standard Oracle Privacy Policies as posted on
+ http://www.oracle.com/html/privacy.html apply to this data.</para>
+
+ <para><emphasis role="bold">§ 4 Update notifications.</emphasis> The
+ VirtualBox application may contact Oracle to find out whether a new version
+ of VirtualBox has been released and notify the user if that is the case. In
+ the process, anonymous data such as your IP address and a non-identifying
+ counter, together with the product version and the platform being used, is
+ sent so that the server can find out whether an update is available. By
+ default, this check is performed once a day. You change this interval or
+ disable these checks altogether in the VirtualBox preferences.</para>
+
+ <para><emphasis role="bold">§ 5 Usage of personal information.</emphasis>
+ Oracle may use anonymous and personal data collected by the means above for
+ statistical purposes as well as to automatically inform you about new
+ notices related to your posts on the bug tracker and forum services, to
+ administer the website and to contact you due to technical issues. Oracle
+ may also inform you about new product releases related to VirtualBox.</para>
+
+ <para>In no event will personal data without your express consent be
+ provided to any third parties, unless Oracle may be required to do so by law
+ or in connection with legal proceedings.</para>
+
+ <para><emphasis role="bold">§ 6 Updates.</emphasis> Oracle may update this
+ privacy policy by posting a new version on the virtualbox.org website. You
+ should check this page occasionally to ensure you are happy with any
+ changes.</para>
+</appendix>
diff --git a/doc/manual/en_US/user_Security.xml b/doc/manual/en_US/user_Security.xml
new file mode 100644
index 00000000..fa68c1ed
--- /dev/null
+++ b/doc/manual/en_US/user_Security.xml
@@ -0,0 +1,381 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<chapter id="Security">
+ <title>Security guide</title>
+
+ <sect1>
+ <title>Overview</title>
+ <para>
+ </para>
+
+ <sect2>
+ <title>General Security Principles</title>
+
+ <para>The following principles are fundamental to using any application
+ securely.
+ <glosslist>
+ <glossentry>
+ <glossterm>Keep Software Up To Date</glossterm>
+ <glossdef>
+ <para>
+ One of the principles of good security practise is to keep all
+ software versions and patches up to date. Activate the VirtualBox
+ update notification to get notified when a new VirtualBox release
+ is available. When updating VirtualBox, do not forget to update
+ the Guest Additions. Keep the host operating system as well as the
+ guest operating system up to date.
+ </para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Restrict Network Access to Critical Services</glossterm>
+ <glossdef>
+ <para>
+ Use proper means, for instance a firewall, to protect your computer
+ and your guest(s) from accesses from the outside. Choosing the proper
+ networking mode for VMs helps to separate host networking from the
+ guest and vice versa.
+ </para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Follow the Principle of Least Privilege</glossterm>
+ <glossdef>
+ <para>
+ The principle of least privilege states that users should be given the
+ least amount of privilege necessary to perform their jobs. Always execute VirtualBox
+ as a regular user. We strongly discourage anyone from executing
+ VirtualBox with system privileges.
+ </para>
+ <para>
+ Choose restrictive permissions when creating configuration files,
+ for instance when creating /etc/default/virtualbox, see
+ <xref linkend="linux_install_opts"/>. Mode 0600 would be preferred.
+ </para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Monitor System Activity</glossterm>
+ <glossdef>
+ <para>
+ System security builds on three pillars: good security protocols, proper
+ system configuration and system monitoring. Auditing and reviewing audit
+ records address the third requirement. Each component within a system
+ has some degree of monitoring capability. Follow audit advice in this
+ document and regularly monitor audit records.
+ </para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Keep Up To Date on Latest Security Information</glossterm>
+ <glossdef>
+ <para>
+ Oracle continually improves its software and documentation. Check this
+ note note yearly for revisions.
+ </para>
+ </glossdef>
+ </glossentry>
+
+ </glosslist>
+ </para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Secure Installation and Configuration</title>
+ </sect1>
+
+ <sect2>
+ <title>Installation Overview</title>
+ <para>
+ The VirtualBox base package should be downloaded only from a trusted source,
+ for instance the official website
+ <ulink url="http://www.virtualbox.org">http://www.virtualbox.org</ulink>.
+ The integrity of the package should be verified with the provided SHA256
+ checksum which can be found on the official website.
+ </para>
+ <para>
+ General VirtualBox installation instructions for the supported hosts
+ can be found in <xref linkend="installation"/>.
+ </para>
+ <para>
+ On Windows hosts, the installer allows for disabling USB support, support
+ for bridged networking, support for host-only networking and the Python
+ language bindings, see <xref linkend="installation_windows"/>.
+ All these features are enabled by default but disabling some
+ of them could be appropriate if the corresponding functionality is not
+ required by any virtual machine. The Python language bindings are only
+ required if the VirtualBox API is to be used by external Python
+ applications. In particular USB support and support
+ for the two networking modes require the installation of Windows kernel
+ drivers on the host. Therefore disabling those selected features can
+ not only be used to restrict the user to certain functionality but
+ also to minimize the surface provided to a potential attacker. </para>
+ <para>
+ The general case is to install the complete VirtualBox package. The
+ installation must be done with system privileges. All VirtualBox binaries
+ should be executed as a regular user and never as a privileged user.
+ </para>
+ <para>
+ The Oracle VM VirtualBox extension pack provides additional features
+ and must be downloaded and installed separately, see
+ <xref linkend="intro-installing"/>. As for the base package, the SHA256
+ checksum of the extension pack should be verified. As the installation
+ requires system privileges, VirtualBox will ask for the system
+ password during the installation of the extension pack.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Post Installation Configuration</title>
+ <para>
+ Normally there is no post installation configuration of VirtualBox components
+ required. However, on Solaris and Linux hosts it is necessary to configure
+ the proper permissions for users executing VMs and who should be able to
+ access certain host resources. For instance, Linux users must be member of
+ the <emphasis>vboxusers</emphasis> group to be able to pass USB devices to a
+ guest. If a serial host interface should be accessed from a VM, the proper
+ permissions must be granted to the user to be able to access that device.
+ The same applies to other resources like raw partitions, DVD/CD drives
+ and sound devices.
+ </para>
+ </sect2>
+
+ <sect1>
+ <title>Security Features</title>
+ <para>This section outlines the specific security mechanisms offered
+ by VirtualBox.</para>
+
+ <sect2>
+ <title>The Security Model</title>
+ <para>
+ One property of virtual machine monitors (VMMs) like VirtualBox is to encapsulate
+ a guest by executing it in a protected environment, a virtual machine,
+ running as a user process on the host operating system. The guest cannot
+ communicate directly with the hardware or other computers but only through
+ the VMM. The VMM provides emulated physical resources and devices to the
+ guest which are accessed by the guest operating system to perform the required
+ tasks. The VM settings control the resources provided to the guest, for example
+ the amount of guest memory or the number of guest processors, (see
+ <xref linkend="generalsettings"/>) and the enabled features for that guest
+ (for example remote control, certain screen settings and others).
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Secure Configuration of Virtual Machines</title>
+ <para>
+ Several aspects of a virtual machine configuration are subject to security
+ considerations.</para>
+
+ <sect3>
+ <title>Networking</title>
+ <para>
+ The default networking mode for VMs is NAT which means that
+ the VM acts like a computer behind a router, see
+ <xref linkend="network_nat"/>. The guest is part of a private
+ subnet belonging to this VM and the guest IP is not visible
+ from the outside. This networking mode works without
+ any additional setup and is sufficient for many purposes.
+ </para>
+ <para>
+ If bridged networking is used, the VM acts like a computer inside
+ the same network as the host, see <xref linkend="network_bridged"/>.
+ In this case, the guest has the same network access as the host and
+ a firewall might be necessary to protect other computers on the
+ subnet from a potential malicious guest as well as to protect the
+ guest from a direct access from other computers. In some cases it is
+ worth considering using a forwarding rule for a specific port in NAT
+ mode instead of using bridged networking.
+ </para>
+ <para>
+ Some setups do not require a VM to be connected to the public network
+ at all. Internal networking (see <xref linkend="network_internal"/>)
+ or host-only networking (see <xref linkend="network_hostonly"/>)
+ are often sufficient to connect VMs among each other or to connect
+ VMs only with the host but not with the public network.
+ </para>
+ </sect3>
+
+ <sect3>
+ <title>VRDP remote desktop authentication</title>
+ <para>When using the VirtualBox extension pack provided by Oracle
+ for VRDP remote desktop support, you can optionally use various
+ methods to configure RDP authentication. The "null" method is
+ very insecure and should be avoided in a public network.
+ See <xref linkend="vbox-auth" /> for details.</para>
+ </sect3>
+
+ <sect3 id="security_clipboard">
+ <title>Clipboard</title>
+ <para>
+ The shared clipboard allows users to share data between the host and
+ the guest. Enabling the clipboard in "Bidirectional" mode allows
+ the guest to read and write the host clipboard. The "Host to guest"
+ mode and the "Guest to host" mode limit the access to one
+ direction. If the guest is able to access the host clipboard it
+ can also potentially access sensitive data from the host which is
+ shared over the clipboard.
+ </para>
+ <para>
+ If the guest is able to read from and/or write to the host clipboard
+ then a remote user connecting to the guest over the network will also
+ gain this ability, which may not be desirable. As a consequence, the
+ shared clipboard is disabled for new machines.
+ </para>
+ </sect3>
+
+ <sect3>
+ <title>Shared folders</title>
+ <para>If any host folder is shared with the guest then a remote
+ user connected to the guest over the network can access
+ these files too as the folder sharing mechanism cannot be
+ selectively disabled for remote users.
+ </para>
+ </sect3>
+
+ <sect3>
+ <title>3D graphics acceleration</title>
+ <para>Enabling 3D graphics via the Guest Additions exposes the host
+ to additional security risks; see <xref
+ linkend="guestadd-3d" />.</para>
+ </sect3>
+
+ <sect3>
+ <title>CD/DVD passthrough</title>
+ <para>Enabling CD/DVD passthrough allows the guest to perform advanced
+ operations on the CD/DVD drive, see <xref linkend="storage-cds"/>.
+ This could induce a security risk as a guest could overwrite data
+ on a CD/DVD medium.
+ </para>
+ </sect3>
+
+ <sect3>
+ <title>USB passthrough</title>
+ <para>
+ Passing USB devices to the guest provides the guest full access
+ to these devices, see <xref linkend="settings-usb"/>. For instance,
+ in addition to reading and writing the content of the partitions
+ of an external USB disk the guest will be also able to read and
+ write the partition table and hardware data of that disk.
+ </para>
+ </sect3>
+
+ </sect2>
+
+ <sect2>
+ <title>Configuring and Using Authentication</title>
+
+ <para>The following components of VirtualBox can use passwords for
+ authentication:<itemizedlist>
+
+ <listitem>
+ <para>When using remote iSCSI storage and the storage server
+ requires authentication, an initiator secret can optionally be supplied
+ with the <computeroutput>VBoxManage storageattach</computeroutput>
+ command. As long as no settings password is provided (command line
+ option <screen>--settingspwfile</screen>, this secret is
+ stored <emphasis role="bold">unencrypted</emphasis> in the machine
+ configuration and is therefore potentially readable on the host.
+ See <xref
+ linkend="storage-iscsi" /> and <xref
+ linkend="vboxmanage-storageattach" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>When using the VirtualBox web service to control a VirtualBox
+ host remotely, connections to the web service are authenticated in
+ various ways. This is described in detail in the VirtualBox Software
+ Development Kit (SDK) reference; please see <xref
+ linkend="VirtualBoxAPI" />.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect2>
+
+ <!--
+ <sect2>
+ <title>Configuring and Using Access Control</title>
+ </sect2>
+
+ <sect2>
+ <title>Configuring and Using Security Audit</title>
+ </sect2>
+
+ <sect2>
+ <title>Congiguring and Using Other Security Features</title>
+ </sect2>
+ -->
+
+ <sect2>
+ <title>Potentially insecure operations</title>
+
+ <para>The following features of VirtualBox can present security
+ problems:<itemizedlist>
+ <listitem>
+ <para>Enabling 3D graphics via the Guest Additions exposes the host
+ to additional security risks; see <xref
+ linkend="guestadd-3d" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>When teleporting a machine, the data stream through which the
+ machine's memory contents are transferred from one host to another
+ is not encrypted. A third party with access to the network through
+ which the data is transferred could therefore intercept that
+ data. An SSH tunnel could be used to secure the connection between
+ the two hosts. But when considering teleporting a VM over an untrusted
+ network the first question to answer is how both VMs can securely
+ access the same virtual disk image(s) with a reasonable performance. </para>
+ </listitem>
+
+ <listitem>
+ <para>When using the VirtualBox web service to control a VirtualBox
+ host remotely, connections to the web service (through which the API
+ calls are transferred via SOAP XML) are not encrypted, but use plain
+ HTTP by default. This is a potential security risk! For details about
+ the web service, please see <xref linkend="VirtualBoxAPI" />.</para>
+ <para>The web services are not started by default. Please refer to
+ <xref linkend="vboxwebsrv-daemon"/> to find out how to start this
+ service and how to enable SSL/TLS support. It has to be started as
+ a regular user and only the VMs of that user can be controled. By
+ default, the service binds to localhost preventing any remote connection.</para>
+ </listitem>
+
+ <listitem>
+ <para>Traffic sent over a UDP Tunnel network attachment is not
+ encrypted. You can either encrypt it on the host network level (with
+ IPsec), or use encrypted protocols in the guest network (such as
+ SSH). The security properties are similar to bridged Ethernet.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect2>
+
+ <sect2>
+ <title>Encryption</title>
+
+ <para>The following components of VirtualBox use encryption to protect
+ sensitive data:<itemizedlist>
+ <listitem>
+ <para>When using the VirtualBox extension pack provided by Oracle
+ for VRDP remote desktop support, RDP data can optionally be
+ encrypted. See <xref linkend="vrde-crypt" /> for details. Only
+ the Enhanced RDP Security method (RDP5.2) with TLS protocol
+ provides a secure connection. Standard RDP Security (RDP4 and
+ RDP5.1) is vulnerable to a man-in-the-middle attack.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect2>
+ </sect1>
+
+ <!--
+ <sect1>
+ <title>Security Considerations for Developers</title>
+ </sect1>
+ -->
+
+</chapter>
diff --git a/doc/manual/en_US/user_Storage.xml b/doc/manual/en_US/user_Storage.xml
new file mode 100644
index 00000000..37a401e1
--- /dev/null
+++ b/doc/manual/en_US/user_Storage.xml
@@ -0,0 +1,911 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<chapter id="storage">
+ <title>Virtual storage</title>
+
+ <para>As the virtual machine will most probably expect to see a hard disk
+ built into its virtual computer, VirtualBox must be able to present "real"
+ storage to the guest as a virtual hard disk. There are presently three
+ methods in which to achieve this:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>Most commonly, VirtualBox will use large image files on a real
+ hard disk and present them to a guest as a virtual hard disk. This is
+ described in <xref linkend="vdidetails" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>Alternatively, if you have iSCSI storage servers, you can attach
+ such a server to VirtualBox as well; this is described in <xref
+ linkend="storage-iscsi" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>Finally, as an advanced feature, you can allow a virtual
+ machine to access one of your host disks directly; this advanced feature
+ is described in <xref linkend="rawdisk" />.</para>
+ </listitem>
+ </orderedlist>
+
+ <para>Each such virtual storage device (image file, iSCSI target or physical
+ hard disk) will need to be connected to the virtual hard disk controller
+ that VirtualBox presents to a virtual machine. This is explained in the next
+ section.</para>
+
+ <sect1 id="harddiskcontrollers">
+ <title>Hard disk controllers: IDE, SATA (AHCI), SCSI, SAS</title>
+
+ <para>In a real PC, hard disks and CD/DVD drives are connected to a device
+ called hard disk controller which drives hard disk operation and data
+ transfers. VirtualBox can emulate the four most common types of hard disk
+ controllers typically found in today's PCs: IDE, SATA (AHCI), SCSI and
+ SAS.<footnote>
+ <para>SATA support was added with VirtualBox 1.6; experimental SCSI
+ support was added with 2.1 and fully implemented with 2.2. Generally,
+ storage attachments were made much more flexible with VirtualBox 3.1;
+ see below. Support for the LSI Logic SAS controller was added with
+ VirtualBox 3.2.</para>
+ </footnote><itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">IDE (ATA)</emphasis> controllers are a
+ backwards compatible yet very advanced extension of the disk
+ controller in the IBM PC/AT (1984). Initially, this interface
+ worked only with hard disks, but was later extended to also support
+ CD-ROM drives and other types of removable media. In physical PCs,
+ this standard uses flat ribbon parallel cables with 40 or 80 wires.
+ Each such cable can connect two devices to a controller, which have
+ traditionally been called "master" and "slave". Typical PCs had
+ two connectors for such cables; as a result, support for up to four
+ IDE devices was most common.</para>
+
+ <para>In VirtualBox, each virtual machine may have one IDE
+ contoller enabled, which gives you up to four virtual storage
+ devices that you can attach to the machine. (By default, one of
+ these four -- the secondary master -- is preconfigured to be the
+ machine's virtual CD/DVD drive, but this can be changed.<footnote>
+ <para>The assignment of the machine's CD/DVD drive to the
+ secondary master was fixed before VirtualBox 3.1; it is now
+ changeable, and the drive can be at other slots of the IDE
+ controller, and there can be more than one such drive.</para>
+ </footnote>)</para>
+
+ <para>So even if your guest operating system has no support for SCSI
+ or SATA devices, it should always be able to see an IDE controller.
+ </para>
+
+ <para>You can also select which exact type of IDE controller
+ hardware VirtualBox should present to the virtual machine (PIIX3,
+ PIIX4 or ICH6). This makes no difference in terms of performance,
+ but if you import a virtual machine from another virtualization
+ product, the operating system in that machine may expect a
+ particular controller type and crash if it isn't found.</para>
+
+ <para>After you have created a new virtual machine with the "New
+ Virtual Machine" wizard of the graphical user interface, you will
+ typically see one IDE controller in the machine's "Storage" settings
+ where the virtual CD/DVD drive will be attached to one of the four
+ ports of this controller.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Serial ATA (SATA)</emphasis> is a newer
+ standard introduced in 2003. Compared to IDE, it supports both much
+ higher speeds and more devices per controller. Also, with
+ physical hardware, devices can be added and removed while the system
+ is running. The standard interface for SATA controllers is called
+ Advanced Host Controller Interface (<emphasis
+ role="bold">AHCI</emphasis>).</para>
+
+ <para>Like a real SATA controller, VirtualBox's virtual SATA
+ controller operates faster and also consumes fewer CPU resources than
+ the virtual IDE controller. Also, this allows you to connect up to
+ 30 virtual hard disks to one machine instead of just three, as with
+ the VirtualBox IDE controller (with the DVD drive already attached).</para>
+
+ <para>For this reason, starting with version 3.2 and depending on
+ the selected guest operating system, VirtualBox uses SATA as the
+ default for newly created virtual machines. One virtual SATA
+ controller is created by default, and the default disk that is
+ created with a new VM is attached to this controller.<warning>
+ <para>The entire SATA controller and the virtual disks attached
+ to it (including those in IDE compatibility mode) will not be
+ seen by operating systems that do not have device support for
+ AHCI. In particular, <emphasis role="bold">there is no support
+ for AHCI in Windows before Windows Vista</emphasis>, so Windows
+ XP (even SP3) will not see such disks unless you install
+ additional drivers. It is possible to switch from IDE to SATA
+ after installation by installing the SATA drivers and changing
+ the controller type in the VM settings dialog.<footnote>
+ <para>VirtualBox recommends the Intel Matrix Storage drivers
+ which can be downloaded from <ulink
+ url="http://downloadcenter.intel.com/Product_Filter.aspx?ProductID=2101">http://downloadcenter.intel.com/Product_Filter.aspx?ProductID=2101</ulink>.</para>
+ </footnote></para>
+ </warning></para>
+
+ <para>To add a SATA controller to a machine for which it has not
+ been enabled by default (either because it was created by an earlier
+ version of VirtualBox, or because SATA is not supported by default
+ by the selected guest operating system), go to the "Storage" page of
+ the machine's settings dialog, click on the "Add Controller" button
+ under the "Storage Tree" box and then select "Add SATA Controller".
+ After this, the additional controller will appear as a separate PCI
+ device in the virtual machine, and you can add virtual disks to
+ it.</para>
+
+ <para>To change the IDE compatibility mode settings for the SATA
+ controller, please see <xref
+ linkend="vboxmanage-storagectl" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">SCSI</emphasis> is another established
+ industry standard, standing for "Small Computer System Interface".
+ SCSI was standardized as early as 1986 as a generic interface for
+ data transfer between all kinds of devices, including storage
+ devices. Today SCSI is still used for connecting hard disks and tape
+ devices, but it has mostly been displaced in commodity hardware. It
+ is still in common use in high-performance workstations and
+ servers.</para>
+
+ <para>Primarily for compatibility with other virtualization
+ software, VirtualBox optionally supports LSI Logic and BusLogic SCSI
+ controllers, to each of which up to 15 virtual hard disks can be
+ attached.</para>
+
+ <para>To enable a SCSI controller, on the "Storage" page of a
+ virtual machine's settings dialog, click on the "Add Controller"
+ button under the "Storage Tree" box and then select "Add SCSI
+ Controller". After this, the additional controller will appear as a
+ separate PCI device in the virtual machine.<warning>
+ <para>As with the other controller types, a SCSI controller will
+ only be seen by operating systems with device support for it.
+ Windows 2003 and later ships with drivers for the LSI Logic
+ controller, while Windows NT 4.0 and Windows 2000 ships with
+ drivers for the BusLogic controller. Windows XP ships with
+ drivers for neither.</para>
+ </warning></para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Serial Attached SCSI (SAS)</emphasis> is
+ another bus standard which uses the SCSI command set. As opposed to
+ SCSI, however, with physical devices, serial cables are used instead
+ of parallel ones, which simplifies physical device connections. In
+ some ways, therefore, SAS is to SCSI what SATA is to IDE: it allows
+ for more reliable and faster connections.</para>
+
+ <para>To support high-end guests which require SAS controllers,
+ VirtualBox emulates a LSI Logic SAS controller, which can be enabled
+ much the same way as a SCSI controller. At this time, up to eight
+ devices can be connected to the SAS controller.</para>
+
+ <warning>
+ <para>As with SATA, the SAS controller will only be seen by
+ operating systems with device support for it. In particular,
+ <emphasis role="bold">there is no support for SAS in Windows
+ before Windows Vista</emphasis>, so Windows XP (even SP3) will not
+ see such disks unless you install additional drivers.</para>
+ </warning>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>In summary, VirtualBox gives you the following categories of virtual
+ storage slots:<orderedlist>
+ <listitem>
+ <para>four slots attached to the traditional IDE controller, which
+ are always present (one of which typically is a virtual CD/DVD
+ drive);</para>
+ </listitem>
+
+ <listitem>
+ <para>30 slots attached to the SATA controller, if enabled and
+ supported by the guest operating system;</para>
+ </listitem>
+
+ <listitem>
+ <para>15 slots attached to the SCSI controller, if enabled and
+ supported by the guest operating system;</para>
+ </listitem>
+
+ <listitem>
+ <para>eight slots attached to the SAS controller, if enabled and
+ supported by the guest operating system.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>Given this large choice of storage controllers, you may ask yourself
+ which one to choose. In general, you should avoid IDE unless it is the
+ only controller supported by your guest. Whether you use SATA, SCSI or SAS
+ does not make any real difference. The variety of controllers is only
+ supplied for VirtualBox for compatibility with existing hardware and other
+ hypervisors.</para>
+ </sect1>
+
+ <sect1 id="vdidetails">
+ <title>Disk image files (VDI, VMDK, VHD, HDD)</title>
+
+ <para>Disk image files reside on the host system and are seen by the guest
+ systems as hard disks of a certain geometry. When a guest operating system
+ reads from or writes to a hard disk, VirtualBox redirects the request to
+ the image file.</para>
+
+ <para>Like a physical disk, a virtual disk has a size (capacity), which
+ must be specified when the image file is created. As opposed to a physical
+ disk however, VirtualBox allows you to expand an image file after
+ creation, even if it has data already; see <xref
+ linkend="vboxmanage-modifyvdi" /> for details.<footnote>
+ <para>Image resizing was added with VirtualBox 4.0.</para>
+ </footnote></para>
+
+ <para>VirtualBox supports four variants of disk image files:<itemizedlist>
+ <listitem>
+ <para>Normally, VirtualBox uses its own container format for guest
+ hard disks -- Virtual Disk Image (VDI) files. In particular, this
+ format will be used when you create a new virtual machine with a new
+ disk.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox also fully supports the popular and open VMDK
+ container format that is used by many other virtualization products,
+ in particular, by VMware.<footnote>
+ <para>Initial support for VMDK was added with VirtualBox 1.4;
+ since version 2.1, VirtualBox supports VMDK fully, meaning that
+ you can create snapshots and use all the other advanced features
+ described above for VDI images with VMDK also.</para>
+ </footnote></para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox also fully supports the VHD format used by
+ Microsoft.</para>
+ </listitem>
+
+ <listitem>
+ <para>Image files of Parallels version 2 (HDD format) are also
+ supported.<footnote>
+ <para>Support was added with VirtualBox 3.1.</para>
+ </footnote> For lack of documentation of the format, newer formats
+ (3 and 4) are not supported. You can however convert such image
+ files to version 2 format using tools provided by Parallels.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>Irrespective of the disk capacity and format, as briefly mentioned
+ in <xref linkend="gui-createvm" />, there are two options of how to create
+ a disk image: fixed-size or dynamically allocated.</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>If you create a <emphasis role="bold">fixed-size
+ image</emphasis>, an image file will be created on your host system
+ which has roughly the same size as the virtual disk's capacity. So,
+ for a 10G disk, you will have a 10G file. Note that the creation of a
+ fixed-size image can take a long time depending on the size of the
+ image and the write performance of your hard disk.</para>
+ </listitem>
+
+ <listitem>
+ <para>For more flexible storage management, use a <emphasis
+ role="bold">dynamically allocated image</emphasis>. This will
+ initially be very small and not occupy any space for unused virtual
+ disk sectors, but will grow every time a disk sector is written to for
+ the first time, until the drive reaches the maximum capacity chosen
+ when the drive was created. While this format takes less space
+ initially, the fact that VirtualBox needs to expand the image file
+ consumes additional computing resources, so until the disk file size has
+ stabilized, write operations may be slower than with fixed size disks.
+ However, after a time the rate of growth will slow and the average penalty
+ for write operations will be negligible.</para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1 id="vdis">
+ <title>The Virtual Media Manager</title>
+
+ <para>VirtualBox keeps track of all the hard disk, CD/DVD-ROM and floppy
+ disk images which are in use by virtual machines. These are often referred
+ to as "known media" and come from two sources:<itemizedlist>
+ <listitem>
+ <para>all media currently attached to virtual machines;</para>
+ </listitem>
+
+ <listitem>
+ <para>"registered" media for compatibility with VirtualBox versions
+ older than version 4.0. For details about how media registration has
+ changed with version 4.0, please refer to <xref
+ linkend="vboxconfigdata" />.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>The known media can be viewed and changed in the <emphasis
+ role="bold">Virtual Media Manager</emphasis>, which you can access from
+ the "File" menu in the VirtualBox main window:</para>
+
+ <para><mediaobject>
+ <imageobject>
+ <imagedata align="center" fileref="images/virtual-disk-manager.png"
+ width="12cm" />
+ </imageobject>
+ </mediaobject>The known media are conveniently grouped in three tabs for
+ the three possible formats. These formats are:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Hard disk images, either in VirtualBox's own Virtual Disk Image
+ (VDI) format or in the third-party formats listed in the previous
+ chapter;</para>
+ </listitem>
+
+ <listitem>
+ <para>CD/DVD images in standard ISO format;</para>
+ </listitem>
+
+ <listitem>
+ <para>floppy images in standard RAW format.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>As you can see in the screenshot above, for each image, the Virtual
+ Media Manager shows you the full path of the image file and other
+ information, such as the virtual machine the image is currently attached
+ to, if any.</para>
+
+ <para>The Virtual Media Manager allows you to</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">remove</emphasis> an image from the
+ registry (and optionally delete the image file when doing so);</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">"release"</emphasis> an image, that is,
+ detach it from a virtual machine if it is currently attached to one as
+ a virtual hard disk.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Starting with version 4.0, to <emphasis role="bold">create new disk
+ images,</emphasis> please use the "Storage" page in a virtual machine's
+ settings dialog because disk images are now by default stored in each
+ machine's own folder.</para>
+
+ <para>Hard disk image files can be copied onto other host systems and
+ imported into virtual machines there, although certain guest systems
+ (notably Windows 2000 and XP) will require that the new virtual machine be
+ set up in a similar way to the old one.<note>
+ <para>Do not simply make copies of virtual disk images. If you import
+ such a second copy into a virtual machine, VirtualBox will complain
+ with an error, since VirtualBox assigns a unique identifier (UUID) to
+ each disk image to make sure it is only used once. See <xref
+ linkend="cloningvdis" /> for instructions on this matter. Also, if you
+ want to copy a virtual machine to another system, VirtualBox has an
+ import/export facility that might be better suited for your needs; see
+ <xref linkend="ovf" />.</para>
+ </note></para>
+ </sect1>
+
+ <sect1 id="hdimagewrites">
+ <title>Special image write modes</title>
+
+ <para>For each virtual disk image supported by VirtualBox, you can
+ determine separately how it should be affected by write operations from a
+ virtual machine and snapshot operations. This applies to all of the
+ aforementioned image formats (VDI, VMDK, VHD or HDD) and irrespective of
+ whether an image is fixed-size or dynamically allocated.</para>
+
+ <para>By default, images are in "normal" mode. To mark an existing image
+ with one of the non-standard modes listed below, use
+ <computeroutput>VBoxManage modifyhd</computeroutput>; see <xref
+ linkend="vboxmanage-modifyvdi" />. Alternatively, use VBoxManage to attach
+ the image to a VM and use the <computeroutput>--mtype</computeroutput>
+ argument; see <xref linkend="vboxmanage-storageattach" />.</para>
+
+ <orderedlist>
+ <listitem>
+ <para>With <emphasis role="bold">normal images</emphasis> (the default
+ setting), there are no restrictions on how guests can read from and
+ write to the disk.</para>
+
+ <para>When you take a snapshot of your virtual machine as described in
+ <xref linkend="snapshots" />, the state of such a "normal hard disk"
+ will be recorded together with the snapshot, and when reverting to the
+ snapshot, its state will be fully reset.</para>
+
+ <para>(Technically, strictly speaking, the image file itself is not
+ "reset". Instead, when a snapshot is taken, VirtualBox "freezes" the
+ image file and no longer writes to it. For the write operations from
+ the VM, a second, "differencing" image file is created which receives
+ only the changes to the original image; see the next section for
+ details.)</para>
+
+ <para>While you can attach the same "normal" image to more than one
+ virtual machine, only one of these virtual machines attached to the
+ same image file can be executed simultaneously, as otherwise there
+ would be conflicts if several machines write to the same image
+ file.<footnote>
+ <para>This restriction is more lenient now than it was before
+ VirtualBox 2.2. Previously, each "normal" disk image could only be
+ <emphasis>attached</emphasis> to one single machine. Now it can be
+ attached to more than one machine so long as only one of these
+ machines is running.</para>
+ </footnote></para>
+ </listitem>
+
+ <listitem>
+ <para>By contrast, <emphasis role="bold">write-through hard
+ disks</emphasis> are completely unaffected by snapshots: their state
+ is <emphasis>not</emphasis> saved when a snapshot is taken, and not
+ restored when a snapshot is restored.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Shareable hard disks</emphasis> are a
+ variant of write-through hard disks. In principle they behave exactly
+ the same, i.e. their state is <emphasis>not</emphasis> saved when a
+ snapshot is taken, and not restored when a snapshot is restored. The
+ difference only shows if you attach such disks to several VMs.
+ Shareable disks may be attached to several VMs which may run
+ concurrently. This makes them suitable for use by cluster filesystems
+ between VMs and similar applications which are explicitly prepared to
+ access a disk concurrently. Only fixed size images can be used in this
+ way, and dynamically allocated images are rejected.<warning>
+ <para>This is an expert feature, and misuse can lead to data loss
+ -- regular filesystems are not prepared to handle simultaneous
+ changes by several parties.</para>
+ </warning></para>
+ </listitem>
+
+ <listitem>
+ <para>Next, <emphasis role="bold">immutable images</emphasis> only
+ remember write accesses temporarily while the virtual machine is
+ running; all changes are lost when the virtual machine is powered on
+ the next time. As a result, as opposed to "normal" images, the same
+ immutable image can be used with several virtual machines without
+ restrictions.</para>
+
+ <para><emphasis>Creating</emphasis> an immutable image makes little
+ sense since it would be initially empty and lose its contents with
+ every machine restart (unless you really want to have a disk that is
+ always unformatted when the machine starts up). As a result, normally,
+ you would first create a "normal" image and then, when you deem its
+ contents useful, later mark it immutable.</para>
+
+ <para>If you take a snapshot of a machine with immutable images, then
+ on every machine power-up, those images are reset to the state of the
+ last (current) snapshot (instead of the state of the original
+ immutable image).</para>
+
+ <note>
+ <para>As a special exception, immutable images are
+ <emphasis>not</emphasis> reset if they are attached to a machine
+ whose last snapshot was taken while the machine was running (a
+ so-called "online" snapshot). As a result, if the machine's current
+ snapshot is such an "online" snapshot, its immutable images behave
+ exactly like the "normal" images described previously. To re-enable
+ the automatic resetting of such images, delete the current snapshot
+ of the machine.</para>
+ </note>
+
+ <para>Again, technically, VirtualBox never writes to an immutable
+ image directly at all. All write operations from the machine will be
+ directed to a differencing image; the next time the VM is powered on,
+ the differencing image is reset so that every time the VM starts, its
+ immutable images have exactly the same content.<footnote>
+ <para>This behavior also changed with VirtualBox 2.2. Previously,
+ the differencing images were discarded when the machine session
+ <emphasis>ended</emphasis>; now they are discarded every time the
+ machine is powered on.</para>
+ </footnote> The differencing image is only reset when the machine is
+ powered on from within VirtualBox, not when you reboot by requesting a
+ reboot from within the machine. This is also why immutable images
+ behave as described above when snapshots are also present, which use
+ differencing images as well.</para>
+
+ <para>If the automatic discarding of the differencing image on VM
+ startup does not fit your needs, you can turn it off using the
+ <computeroutput>autoreset</computeroutput> parameter of
+ <computeroutput>VBoxManage modifyhd</computeroutput>; see <xref
+ linkend="vboxmanage-modifyvdi" /> for details.</para>
+ </listitem>
+
+ <listitem>
+ <para>An image in <emphasis role="bold">multiattach mode</emphasis>
+ can be attached to more than one virtual machine at the same time,
+ even if these machines are running simultaneously. For each virtual
+ machine to which such an image is attached, a differencing image is
+ created. As a result, data that is written to such a virtual disk by
+ one machine is not seen by the other machines to which the image is
+ attached; each machine creates its own write history of the
+ multiattach image.</para>
+
+ <para>Technically, a "multiattach" image behaves identically to an
+ "immutable" image except the differencing image is not reset every
+ time the machine starts.</para>
+ </listitem>
+
+ <listitem>
+ <para>Finally, the <emphasis role="bold">read-only image</emphasis> is
+ used automatically for CD/DVD images, since CDs/DVDs can never be
+ written to.</para>
+ </listitem>
+ </orderedlist>
+
+ <para>To illustrate the differences between the various types with respect
+ to snapshots: Assume you have installed your guest operating system in
+ your VM, and you have taken a snapshot. Imagine you have accidentally
+ infected your VM with a virus and would like to go back to the snapshot.
+ With a normal hard disk image, you simply restore the snapshot, and the
+ earlier state of your hard disk image will be restored as well (and your
+ virus infection will be undone). With an immutable hard disk, all it takes
+ is to shut down and power on your VM, and the virus infection will be
+ discarded. With a write-through image however, you cannot easily undo the
+ virus infection by means of virtualization, but will have to disinfect
+ your virtual machine like a real computer.</para>
+
+ <para>Still, you might find write-through images useful if you want to
+ preserve critical data irrespective of snapshots, and since you can attach
+ more than one image to a VM, you may want to have one immutable for the
+ operating system and one write-through for your data files.</para>
+ </sect1>
+
+ <sect1 id="diffimages">
+ <title>Differencing images</title>
+
+ <para>The previous section hinted at differencing images and how they are
+ used with snapshots, immutable images and multiple disk attachments. For
+ the inquisitive VirtualBox user, this section describes in more detail how
+ they work.</para>
+
+ <para>A differencing image is a special disk image that only holds the
+ differences to another image. A differencing image by itself is useless,
+ it must always refer to another image. The differencing image is then
+ typically referred to as a "child", which holds the differences to its
+ "parent".</para>
+
+ <para>When a differencing image is active, it receives all write
+ operations from the virtual machine instead of its parent. The
+ differencing image only contains the sectors of the virtual hard disk that
+ have changed since the differencing image was created. When the machine
+ reads a sector from such a virtual hard disk, it looks into the
+ differencing image first. If the sector is present, it is returned from
+ there; if not, VirtualBox looks into the parent. In other words, the
+ parent becomes "read-only"; it is never written to again, but it is read
+ from if a sector has not changed.</para>
+
+ <para>Differencing images can be chained. If another differencing image is
+ created for a virtual disk that already has a differencing image, then it
+ becomes a "grandchild" of the original parent. The first differencing
+ image then becomes read-only as well, and write operations only go to the
+ second-level differencing image. When reading from the virtual disk,
+ VirtualBox needs to look into the second differencing image first, then
+ into the first if the sector was not found, and then into the original
+ image.</para>
+
+ <para>There can be an unlimited number of differencing images, and each
+ image can have more than one child. As a result, the differencing images
+ can form a complex tree with parents, "siblings" and children, depending
+ on how complex your machine configuration is. Write operations always go
+ to the one "active" differencing image that is attached to the machine,
+ and for read operations, VirtualBox may need to look up all the parents in
+ the chain until the sector in question is found. You can look at such a
+ tree in the Virtual Media Manager:<mediaobject>
+ <imageobject>
+ <imagedata align="center" fileref="images/virtual-disk-manager2.png"
+ width="12cm" />
+ </imageobject>
+ </mediaobject></para>
+
+ <para>In all of these situations, from the point of view of the virtual
+ machine, the virtual hard disk behaves like any other disk. While the
+ virtual machine is running, there is a slight run-time I/O overhead
+ because VirtualBox might need to look up sectors several times. This is
+ not noticeable however since the tables with sector information are always
+ kept in memory and can be looked up quickly.</para>
+
+ <para>Differencing images are used in the following
+ situations:<orderedlist>
+ <listitem>
+ <para><emphasis role="bold">Snapshots.</emphasis> When you create a
+ snapshot, as explained in the previous section, VirtualBox "freezes"
+ the images attached to the virtual machine and creates differencing
+ images for each of them (to be precise: one for each image that is
+ not in "write-through" mode). From the point of view of the virtual
+ machine, the virtual disks continue to operate before, but all write
+ operations go into the differencing images. Each time you create
+ another snapshot, for each hard disk attachment, another
+ differencing image is created and attached, forming a chain or
+ tree.</para>
+
+ <para>In the above screenshot, you see that the original disk image
+ is now attached to a snapshot, representing the state of the disk
+ when the snapshot was taken.</para>
+
+ <para>If you now <emphasis role="bold">restore</emphasis> a snapshot
+ -- that is, if you want to go back to the exact machine state that
+ was stored in the snapshot --, the following happens:<orderedlist>
+ <listitem>
+ <para>VirtualBox copies the virtual machine settings that were
+ copied into the snapshot back to the virtual machine. As a
+ result, if you have made changes to the machine configuration
+ since taking the snapshot, they are undone.</para>
+ </listitem>
+
+ <listitem>
+ <para>If the snapshot was taken while the machine was running,
+ it contains a saved machine state, and that state is restored
+ as well; after restoring the snapshot, the machine will then
+ be in "Saved" state and resume execution from there when it is
+ next started. Otherwise the machine will be in "Powered Off"
+ state and do a full boot.</para>
+ </listitem>
+
+ <listitem>
+ <para>For each disk image attached to the machine, the
+ differencing image holding all the write operations since the
+ current snapshot was taken is thrown away, and the original
+ parent image is made active again. (If you restored the "root"
+ snapshot, then this will be the root disk image for each
+ attachment; otherwise, some other differencing image descended
+ from it.) This effectively restores the old machine
+ state.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>If you later <emphasis role="bold">delete</emphasis> a
+ snapshot in order to free disk space, for each disk attachment, one
+ of the differencing images becomes obsolete. In this case, the
+ differencing image of the disk attachment cannot simply be deleted.
+ Instead, VirtualBox needs to look at each sector of the differencing
+ image and needs to copy it back into its parent; this is called
+ "merging" images and can be a potentially lengthy process, depending
+ on how large the differencing image is. It can also temporarily need
+ a considerable amount of extra disk space, before the differencing
+ image obsoleted by the merge operation is deleted.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Immutable images.</emphasis> When an
+ image is switched to "immutable" mode, a differencing image is
+ created as well. As with snapshots, the parent image then becomes
+ read-only, and the differencing image receives all the write
+ operations. Every time the virtual machine is started, all the
+ immutable images which are attached to it have their respective
+ differencing image thrown away, effectively resetting the virtual
+ machine's virtual disk with every restart.</para>
+ </listitem>
+ </orderedlist></para>
+ </sect1>
+
+ <sect1 id="cloningvdis">
+ <title>Cloning disk images</title>
+
+ <para>You can duplicate hard disk image files on the same host to quickly
+ produce a second virtual machine with the same operating system setup.
+ However, you should <emphasis>only</emphasis> make copies of virtual disk
+ images using the utility supplied with VirtualBox; see <xref
+ linkend="vboxmanage-clonevdi" />. This is because VirtualBox assigns a
+ unique identity number (UUID) to each disk image, which is also stored
+ inside the image, and VirtualBox will refuse to work with two images that
+ use the same number. If you do accidentally try to reimport a disk image
+ which you copied normally, you can make a second copy using VirtualBox's
+ utility and import that instead.</para>
+
+ <para>Note that newer Linux distributions identify the boot hard disk from
+ the ID of the drive. The ID VirtualBox reports for a drive is determined
+ from the UUID of the virtual disk image. So if you clone a disk image and
+ try to boot the copied image the guest might not be able to determine its
+ own boot disk as the UUID changed. In this case you have to adapt the disk
+ ID in your boot loader script (for example
+ <computeroutput>/boot/grub/menu.lst</computeroutput>). The disk ID looks
+ like this:<screen>scsi-SATA_VBOX_HARDDISK_VB5cfdb1e2-c251e503</screen></para>
+
+ <para>The ID for the copied image can be determined with <screen>hdparm -i /dev/sda</screen></para>
+ </sect1>
+
+ <sect1 id="iocaching">
+ <title>Host I/O caching</title>
+
+ <para>Starting with version 3.2, VirtualBox can optionally disable the I/O
+ caching that the host operating system would otherwise perform on disk
+ image files.</para>
+
+ <para>Traditionally, VirtualBox has opened disk image files as normal
+ files, which results in them being cached by the host operating system
+ like any other file. The main advantage of this is speed: when the guest
+ OS writes to disk and the host OS cache uses delayed writing, the write
+ operation can be reported as completed to the guest OS quickly while the
+ host OS can perform the operation asynchronously. Also, when you start a
+ VM a second time and have enough memory available for the OS to use for
+ caching, large parts of the virtual disk may be in system memory, and the
+ VM can access the data much faster.</para>
+
+ <para>Note that this applies only to image files; buffering never occurred
+ for virtual disks residing on remote iSCSI storage, which is the more common
+ scenario in enterprise-class setups (see <xref
+ linkend="storage-iscsi" />).</para>
+
+ <para>While buffering is a useful default setting for virtualizating a few
+ machines on a desktop computer, there are some disadvantages to this
+ approach:<orderedlist>
+ <listitem>
+ <para>Delayed writing through the host OS cache is less secure. When
+ the guest OS writes data, it considers the data written even though
+ it has not yet arrived on a physical disk. If for some reason the
+ write does not happen (power failure, host crash), the likelihood of
+ data loss increases.</para>
+ </listitem>
+
+ <listitem>
+ <para>Disk image files tend to be very large. Caching them can
+ therefore quickly use up the entire host OS cache. Depending on the
+ efficiency of the host OS caching, this may slow down the host
+ immensely, especially if several VMs run at the same time. For
+ example, on Linux hosts, host caching may result in Linux delaying
+ all writes until the host cache is nearly full and then writing out
+ all these changes at once, possibly stalling VM execution for
+ minutes. This can result in I/O errors in the guest as I/O requests
+ time out there.</para>
+ </listitem>
+
+ <listitem>
+ <para>Physical memory is often wasted as guest operating systems
+ typically have their own I/O caches, which may result in the data
+ being cached twice (in both the guest and the host caches) for
+ little effect.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>If you decide to disable host I/O caching for the above reasons,
+ VirtualBox uses its own small cache to buffer writes, but no read caching
+ since this is typically already performed by the guest OS. In addition,
+ VirtualBox fully supports asynchronous I/O for its virtual SATA, SCSI and
+ SAS controllers through multiple I/O threads.</para>
+
+ <para>Since asynchronous I/O is not supported by IDE controllers, for
+ performance reasons, you may want to leave host caching enabled for your
+ VM's virtual IDE controllers.</para>
+
+ <para>For this reason, VirtualBox allows you to configure whether the host
+ I/O cache is used for each I/O controller separately. Either uncheck the
+ "Use host I/O cache" box in the "Storage" settings for a given virtual
+ storage controller, or use the following VBoxManage command to disable the
+ host I/O cache for a virtual storage controller:<screen>VBoxManage storagectl &lt;vm&gt; --name &lt;controllername&gt; --hostiocache off</screen></para>
+
+ <para>See <xref linkend="vboxmanage-storagectl" /> for details.</para>
+
+ <para>For the above reasons also, VirtualBox now uses SATA controllers by
+ default for new virtual machines.</para>
+ </sect1>
+
+ <sect1 id="storage-bandwidth-limit">
+ <title>Limiting bandwidth for disk images</title>
+
+ <para>Starting with version 4.0, VirtualBox allows for limiting the
+ maximum bandwidth used for asynchronous I/O. Additionally it supports
+ sharing limits through bandwidth groups for several images. It is possible
+ to have more than one such limit.</para>
+
+ <para>Limits are configured through
+ <computeroutput>VBoxManage</computeroutput>. The example below creates a
+ bandwidth group named "Limit", sets the limit to 20 MB/s and assigns the
+ group to the attached disks of the VM:<screen>VBoxManage bandwidthctl "VM name" add Limit --type disk --limit 20M
+VBoxManage storageattach "VM name" --controller "SATA" --port 0 --device 0 --type hdd
+ --medium disk1.vdi --bandwidthgroup Limit
+VBoxManage storageattach "VM name" --controller "SATA" --port 1 --device 0 --type hdd
+ --medium disk2.vdi --bandwidthgroup Limit</screen></para>
+
+ <para>All disks in a group share the bandwidth limit, meaning that in the
+ example above the bandwidth of both images combined can never exceed 20
+ MB/s. However, if one disk doesn't require bandwidth the other can use the
+ remaining bandwidth of its group.</para>
+
+ <para>The limits for each group can be changed while the VM is running,
+ with changes being picked up immediately. The example below changes the
+ limit for the group created in the example above to 10 MB/s:<screen>VBoxManage bandwidthctl "VM name" set Limit --limit 10M</screen></para>
+ </sect1>
+
+ <sect1 id="storage-cds">
+ <title>CD/DVD support</title>
+
+ <para>The virtual CD/DVD drive(s) by default support only reading. The
+ medium configuration is changeable at runtime. You can select between
+ three options to provide the medium data:<itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">Host Drive</emphasis> defines that the
+ guest can read from the medium in the host drive.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Image file</emphasis> (typically an ISO
+ file) gives the guest read-only access to the data in the
+ image.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Empty</emphasis> stands for a drive
+ without an inserted medium.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>Changing between the above, or changing a medium in the host drive
+ that is accessed by a machine, or changing an image file will signal a
+ medium change to the guest operating system, which can then react to the
+ change (e.g. by starting an installation program).</para>
+
+ <para>Medium changes can be prevented by the guest, and VirtualBox
+ reflects that by locking the host drive if appropriate. You can force a
+ medium removal in such situations via the VirtualBox GUI or the VBoxManage
+ command line tool. Effectively this is the equivalent of the emergency
+ eject which many CD/DVD drives provide, with all associated side effects:
+ the guest OS can issue error messages, just like on real hardware, and
+ guest applications may misbehave. Use this with caution.<note>
+ <para>The identification string of the drive provided to the guest
+ (which, in the guest, would be displayed by configuration tools such
+ as the Windows Device Manager) is always "VBOX CD-ROM", irrespective
+ of the current configuration of the virtual drive. This is to prevent
+ hardware detection from being triggered in the guest operating system
+ every time the configuration is changed.</para>
+ </note></para>
+
+ <para>The standard CD/DVD emulation allows for reading standard data CD
+ and DVD formats only. As an experimental feature, for additional
+ capabilities, it is possible to give the guest direct access to the CD/DVD
+ host drive by enabling "passthrough" mode. Depending on the host hardware,
+ this may enable three things to work, potentially:<itemizedlist>
+ <listitem>
+ <para>CD/DVD writing from within the guest, if the host DVD drive is
+ a CD/DVD writer;</para>
+ </listitem>
+
+ <listitem>
+ <para>playing audio CDs;</para>
+ </listitem>
+
+ <listitem>
+ <para>playing encrypted DVDs.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>There is a "Passthrough" checkbox in the GUI dialog for configuring
+ the media attached to a storage controller, or you can use the
+ <computeroutput>--passthrough</computeroutput> option with
+ <computeroutput>VBoxManage storageattach</computeroutput>; see <xref
+ linkend="vboxmanage-storageattach" /> for details.</para>
+
+ <para>Even if pass-through is enabled, unsafe commands, such as updating
+ the drive firmware, will be blocked. Video CD formats are never supported,
+ not even in passthrough mode, and cannot be played from a virtual
+ machine.</para>
+
+ <para>On Solaris hosts, pass-through requires running VirtualBox with real
+ root permissions due to security measures enforced by the host.</para>
+ </sect1>
+
+ <sect1>
+ <title id="storage-iscsi">iSCSI servers</title>
+
+ <para>iSCSI stands for "Internet SCSI" and is a standard that allows for
+ using the SCSI protocol over Internet (TCP/IP) connections. Especially
+ with the advent of Gigabit Ethernet, it has become affordable to attach
+ iSCSI storage servers simply as remote hard disks to a computer network.
+ In iSCSI terminology, the server providing storage resources is called an
+ "iSCSI target", while the client connecting to the server and accessing
+ its resources is called "iSCSI initiator".</para>
+
+ <para>VirtualBox can transparently present iSCSI remote storage to a
+ virtual machine as a virtual hard disk. The guest operating system will
+ not see any difference between a virtual disk image (VDI file) and an
+ iSCSI target. To achieve this, VirtualBox has an integrated iSCSI
+ initiator.</para>
+
+ <para>VirtualBox's iSCSI support has been developed according to the iSCSI
+ standard and should work with all standard-conforming iSCSI targets. To
+ use an iSCSI target with VirtualBox, you must use the command line; see
+ <xref linkend="vboxmanage-storageattach" />.</para>
+ </sect1>
+</chapter>
diff --git a/doc/manual/en_US/user_Technical.xml b/doc/manual/en_US/user_Technical.xml
new file mode 100644
index 00000000..86de7706
--- /dev/null
+++ b/doc/manual/en_US/user_Technical.xml
@@ -0,0 +1,893 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<chapter id="TechnicalBackground">
+ <title>Technical background</title>
+
+ <para>The contents of this chapter are not required to use VirtualBox
+ successfully. The following is provided as additional information for
+ readers who are more familiar with computer architecture and technology and
+ wish to find out more about how VirtualBox works "under the hood".</para>
+
+ <sect1 id="vboxconfigdata">
+ <title>Where VirtualBox stores its files</title>
+
+ <para>In VirtualBox, a virtual machine and its settings are described in a
+ virtual machine settings file in XML format. In addition, most virtual
+ machine have one or more virtual hard disks, which are typically
+ represented by disk images (e.g. in VDI format). Where all these files are
+ stored depends on which version of VirtualBox created the machine.</para>
+
+ <sect2>
+ <title>Machines created by VirtualBox version 4.0 or later</title>
+
+ <para>Starting with version 4.0, by default, each virtual machine has
+ one directory on your host computer where all the files of that machine
+ are stored -- the XML settings file (with a
+ <computeroutput>.vbox</computeroutput> file extension) and its disk
+ images.</para>
+
+ <para>By default, this "machine folder" is placed in a common folder
+ called "VirtualBox VMs", which VirtualBox creates in the current system
+ user's home directory. The location of this home directory depends on
+ the conventions of the host operating system:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>On Windows, this is
+ <computeroutput>%HOMEDRIVE%%HOMEPATH%</computeroutput>; typically
+ something like <computeroutput>C:\Documents and
+ Settings\Username\</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para>On Mac OS X, this is
+ <computeroutput>/Users/username</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para>On Linux and Solaris, this is
+ <computeroutput>/home/username</computeroutput>.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>For simplicity, we will abbreviate this as
+ <computeroutput>$HOME</computeroutput> below. Using that convention, the
+ common folder for all virtual machines is
+ <computeroutput>$HOME/VirtualBox VMs</computeroutput>.</para>
+
+ <para>As an example, when you create a virtual machine called "Example
+ VM", you will find that VirtualBox creates<orderedlist>
+ <listitem>
+ <para>the folder <computeroutput>$HOME/VirtualBox VMs/Example
+ VM/</computeroutput> and, in that folder,</para>
+ </listitem>
+
+ <listitem>
+ <para>the settings file <computeroutput>Example
+ VM.vbox</computeroutput> and</para>
+ </listitem>
+
+ <listitem>
+ <para>the virtual disk image <computeroutput>Example
+ VM.vdi</computeroutput>.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>This is the default layout if you use the "Create new virtual
+ machine" wizard as described in <xref linkend="gui-createvm" />. Once
+ you start working with the VM, additional files will show up: you will
+ find log files in a subfolder called
+ <computeroutput>Logs</computeroutput>, and once you have taken
+ snapshots, they will appear in a
+ <computeroutput>Snapshots</computeroutput> subfolder. For each VM, you
+ can change the location of its snapsnots folder in the VM
+ settings.</para>
+
+ <para>You can change the default machine folder by selecting
+ "Preferences" from the "File" menu in the VirtualBox main window. Then,
+ in the window that pops up, click on the "General" tab. Alternatively,
+ use <computeroutput>VBoxManage setproperty
+ machinefolder</computeroutput>; see <xref
+ linkend="vboxmanage-setproperty" />.</para>
+ </sect2>
+
+ <sect2>
+ <title>Machines created by VirtualBox versions before 4.0</title>
+
+ <para>If you have upgraded to VirtualBox 4.0 from an earlier version of
+ VirtualBox, you probably have settings files and disks in the earlier
+ file system layout.</para>
+
+ <para>Before version 4.0, VirtualBox separated the machine settings
+ files from virtual disk images. The machine settings files had an
+ <computeroutput>.xml</computeroutput> file extension and resided in a
+ folder called "Machines" under the global VirtualBox configuration
+ directory (see the next section). So, for example, on Linux, this was
+ the hidden <computeroutput>$HOME/.VirtualBox/Machines</computeroutput>
+ directory. The default hard disks folder was called "HardDisks" and
+ resided in the <computeroutput>.VirtualBox</computeroutput> folder as
+ well. Both locations could be changed by the user in the global
+ preferences. (The concept of a "default hard disk folder" has been
+ abandoned with VirtualBox 4.0, since disk images now reside in each
+ machine's folder by default.)</para>
+
+ <para>The old layout had several severe disadvantages.<orderedlist>
+ <listitem>
+ <para>It was very difficult to move a virtual machine from one
+ host to another because the files involved did not reside in the
+ same folder. In addition, the virtual media of all machines were
+ registered with a global registry in the central VirtualBox
+ settings file
+ (<computeroutput>$HOME/.VirtualBox/VirtualBox.xml</computeroutput>).</para>
+
+ <para>To move a machine to another host, it was therefore not
+ enough to move the XML settings file and the disk images (which
+ were in different locations), but the hard disk entries from the
+ global media registry XML had to be meticulously copied as well,
+ which was close to impossible if the machine had snapshots and
+ therefore differencing images.</para>
+ </listitem>
+
+ <listitem>
+ <para>Storing virtual disk images, which can grow very large,
+ under the hidden <computeroutput>.VirtualBox</computeroutput>
+ directory (at least on Linux and Solaris hosts) made many users
+ wonder where their disk space had gone.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>Whereas new VMs created with VirtualBox 4.0 or later will conform
+ to the new layout, for maximum compatibility, old VMs are
+ <emphasis>not</emphasis> converted to the new layout. Otherwise machine
+ settings would be irrevocably broken if a user downgraded from 4.0 back
+ to an older version of VirtualBox.</para>
+ </sect2>
+
+ <sect2>
+ <title>Global configuration data</title>
+
+ <para>In addition to the files of the virtual machines, VirtualBox
+ maintains global configuration data. On Windows, Linux and Solaris, this
+ is in <computeroutput>$HOME/.VirtualBox</computeroutput> (which makes it
+ hidden on Linux and Solaris), whereas on a Mac this resides in
+ <computeroutput>$HOME/Library/VirtualBox</computeroutput>.</para>
+
+ <para>VirtualBox creates this configuration directory automatically if
+ necessary. Optionally, you can supply an alternate configuration
+ directory by setting the
+ <computeroutput><literal>VBOX_USER_HOME</literal></computeroutput>
+ environment variable. (Since the global
+ <computeroutput>VirtualBox.xml</computeroutput> settings file points to
+ all other configuration files, this allows for switching between several
+ VirtualBox configurations entirely.)</para>
+
+ <para>Most importantly, in this directory, VirtualBox stores its global
+ settings file, another XML file called
+ <computeroutput>VirtualBox.xml</computeroutput>. This includes global
+ configuration options and the list of registered virtual machines with
+ pointers to their XML settings files. (Neither the location of this file
+ nor its directory has changed with VirtualBox 4.0.)</para>
+
+ <para>Before VirtualBox 4.0, all virtual media (disk image files) were
+ also contained in a global registry in this settings file. For
+ compatibility, this media registry still exists if you upgrade
+ VirtualBox and there are media from machines which were created with a
+ version before 4.0. If you have no such machines, then there will be no
+ global media registry; with VirtualBox 4.0, each machine XML file has
+ its own media registry.</para>
+
+ <para>Also before VirtualBox 4.0, the default "Machines" folder and the
+ default "HardDisks" folder resided under the VirtualBox configuration
+ directory (e.g.
+ <computeroutput>$HOME/.VirtualBox/Machines</computeroutput> on Linux).
+ If you are upgrading from a VirtualBox version before 4.0, files in
+ these directories are not automatically moved in order not to break
+ backwards compatibility.</para>
+ </sect2>
+
+ <sect2>
+ <title>Summary of 4.0 configuration changes</title>
+
+ <table>
+ <title>ignoreme</title>
+
+ <tgroup cols="3">
+ <tbody>
+ <row>
+ <entry></entry>
+
+ <entry><emphasis role="bold">Before 4.0</emphasis></entry>
+
+ <entry><emphasis role="bold">4.0 or above</emphasis></entry>
+ </row>
+
+ <row>
+ <entry>Default machines folder</entry>
+
+ <entry><computeroutput>$HOME/.VirtualBox/Machines</computeroutput></entry>
+
+ <entry><computeroutput>$HOME/VirtualBox
+ VMs</computeroutput></entry>
+ </row>
+
+ <row>
+ <entry>Default disk image location</entry>
+
+ <entry><computeroutput>$HOME/.VirtualBox/HardDisks</computeroutput></entry>
+
+ <entry>In each machine's folder</entry>
+ </row>
+
+ <row>
+ <entry>Machine settings file extension</entry>
+
+ <entry><computeroutput>.xml</computeroutput></entry>
+
+ <entry><computeroutput>.vbox</computeroutput></entry>
+ </row>
+
+ <row>
+ <entry>Media registry</entry>
+
+ <entry>Global <computeroutput>VirtualBox.xml</computeroutput>
+ file</entry>
+
+ <entry>Each machine settings file</entry>
+ </row>
+
+ <row>
+ <entry>Media registration</entry>
+
+ <entry>Explicit open/close required</entry>
+
+ <entry>Automatic on attach</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect2>
+
+ <sect2>
+ <title>VirtualBox XML files</title>
+
+ <para>VirtualBox uses XML for both the machine settings files and the
+ global configuration file,
+ <computeroutput>VirtualBox.xml</computeroutput>.</para>
+
+ <para>All VirtualBox XML files are versioned. When a new settings file
+ is created (e.g. because a new virtual machine is created), VirtualBox
+ automatically uses the settings format of the current VirtualBox
+ version. These files may not be readable if you downgrade to an earlier
+ version of VirtualBox. However, when VirtualBox encounters a settings
+ file from an earlier version (e.g. after upgrading VirtualBox), it
+ attempts to preserve the settings format as much as possible. It will
+ only silently upgrade the settings format if the current settings cannot
+ be expressed in the old format, for example because you enabled a
+ feature that was not present in an earlier version of
+ VirtualBox.<footnote>
+ <para>As an example, before VirtualBox 3.1, it was only possible to
+ enable or disable a single DVD drive in a virtual machine. If it was
+ enabled, then it would always be visible as the secondary master of
+ the IDE controller. With VirtualBox 3.1, DVD drives can be attached
+ to arbitrary slots of arbitrary controllers, so they could be the
+ secondary slave of an IDE controller or in a SATA slot. If you have
+ a machine settings file from an earlier version and upgrade
+ VirtualBox to 3.1 and then move the DVD drive from its default
+ position, this cannot be expressed in the old settings format; the
+ XML machine file would get written in the new format, and a backup
+ file of the old format would be kept.</para>
+ </footnote> In such cases, VirtualBox backs up the old settings file
+ in the virtual machine's configuration directory. If you need to go back
+ to the earlier version of VirtualBox, then you will need to manually
+ copy these backup files back.</para>
+
+ <para>We intentionally do not document the specifications of the
+ VirtualBox XML files, as we must reserve the right to modify them in the
+ future. We therefore strongly suggest that you do not edit these files
+ manually. VirtualBox provides complete access to its configuration data
+ through its the <computeroutput>VBoxManage</computeroutput> command line
+ tool (see <xref linkend="vboxmanage" />) and its API (see <xref
+ linkend="VirtualBoxAPI" />).</para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="technical-components">
+ <title>VirtualBox executables and components</title>
+
+ <para>VirtualBox was designed to be modular and flexible. When the
+ VirtualBox graphical user interface (GUI) is opened and a VM is started,
+ at least three processes are running:<orderedlist>
+ <listitem>
+ <para><computeroutput>VBoxSVC</computeroutput>, the VirtualBox
+ service process which always runs in the background. This process is
+ started automatically by the first VirtualBox client process (the
+ GUI, <computeroutput>VBoxManage</computeroutput>,
+ <computeroutput>VBoxHeadless</computeroutput>, the web service or
+ others) and exits a short time after the last client exits. The
+ service is responsible for bookkeeping, maintaining the state of all
+ VMs, and for providing communication between VirtualBox components.
+ This communication is implemented via COM/XPCOM.<note>
+ <para>When we refer to "clients" here, we mean the local clients
+ of a particular <computeroutput>VBoxSVC</computeroutput> server
+ process, not clients in a network. VirtualBox employs its own
+ client/server design to allow its processes to cooperate, but
+ all these processes run under the same user account on the host
+ operating system, and this is totally transparent to the
+ user.</para>
+ </note></para>
+ </listitem>
+
+ <listitem>
+ <para>The GUI process, <computeroutput>VirtualBox</computeroutput>,
+ a client application based on the cross-platform Qt library. When
+ started without the <computeroutput>--startvm</computeroutput>
+ option, this application acts as the VirtualBox manager, displaying
+ the VMs and their settings. It then communicates settings and state
+ changes to <computeroutput>VBoxSVC</computeroutput> and also
+ reflects changes effected through other means, e.g.,
+ <computeroutput>VBoxManage</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para>If the <computeroutput>VirtualBox</computeroutput> client
+ application is started with the
+ <computeroutput>--startvm</computeroutput> argument, it loads the
+ VMM library which includes the actual hypervisor and then runs a
+ virtual machine and provides the input and output for the
+ guest.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>Any VirtualBox front-end (client) will communicate with the service
+ process and can both control and reflect the current state. For example,
+ either the VM selector or the VM window or VBoxManage can be used to pause
+ the running VM, and other components will always reflect the changed
+ state.</para>
+
+ <para>The VirtualBox GUI application is only one of several available
+ front ends (clients). The complete list shipped with VirtualBox
+ is:<orderedlist>
+ <listitem>
+ <para><computeroutput>VirtualBox</computeroutput>, the Qt front end
+ implementing the manager and running VMs;</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>VBoxManage</computeroutput>, a less
+ user-friendly but more powerful alternative, described in <xref
+ linkend="vboxmanage" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>VBoxSDL</computeroutput>, a simple graphical
+ front end based on the SDL library; see <xref
+ linkend="vboxsdl" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>VBoxHeadless</computeroutput>, a VM front end
+ which does not directly provide any video output and keyboard/mouse
+ input, but allows redirection via VirtualBox Remote Desktop Extension;
+ see <xref linkend="vboxheadless" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>vboxwebsrv</computeroutput>, the VirtualBox
+ web service process which allows for controlling a VirtualBox host
+ remotely. This is described in detail in the VirtualBox Software
+ Development Kit (SDK) reference; please see <xref
+ linkend="VirtualBoxAPI" /> for details.</para>
+ </listitem>
+
+ <listitem>
+ <para>The VirtualBox Python shell, a Python alternative to
+ VBoxManage. This is also described in the SDK reference.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>Internally, VirtualBox consists of many more or less separate
+ components. You may encounter these when analyzing VirtualBox internal
+ error messages or log files. These include:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>IPRT, a portable runtime library which abstracts file access,
+ threading, string manipulation, etc. Whenever VirtualBox accesses host
+ operating features, it does so through this library for cross-platform
+ portability.</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM (Virtual Machine Monitor), the heart of the
+ hypervisor.</para>
+ </listitem>
+
+ <listitem>
+ <para>EM (Execution Manager), controls execution of guest code.</para>
+ </listitem>
+
+ <listitem>
+ <para>REM (Recompiled Execution Monitor), provides software emulation
+ of CPU instructions.</para>
+ </listitem>
+
+ <listitem>
+ <para>TRPM (Trap Manager), intercepts and processes guest traps and
+ exceptions.</para>
+ </listitem>
+
+ <listitem>
+ <para>HWACCM (Hardware Acceleration Manager), provides support for
+ VT-x and AMD-V.</para>
+ </listitem>
+
+ <listitem>
+ <para>PDM (Pluggable Device Manager), an abstract interface between
+ the VMM and emulated devices which separates device implementations
+ from VMM internals and makes it easy to add new emulated devices.
+ Through PDM, third-party developers can add new virtual devices to
+ VirtualBox without having to change VirtualBox itself.</para>
+ </listitem>
+
+ <listitem>
+ <para>PGM (Page Manager), a component controlling guest paging.</para>
+ </listitem>
+
+ <listitem>
+ <para>PATM (Patch Manager), patches guest code to improve and speed up
+ software virtualization.</para>
+ </listitem>
+
+ <listitem>
+ <para>TM (Time Manager), handles timers and all aspects of time inside
+ guests.</para>
+ </listitem>
+
+ <listitem>
+ <para>CFGM (Configuration Manager), provides a tree structure which
+ holds configuration settings for the VM and all emulated
+ devices.</para>
+ </listitem>
+
+ <listitem>
+ <para>SSM (Saved State Manager), saves and loads VM state.</para>
+ </listitem>
+
+ <listitem>
+ <para>VUSB (Virtual USB), a USB layer which separates emulated USB
+ controllers from the controllers on the host and from USB devices;
+ this also enables remote USB.</para>
+ </listitem>
+
+ <listitem>
+ <para>DBGF (Debug Facility), a built-in VM debugger.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox emulates a number of devices to provide the hardware
+ environment that various guests need. Most of these are standard
+ devices found in many PC compatible machines and widely supported by
+ guest operating systems. For network and storage devices in
+ particular, there are several options for the emulated devices to
+ access the underlying hardware. These devices are managed by
+ PDM.</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest Additions for various guest operating systems. This is
+ code that is installed from within a virtual machine; see <xref
+ linkend="guestadditions" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>The "Main" component is special: it ties all the above bits
+ together and is the only public API that VirtualBox provides. All the
+ client processes listed above use only this API and never access the
+ hypervisor components directly. As a result, third-party applications
+ that use the VirtualBox Main API can rely on the fact that it is
+ always well-tested and that all capabilities of VirtualBox are fully
+ exposed. It is this API that is described in the VirtualBox SDK
+ mentioned above (again, see <xref linkend="VirtualBoxAPI" />).</para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1 id="hwvirt">
+ <title>Hardware vs. software virtualization</title>
+
+ <para>VirtualBox allows software in the virtual machine to run directly on
+ the processor of the host, but an array of complex techniques is employed
+ to intercept operations that would interfere with your host. Whenever the
+ guest attempts to do something that could be harmful to your computer and
+ its data, VirtualBox steps in and takes action. In particular, for lots of
+ hardware that the guest believes to be accessing, VirtualBox simulates a
+ certain "virtual" environment according to how you have configured a
+ virtual machine. For example, when the guest attempts to access a hard
+ disk, VirtualBox redirects these requests to whatever you have configured
+ to be the virtual machine's virtual hard disk -- normally, an image file
+ on your host.</para>
+
+ <para>Unfortunately, the x86 platform was never designed to be
+ virtualized. Detecting situations in which VirtualBox needs to take
+ control over the guest code that is executing, as described above, is
+ difficult. There are two ways in which to achieve this:<itemizedlist>
+ <listitem>
+ <para>Since 2006, Intel and AMD processors have had support for
+ so-called <emphasis role="bold">"hardware
+ virtualization"</emphasis>. This means that these processors can
+ help VirtualBox to intercept potentially dangerous operations that a
+ guest operating system may be attempting and also makes it easier to
+ present virtual hardware to a virtual machine.</para>
+
+ <para>These hardware features differ between Intel and AMD
+ processors. Intel named its technology <emphasis
+ role="bold">VT-x</emphasis>; AMD calls theirs <emphasis
+ role="bold">AMD-V</emphasis>. The Intel and AMD support for
+ virtualization is very different in detail, but not very different
+ in principle.<note>
+ <para>On many systems, the hardware virtualization features
+ first need to be enabled in the BIOS before VirtualBox can use
+ them.</para>
+ </note></para>
+ </listitem>
+
+ <listitem>
+ <para>As opposed to other virtualization software, for many usage
+ scenarios, VirtualBox does not <emphasis>require</emphasis> hardware
+ virtualization features to be present. Through sophisticated
+ techniques, VirtualBox virtualizes many guest operating systems
+ entirely in <emphasis role="bold">software</emphasis>. This means
+ that you can run virtual machines even on older processors which do
+ not support hardware virtualization.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>Even though VirtualBox does not always require hardware
+ virtualization, enabling it is <emphasis>required</emphasis> in the
+ following scenarios:<itemizedlist>
+ <listitem>
+ <para>Certain rare guest operating systems like OS/2 make use of
+ very esoteric processor instructions that are not supported with our
+ software virtualization. For virtual machines that are configured to
+ contain such an operating system, hardware virtualization is enabled
+ automatically.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox's 64-bit guest support (added with version 2.0) and
+ multiprocessing (SMP, added with version 3.0) both require hardware
+ virtualization to be enabled. (This is not much of a limitation
+ since the vast majority of today's 64-bit and multicore CPUs ship
+ with hardware virtualization anyway; the exceptions to this rule are
+ e.g. older Intel Celeron and AMD Opteron CPUs.)</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <warning>
+ <para>Do not run other hypervisors (open-source or commercial
+ virtualization products) together with VirtualBox! While several
+ hypervisors can normally be <emphasis>installed</emphasis> in parallel,
+ do not attempt to <emphasis>run</emphasis> several virtual machines from
+ competing hypervisors at the same time. VirtualBox cannot track what
+ another hypervisor is currently attempting to do on the same host, and
+ especially if several products attempt to use hardware virtualization
+ features such as VT-x, this can crash the entire host. Also, within
+ VirtualBox, you can mix software and hardware virtualization when
+ running multiple VMs. In certain cases a small performance penalty will
+ be unavoidable when mixing VT-x and software virtualization VMs. We
+ recommend not mixing virtualization modes if maximum performance and low
+ overhead are essential. This does <emphasis>not</emphasis> apply to
+ AMD-V.</para>
+ </warning>
+ </sect1>
+
+ <sect1>
+ <title>Details about software virtualization</title>
+
+ <para>Implementing virtualization on x86 CPUs with no hardware
+ virtualization support is an extraordinarily complex task because the CPU
+ architecture was not designed to be virtualized. The problems can usually
+ be solved, but at the cost of reduced performance. Thus, there is a
+ constant clash between virtualization performance and accuracy.</para>
+
+ <para>The x86 instruction set was originally designed in the 1970s and
+ underwent significant changes with the addition of protected mode in the
+ 1980s with the 286 CPU architecture and then again with the Intel 386 and
+ its 32-bit architecture. Whereas the 386 did have limited virtualization
+ support for real mode operation (V86 mode, as used by the "DOS Box" of
+ Windows 3.x and OS/2 2.x), no support was provided for virtualizing the
+ entire architecture.</para>
+
+ <para>In theory, software virtualization is not overly complex. In
+ addition to the four privilege levels ("rings") provided by the hardware
+ (of which typically only two are used: ring 0 for kernel mode and ring 3
+ for user mode), one needs to differentiate between "host context" and
+ "guest context".</para>
+
+ <para>In "host context", everything is as if no hypervisor was active.
+ This might be the active mode if another application on your host has been
+ scheduled CPU time; in that case, there is a host ring 3 mode and a host
+ ring 0 mode. The hypervisor is not involved.</para>
+
+ <para>In "guest context", however, a virtual machine is active. So long as
+ the guest code is running in ring 3, this is not much of a problem since a
+ hypervisor can set up the page tables properly and run that code natively
+ on the processor. The problems mostly lie in how to intercept what the
+ guest's kernel does.</para>
+
+ <para>There are several possible solutions to these problems. One approach
+ is full software emulation, usually involving recompilation. That is, all
+ code to be run by the guest is analyzed, transformed into a form which
+ will not allow the guest to either modify or see the true state of the
+ CPU, and only then executed. This process is obviously highly complex and
+ costly in terms of performance. (VirtualBox contains a recompiler based on
+ QEMU which can be used for pure software emulation, but the recompiler is
+ only activated in special situations, described below.)</para>
+
+ <para>Another possible solution is paravirtualization, in which only
+ specially modified guest OSes are allowed to run. This way, most of the
+ hardware access is abstracted and any functions which would normally
+ access the hardware or privileged CPU state are passed on to the
+ hypervisor instead. Paravirtualization can achieve good functionality and
+ performance on standard x86 CPUs, but it can only work if the guest OS can
+ actually be modified, which is obviously not always the case.</para>
+
+ <para>VirtualBox chooses a different approach. When starting a virtual
+ machine, through its ring-0 support kernel driver, VirtualBox has set up
+ the host system so that it can run most of the guest code natively, but it
+ has inserted itself at the "bottom" of the picture. It can then assume
+ control when needed -- if a privileged instruction is executed, the guest
+ traps (in particular because an I/O register was accessed and a device
+ needs to be virtualized) or external interrupts occur. VirtualBox may then
+ handle this and either route a request to a virtual device or possibly
+ delegate handling such things to the guest or host OS. In guest context,
+ VirtualBox can therefore be in one of three states:</para>
+
+ <para><itemizedlist>
+ <listitem>
+ <para>Guest ring 3 code is run unmodified, at full speed, as much as
+ possible. The number of faults will generally be low (unless the
+ guest allows port I/O from ring 3, something we cannot do as we
+ don't want the guest to be able to access real ports). This is also
+ referred to as "raw mode", as the guest ring-3 code runs
+ unmodified.</para>
+ </listitem>
+
+ <listitem>
+ <para>For guest code in ring 0, VirtualBox employs a nasty trick: it
+ actually reconfigures the guest so that its ring-0 code is run in
+ ring 1 instead (which is normally not used in x86 operating
+ systems). As a result, when guest ring-0 code (actually running in
+ ring 1) such as a guest device driver attempts to write to an I/O
+ register or execute a privileged instruction, the VirtualBox
+ hypervisor in "real" ring 0 can take over.</para>
+ </listitem>
+
+ <listitem>
+ <para>The hypervisor (VMM) can be active. Every time a fault occurs,
+ VirtualBox looks at the offending instruction and can relegate it to
+ a virtual device or the host OS or the guest OS or run it in the
+ recompiler.</para>
+
+ <para>In particular, the recompiler is used when guest code disables
+ interrupts and VirtualBox cannot figure out when they will be
+ switched back on (in these situations, VirtualBox actually analyzes
+ the guest code using its own disassembler). Also, certain privileged
+ instructions such as LIDT need to be handled specially. Finally, any
+ real-mode or protected-mode code (e.g. BIOS code, a DOS guest, or
+ any operating system startup) is run in the recompiler
+ entirely.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>Unfortunately this only works to a degree. Among others, the
+ following situations require special handling:</para>
+
+ <para><orderedlist>
+ <listitem>
+ <para>Running ring 0 code in ring 1 causes a lot of additional
+ instruction faults, as ring 1 is not allowed to execute any
+ privileged instructions (of which guest's ring-0 contains plenty).
+ With each of these faults, the VMM must step in and emulate the code
+ to achieve the desired behavior. While this works, emulating
+ thousands of these faults is very expensive and severely hurts the
+ performance of the virtualized guest.</para>
+ </listitem>
+
+ <listitem>
+ <para>There are certain flaws in the implementation of ring 1 in the
+ x86 architecture that were never fixed. Certain instructions that
+ <emphasis>should</emphasis> trap in ring 1 don't. This affect for
+ example the LGDT/SGDT, LIDT/SIDT, or POPF/PUSHF instruction pairs.
+ Whereas the "load" operation is privileged and can therefore be
+ trapped, the "store" instruction always succeed. If the guest is
+ allowed to execute these, it will see the true state of the CPU, not
+ the virtualized state. The CPUID instruction also has the same
+ problem.</para>
+ </listitem>
+
+ <listitem>
+ <para>A hypervisor typically needs to reserve some portion of the
+ guest's address space (both linear address space and selectors) for
+ its own use. This is not entirely transparent to the guest OS and
+ may cause clashes.</para>
+ </listitem>
+
+ <listitem>
+ <para>The SYSENTER instruction (used for system calls) executed by
+ an application running in a guest OS always transitions to ring 0.
+ But that is where the hypervisor runs, not the guest OS. In this
+ case, the hypervisor must trap and emulate the instruction even when
+ it is not desirable.</para>
+ </listitem>
+
+ <listitem>
+ <para>The CPU segment registers contain a "hidden" descriptor cache
+ which is not software-accessible. The hypervisor cannot read, save,
+ or restore this state, but the guest OS may use it.</para>
+ </listitem>
+
+ <listitem>
+ <para>Some resources must (and can) be trapped by the hypervisor,
+ but the access is so frequent that this creates a significant
+ performance overhead. An example is the TPR (Task Priority) register
+ in 32-bit mode. Accesses to this register must be trapped by the
+ hypervisor, but certain guest operating systems (notably Windows and
+ Solaris) write this register very often, which adversely affects
+ virtualization performance.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>To fix these performance and security issues, VirtualBox contains a
+ Code Scanning and Analysis Manager (CSAM), which disassembles guest code,
+ and the Patch Manager (PATM), which can replace it at runtime.</para>
+
+ <para>Before executing ring 0 code, CSAM scans it recursively to discover
+ problematic instructions. PATM then performs <emphasis>in-situ
+ </emphasis>patching, i.e. it replaces the instruction with a jump to
+ hypervisor memory where an integrated code generator has placed a more
+ suitable implementation. In reality, this is a very complex task as there
+ are lots of odd situations to be discovered and handled correctly. So,
+ with its current complexity, one could argue that PATM is an advanced
+ <emphasis>in-situ</emphasis> recompiler.</para>
+
+ <para>In addition, every time a fault occurs, VirtualBox analyzes the
+ offending code to determine if it is possible to patch it in order to
+ prevent it from causing more faults in the future. This approach works
+ well in practice and dramatically improves software virtualization
+ performance.</para>
+ </sect1>
+
+ <sect1>
+ <title>Details about hardware virtualization</title>
+
+ <para>With Intel VT-x, there are two distinct modes of CPU operation: VMX
+ root mode and non-root mode.<itemizedlist>
+ <listitem>
+ <para>In root mode, the CPU operates much like older generations of
+ processors without VT-x support. There are four privilege levels
+ ("rings"), and the same instruction set is supported, with the
+ addition of several virtualization specific instruction. Root mode
+ is what a host operating system without virtualization uses, and it
+ is also used by a hypervisor when virtualization is active.</para>
+ </listitem>
+
+ <listitem>
+ <para>In non-root mode, CPU operation is significantly different.
+ There are still four privilege rings and the same instruction set,
+ but a new structure called VMCS (Virtual Machine Control Structure)
+ now controls the CPU operation and determines how certain
+ instructions behave. Non-root mode is where guest systems
+ run.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>Switching from root mode to non-root mode is called "VM entry", the
+ switch back is "VM exit". The VMCS includes a guest and host state area
+ which is saved/restored at VM entry and exit. Most importantly, the VMCS
+ controls which guest operations will cause VM exits.</para>
+
+ <para>The VMCS provides fairly fine-grained control over what the guests
+ can and can't do. For example, a hypervisor can allow a guest to write
+ certain bits in shadowed control registers, but not others. This enables
+ efficient virtualization in cases where guests can be allowed to write
+ control bits without disrupting the hypervisor, while preventing them from
+ altering control bits over which the hypervisor needs to retain full
+ control. The VMCS also provides control over interrupt delivery and
+ exceptions.</para>
+
+ <para>Whenever an instruction or event causes a VM exit, the VMCS contains
+ information about the exit reason, often with accompanying detail. For
+ example, if a write to the CR0 register causes an exit, the offending
+ instruction is recorded, along with the fact that a write access to a
+ control register caused the exit, and information about source and
+ destination register. Thus the hypervisor can efficiently handle the
+ condition without needing advanced techniques such as CSAM and PATM
+ described above.</para>
+
+ <para>VT-x inherently avoids several of the problems which software
+ virtualization faces. The guest has its own completely separate address
+ space not shared with the hypervisor, which eliminates potential clashes.
+ Additionally, guest OS kernel code runs at privilege ring 0 in VMX
+ non-root mode, obviating the problems by running ring 0 code at less
+ privileged levels. For example the SYSENTER instruction can transition to
+ ring 0 without causing problems. Naturally, even at ring 0 in VMX non-root
+ mode, any I/O access by guest code still causes a VM exit, allowing for
+ device emulation.</para>
+
+ <para>The biggest difference between VT-x and AMD-V is that AMD-V provides
+ a more complete virtualization environment. VT-x requires the VMX non-root
+ code to run with paging enabled, which precludes hardware virtualization
+ of real-mode code and non-paged protected-mode software. This typically
+ only includes firmware and OS loaders, but nevertheless complicates VT-x
+ hypervisor implementation. AMD-V does not have this restriction.</para>
+
+ <para>Of course hardware virtualization is not perfect. Compared to
+ software virtualization, the overhead of VM exits is relatively high. This
+ causes problems for devices whose emulation requires high number of traps.
+ One example is the VGA device in 16-color modes, where not only every I/O
+ port access but also every access to the framebuffer memory must be
+ trapped.</para>
+ </sect1>
+
+ <sect1 id="nestedpaging">
+ <title>Nested paging and VPIDs</title>
+
+ <para>In addition to "plain" hardware virtualization, your processor may
+ also support additional sophisticated techniques:<footnote>
+ <para>VirtualBox 2.0 added support for AMD's nested paging; support
+ for Intel's EPT and VPIDs was added with version 2.1.</para>
+ </footnote><itemizedlist>
+ <listitem>
+ <para>A newer feature called <emphasis role="bold">"nested
+ paging"</emphasis> implements some memory management in hardware,
+ which can greatly accelerate hardware virtualization since these
+ tasks no longer need to be performed by the virtualization
+ software.</para>
+
+ <para>With nested paging, the hardware provides another level of
+ indirection when translating linear to physical addresses. Page
+ tables function as before, but linear addresses are now translated
+ to "guest physical" addresses first and not physical addresses
+ directly. A new set of paging registers now exists under the
+ traditional paging mechanism and translates from guest physical
+ addresses to host physical addresses, which are used to access
+ memory.</para>
+
+ <para>Nested paging eliminates the overhead caused by VM exits and
+ page table accesses. In essence, with nested page tables the guest
+ can handle paging without intervention from the hypervisor. Nested
+ paging thus significantly improves virtualization
+ performance.</para>
+
+ <para>On AMD processors, nested paging has been available starting
+ with the Barcelona (K10) architecture -- they call it now "rapid
+ virtualization indexing" (RVI). Intel added support for nested
+ paging, which they call "extended page tables" (EPT), with their
+ Core i7 (Nehalem) processors.</para>
+
+ <para>If nested paging is enabled, the VirtualBox hypervisor can
+ also use <emphasis role="bold">large pages</emphasis> to reduce TLB
+ usage and overhead. This can yield a performance improvement of up
+ to 5%. To enable this feature for a VM, you need to use the
+ <computeroutput>VBoxManage modifyvm
+ </computeroutput><computeroutput>--largepages</computeroutput>
+ command; see <xref linkend="vboxmanage-modifyvm" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>On Intel CPUs, another hardware feature called <emphasis
+ role="bold">"Virtual Processor Identifiers" (VPIDs)</emphasis> can
+ greatly accelerate context switching by reducing the need for
+ expensive flushing of the processor's Translation Lookaside Buffers
+ (TLBs).</para>
+
+ <para>To enable these features for a VM, you need to use the
+ <computeroutput>VBoxManage modifyvm --vtxvpid</computeroutput> and
+ <computeroutput>--largepages</computeroutput> commands; see <xref
+ linkend="vboxmanage-modifyvm" />.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect1>
+</chapter>
diff --git a/doc/manual/en_US/user_ThirdParty.xml b/doc/manual/en_US/user_ThirdParty.xml
new file mode 100644
index 00000000..ce5dec56
--- /dev/null
+++ b/doc/manual/en_US/user_ThirdParty.xml
@@ -0,0 +1,2599 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+ "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<appendix id="ThirdParty">
+ <title>Third-party materials and licenses</title>
+
+ <para>VirtualBox incorporates materials from several Open Source software
+ projects. Therefore the use of these materials by VirtualBox is governed by
+ different Open Source licenses. This document reproduces these licenses and
+ provides a list of the materials used and their respective licensing
+ conditions. Section 1 contains a list of the materials used. Section 2
+ reproduces the applicable Open Source licenses. For each material, a
+ reference to its license is provided.</para>
+
+ <para>The source code for the materials listed below as well as the rest of
+ the VirtualBox code which is released as open source are available at <ulink
+ url="http://www.virtualbox.org">http://www.virtualbox.org</ulink>, both as
+ tarballs for particular releases and as a live SVN repository.</para>
+
+ <sect1>
+ <title>Materials</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>VirtualBox contains portions of QEMU which is governed by the
+ licenses in <xref linkend="licX11" xrefstyle="template: %n" /> and
+ <xref linkend="licLGPL" xrefstyle="template: %n" /> and</para>
+
+ <para>(C) 2003-2005 Fabrice Bellard; Copyright (C) 2004-2005 Vassili
+ Karpov (malc); Copyright (c) 2004 Antony T Curtis; Copyright (C) 2003
+ Jocelyn Mayer</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox contains code which is governed by the license in
+ <xref linkend="licX11" xrefstyle="template: %n" /> and</para>
+
+ <para>Copyright 2004 by the Massachusetts Institute of
+ Technology.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox contains code of the BOCHS VGA BIOS which is governed
+ by the license in <xref linkend="licLGPL" xrefstyle="template: %n" />
+ and</para>
+
+ <para>Copyright (C) 2001, 2002 the LGPL VGABios developers
+ Team.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox contains code of the BOCHS ROM BIOS which is governed
+ by the license in <xref linkend="licLGPL" xrefstyle="template: %n" />
+ and</para>
+
+ <para>Copyright (C) 2002 MandrakeSoft S.A.; Copyright (C) 2004 Fabrice
+ Bellard; Copyright (C) 2005 Struan Bartlett.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox contains the zlib library which is governed by the
+ license in <xref linkend="licZLIB" xrefstyle="template: %n" />
+ and</para>
+
+ <para>Copyright (C) 1995-2003 Jean-loup Gailly and Mark Adler.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox may contain OpenSSL which is governed by the license
+ in <xref linkend="licSSL" xrefstyle="template: %n" /> and</para>
+
+ <para>Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com). This
+ product includes software written by Tim Hudson
+ (tjh@cryptsoft.com).</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox may contain NSPR and XPCOM which is governed by the
+ license in <xref linkend="licMPL" xrefstyle="template: %n" />
+ and</para>
+
+ <para>Copyright (C) The Authors.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox contains Slirp which is governed by the license in
+ <xref linkend="licSlirp" xrefstyle="template: %n" /> and was written
+ by Danny Gasparovski.</para>
+
+ <para>Copyright (C) 1995, 1996 All Rights Reserved.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox contains liblzf which is governed by the license in
+ <xref linkend="licLZF" xrefstyle="template: %n" /> and</para>
+
+ <para>Copyright (C) 2000-2005 Marc Alexander Lehmann
+ &lt;schmorp@schmorp.de&gt;</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox may ship with a modified copy of rdesktop which is
+ governed by the license in <xref linkend="licGPL"
+ xrefstyle="template: %n" /> and</para>
+
+ <para>Copyright (C) Matthew Chapman and others.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox may ship with a copy of kchmviewer which is governed
+ by the license in <xref linkend="licGPL" xrefstyle="template: %n" />
+ and</para>
+
+ <para>Copyright (C) George Yunaev and others.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox may contain Etherboot which is governed by the
+ license in <xref linkend="licGPL" xrefstyle="template: %n" /> with the
+ exception that aggregating Etherboot with another work does not
+ require the other work to be released under the same license (see
+ <literal><ulink
+ url="http://etherboot.sourceforge.net/clinks.html">http://etherboot.sourceforge.net/clinks.html</ulink></literal>).
+ Etherboot is</para>
+
+ <para>Copyright (C) Etherboot team.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox contains code from Wine which is governed by the
+ license in <xref linkend="licLGPL" xrefstyle="template: %n" />
+ and</para>
+
+ <para>Copyright 1993 Bob Amstadt, Copyright 1996 Albrecht Kleine,
+ Copyright 1997 David Faure, Copyright 1998 Morten Welinder, Copyright
+ 1998 Ulrich Weigand, Copyright 1999 Ove Koven</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox contains code from lwIP which is governed by the
+ license in <xref linkend="licLWIP" xrefstyle="template: %n" />
+ and</para>
+
+ <para>Copyright (C) 2001, 2002 Swedish Institute of Computer
+ Science.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox contains libxml which is governed by the license in
+ <xref linkend="licLibXML" /> and</para>
+
+ <para>Copyright (C) 1998-2003 Daniel Veillard.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox contains libxslt which is governed by the license in
+ <xref linkend="licLibXSLT" /> and</para>
+
+ <para>Copyright (C) 2001-2002 Daniel Veillard and Copyright (C)
+ 2001-2002 Thomas Broyer, Charlie Bozeman and Daniel Veillard.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox contains code from the gSOAP XML web services
+ tools, which are licensed under the license in <xref
+ linkend="licgSOAP" /> and</para>
+
+ <para>Copyright (C) 2000-2007, Robert van Engelen, Genivia Inc., and
+ others.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox ships with the application tunctl (shipped as
+ VBoxTunctl) from the User-mode Linux suite which is governed by the
+ license in <xref linkend="licGPL" xrefstyle="template: %n" />
+ and</para>
+
+ <para>Copyright (C) 2002 Jeff Dike.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox contains code from Chromium, an OpenGL
+ implementation, which is goverened by the licenses in <xref
+ linkend="licChromium" /> and</para>
+
+ <para>Copyright (C) Stanford University, The Regents of the University
+ of California, Red Hat, and others.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox contains libcurl which is governed by the license in
+ <xref linkend="licLibCurl" /> and</para>
+
+ <para>Copyright (C) 1996-2009, Daniel Stenberg.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox contains dnsproxy which is governed by the license in
+ <xref linkend="licMIT" /> and</para>
+
+ <para>Copyright (c) 2003, 2004, 2005 Armin Wolfermann.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox may contain iniparser which is governed by the
+ license in <xref linkend="licMIT" /> and</para>
+
+ <para>Copyright (c) 2000-2008 by Nicolas Devillard.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox contains some code from libgd which is governed by
+ the license in <xref linkend="licLibgd" /> and</para>
+
+ <para>Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ Pierre-Alain Joye (pierre@libgd.org).</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox contains code from the EFI Development Kit II
+ which is governed by the license in
+ <xref linkend="licBsdIntel" /> and</para>
+
+ <para>Copyright (c) 2004-2008, Intel Corporation.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox contains libjpeg which is governed by the
+ license in <xref linkend="licJPEG" /> and</para>
+
+ <para>Copyright (C) 1991-2010, Thomas G. Lane, Guido Vollbeding.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox may contain x86 SIMD extension for IJG JPEG library
+ which is governed by the license in <xref linkend="licJPEGSIMD" /> and</para>
+
+ <para>Copyright 2009 Pierre Ossman &lt;ossman@cendio.se&gt; for Cendio AB;
+ Copyright 2010 D. R. Commander; Copyright (C) 1999-2006, MIYASAKA Masaru.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox may ship a copy of Qt which is governed by the license in
+ <xref linkend="licLGPL" xrefstyle="template: %n" />
+ and</para>
+
+ <para>Copyright (C) 2010, 2011 Nokia Corporation and/or its subsidiary(-ies).</para>
+ </listitem>
+
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Licenses</title>
+
+ <sect2 id="licGPL">
+ <title>GNU General Public License (GPL)</title>
+
+ <para>GNU GENERAL PUBLIC LICENSE Version 2, June 1991</para>
+
+ <para>Copyright (C) 1989, 1991 Free Software Foundation, Inc.</para>
+
+ <para>51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA</para>
+
+ <para>Everyone is permitted to copy and distribute verbatim copies of
+ this license document, but changing it is not allowed.</para>
+
+ <para>Preamble</para>
+
+ <para>The licenses for most software are designed to take away your
+ freedom to share and change it. By contrast, the GNU General Public
+ License is intended to guarantee your freedom to share and change free
+ software--to make sure the software is free for all its users. This
+ General Public License applies to most of the Free Software Foundation's
+ software and to any other program whose authors commit to using it.
+ (Some other Free Software Foundation software is covered by the GNU
+ Library General Public License instead.) You can apply it to your
+ programs, too.</para>
+
+ <para>When we speak of free software, we are referring to freedom, not
+ price. Our General Public Licenses are designed to make sure that you
+ have the freedom to distribute copies of free software (and charge for
+ this service if you wish), that you receive source code or can get it if
+ you want it, that you can change the software or use pieces of it in new
+ free programs; and that you know you can do these things.</para>
+
+ <para>To protect your rights, we need to make restrictions that forbid
+ anyone to deny you these rights or to ask you to surrender the rights.
+ These restrictions translate to certain responsibilities for you if you
+ distribute copies of the software, or if you modify it.</para>
+
+ <para>For example, if you distribute copies of such a program, whether
+ gratis or for a fee, you must give the recipients all the rights that
+ you have. You must make sure that they, too, receive or can get the
+ source code. And you must show them these terms so they know their
+ rights.</para>
+
+ <para>We protect your rights with two steps: (1) copyright the software,
+ and (2) offer you this license which gives you legal permission to copy,
+ distribute and/or modify the software.</para>
+
+ <para>Also, for each author's protection and ours, we want to make
+ certain that everyone understands that there is no warranty for this
+ free software. If the software is modified by someone else and passed
+ on, we want its recipients to know that what they have is not the
+ original, so that any problems introduced by others will not reflect on
+ the original authors' reputations.</para>
+
+ <para>Finally, any free program is threatened constantly by software
+ patents. We wish to avoid the danger that redistributors of a free
+ program will individually obtain patent licenses, in effect making the
+ program proprietary. To prevent this, we have made it clear that any
+ patent must be licensed for everyone's free use or not licensed at
+ all.</para>
+
+ <para>The precise terms and conditions for copying, distribution and
+ modification follow.</para>
+
+ <para>GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING,
+ DISTRIBUTION AND MODIFICATION</para>
+
+ <para>0. This License applies to any program or other work which
+ contains a notice placed by the copyright holder saying it may be
+ distributed under the terms of this General Public License. The
+ "Program", below, refers to any such program or work, and a "work based
+ on the Program" means either the Program or any derivative work under
+ copyright law: that is to say, a work containing the Program or a
+ portion of it, either verbatim or with modifications and/or translated
+ into another language. (Hereinafter, translation is included without
+ limitation in the term "modification".) Each licensee is addressed as
+ "you".</para>
+
+ <para>Activities other than copying, distribution and modification are
+ not covered by this License; they are outside its scope. The act of
+ running the Program is not restricted, and the output from the Program
+ is covered only if its contents constitute a work based on the Program
+ (independent of having been made by running the Program). Whether that
+ is true depends on what the Program does.</para>
+
+ <para>1. You may copy and distribute verbatim copies of the Program's
+ source code as you receive it, in any medium, provided that you
+ conspicuously and appropriately publish on each copy an appropriate
+ copyright notice and disclaimer of warranty; keep intact all the notices
+ that refer to this License and to the absence of any warranty; and give
+ any other recipients of the Program a copy of this License along with
+ the Program.</para>
+
+ <para>You may charge a fee for the physical act of transferring a copy,
+ and you may at your option offer warranty protection in exchange for a
+ fee.</para>
+
+ <para>2. You may modify your copy or copies of the Program or any
+ portion of it, thus forming a work based on the Program, and copy and
+ distribute such modifications or work under the terms of Section 1
+ above, provided that you also meet all of these conditions:</para>
+
+ <para>a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.</para>
+
+ <para>b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any part
+ thereof, to be licensed as a whole at no charge to all third parties
+ under the terms of this License.</para>
+
+ <para>c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such interactive
+ use in the most ordinary way, to print or display an announcement
+ including an appropriate copyright notice and a notice that there is no
+ warranty (or else, saying that you provide a warranty) and that users
+ may redistribute the program under these conditions, and telling the
+ user how to view a copy of this License. (Exception: if the Program
+ itself is interactive but does not normally print such an announcement,
+ your work based on the Program is not required to print an
+ announcement.)</para>
+
+ <para>These requirements apply to the modified work as a whole. If
+ identifiable sections of that work are not derived from the Program, and
+ can be reasonably considered independent and separate works in
+ themselves, then this License, and its terms, do not apply to those
+ sections when you distribute them as separate works. But when you
+ distribute the same sections as part of a whole which is a work based on
+ the Program, the distribution of the whole must be on the terms of this
+ License, whose permissions for other licensees extend to the entire
+ whole, and thus to each and every part regardless of who wrote
+ it.</para>
+
+ <para>Thus, it is not the intent of this section to claim rights or
+ contest your rights to work written entirely by you; rather, the intent
+ is to exercise the right to control the distribution of derivative or
+ collective works based on the Program.</para>
+
+ <para>In addition, mere aggregation of another work not based on the
+ Program with the Program (or with a work based on the Program) on a
+ volume of a storage or distribution medium does not bring the other work
+ under the scope of this License.</para>
+
+ <para>3. You may copy and distribute the Program (or a work based on it,
+ under Section 2) in object code or executable form under the terms of
+ Sections 1 and 2 above provided that you also do one of the
+ following:</para>
+
+ <para>a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections 1 and
+ 2 above on a medium customarily used for software interchange;
+ or,</para>
+
+ <para>b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your cost of
+ physically performing source distribution, a complete machine-readable
+ copy of the corresponding source code, to be distributed under the terms
+ of Sections 1 and 2 above on a medium customarily used for software
+ interchange; or,</para>
+
+ <para>c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is allowed
+ only for noncommercial distribution and only if you received the program
+ in object code or executable form with such an offer, in accord with
+ Subsection b above.)</para>
+
+ <para>The source code for a work means the preferred form of the work
+ for making modifications to it. For an executable work, complete source
+ code means all the source code for all modules it contains, plus any
+ associated interface definition files, plus the scripts used to control
+ compilation and installation of the executable. However, as a special
+ exception, the source code distributed need not include anything that is
+ normally distributed (in either source or binary form) with the major
+ components (compiler, kernel, and so on) of the operating system on
+ which the executable runs, unless that component itself accompanies the
+ executable.</para>
+
+ <para>If distribution of executable or object code is made by offering
+ access to copy from a designated place, then offering equivalent access
+ to copy the source code from the same place counts as distribution of
+ the source code, even though third parties are not compelled to copy the
+ source along with the object code.</para>
+
+ <para>4. You may not copy, modify, sublicense, or distribute the Program
+ except as expressly provided under this License. Any attempt otherwise
+ to copy, modify, sublicense or distribute the Program is void, and will
+ automatically terminate your rights under this License. However, parties
+ who have received copies, or rights, from you under this License will
+ not have their licenses terminated so long as such parties remain in
+ full compliance.</para>
+
+ <para>5. You are not required to accept this License, since you have not
+ signed it. However, nothing else grants you permission to modify or
+ distribute the Program or its derivative works. These actions are
+ prohibited by law if you do not accept this License. Therefore, by
+ modifying or distributing the Program (or any work based on the
+ Program), you indicate your acceptance of this License to do so, and all
+ its terms and conditions for copying, distributing or modifying the
+ Program or works based on it.</para>
+
+ <para>6. Each time you redistribute the Program (or any work based on
+ the Program), the recipient automatically receives a license from the
+ original licensor to copy, distribute or modify the Program subject to
+ these terms and conditions. You may not impose any further restrictions
+ on the recipients' exercise of the rights granted herein. You are not
+ responsible for enforcing compliance by third parties to this
+ License.</para>
+
+ <para>7. If, as a consequence of a court judgment or allegation of
+ patent infringement or for any other reason (not limited to patent
+ issues), conditions are imposed on you (whether by court order,
+ agreement or otherwise) that contradict the conditions of this License,
+ they do not excuse you from the conditions of this License. If you
+ cannot distribute so as to satisfy simultaneously your obligations under
+ this License and any other pertinent obligations, then as a consequence
+ you may not distribute the Program at all. For example, if a patent
+ license would not permit royalty-free redistribution of the Program by
+ all those who receive copies directly or indirectly through you, then
+ the only way you could satisfy both it and this License would be to
+ refrain entirely from distribution of the Program.</para>
+
+ <para>If any portion of this section is held invalid or unenforceable
+ under any particular circumstance, the balance of the section is
+ intended to apply and the section as a whole is intended to apply in
+ other circumstances.</para>
+
+ <para>It is not the purpose of this section to induce you to infringe
+ any patents or other property right claims or to contest validity of any
+ such claims; this section has the sole purpose of protecting the
+ integrity of the free software distribution system, which is implemented
+ by public license practices. Many people have made generous
+ contributions to the wide range of software distributed through that
+ system in reliance on consistent application of that system; it is up to
+ the author/donor to decide if he or she is willing to distribute
+ software through any other system and a licensee cannot impose that
+ choice.</para>
+
+ <para>This section is intended to make thoroughly clear what is believed
+ to be a consequence of the rest of this License.</para>
+
+ <para>8. If the distribution and/or use of the Program is restricted in
+ certain countries either by patents or by copyrighted interfaces, the
+ original copyright holder who places the Program under this License may
+ add an explicit geographical distribution limitation excluding those
+ countries, so that distribution is permitted only in or among countries
+ not thus excluded. In such case, this License incorporates the
+ limitation as if written in the body of this License.</para>
+
+ <para>9. The Free Software Foundation may publish revised and/or new
+ versions of the General Public License from time to time. Such new
+ versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns.</para>
+
+ <para>Each version is given a distinguishing version number. If the
+ Program specifies a version number of this License which applies to it
+ and "any later version", you have the option of following the terms and
+ conditions either of that version or of any later version published by
+ the Free Software Foundation. If the Program does not specify a version
+ number of this License, you may choose any version ever published by the
+ Free Software Foundation.</para>
+
+ <para>10. If you wish to incorporate parts of the Program into other
+ free programs whose distribution conditions are different, write to the
+ author to ask for permission. For software which is copyrighted by the
+ Free Software Foundation, write to the Free Software Foundation; we
+ sometimes make exceptions for this. Our decision will be guided by the
+ two goals of preserving the free status of all derivatives of our free
+ software and of promoting the sharing and reuse of software
+ generally.</para>
+
+ <para>NO WARRANTY</para>
+
+ <para>11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
+ WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+ EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+ OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND,
+ EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
+ ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH
+ YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
+ NECESSARY SERVICING, REPAIR OR CORRECTION.</para>
+
+ <para>12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+ WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+ AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
+ DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL
+ DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM
+ (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED
+ INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF
+ THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR
+ OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</para>
+
+ <para>END OF TERMS AND CONDITIONS</para>
+ </sect2>
+
+ <sect2 id="licLGPL">
+ <title>GNU Lesser General Public License (LGPL)</title>
+
+ <para>GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February
+ 1999</para>
+
+ <para>Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple
+ Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to
+ copy and distribute verbatim copies of this license document, but
+ changing it is not allowed.</para>
+
+ <para>[This is the first released version of the Lesser GPL. It also
+ counts as the successor of the GNU Library Public License, version 2,
+ hence the version number 2.1.]</para>
+
+ <para>Preamble</para>
+
+ <para>The licenses for most software are designed to take away your
+ freedom to share and change it. By contrast, the GNU General Public
+ Licenses are intended to guarantee your freedom to share and change free
+ software--to make sure the software is free for all its users.</para>
+
+ <para>This license, the Lesser General Public License, applies to some
+ specially designated software packages--typically libraries--of the Free
+ Software Foundation and other authors who decide to use it. You can use
+ it too, but we suggest you first think carefully about whether this
+ license or the ordinary General Public License is the better strategy to
+ use in any particular case, based on the explanations below.</para>
+
+ <para>When we speak of free software, we are referring to freedom of
+ use, not price. Our General Public Licenses are designed to make sure
+ that you have the freedom to distribute copies of free software (and
+ charge for this service if you wish); that you receive source code or
+ can get it if you want it; that you can change the software and use
+ pieces of it in new free programs; and that you are informed that you
+ can do these things.</para>
+
+ <para>To protect your rights, we need to make restrictions that forbid
+ distributors to deny you these rights or to ask you to surrender these
+ rights. These restrictions translate to certain responsibilities for you
+ if you distribute copies of the library or if you modify it.</para>
+
+ <para>For example, if you distribute copies of the library, whether
+ gratis or for a fee, you must give the recipients all the rights that we
+ gave you. You must make sure that they, too, receive or can get the
+ source code. If you link other code with the library, you must provide
+ complete object files to the recipients, so that they can relink them
+ with the library after making changes to the library and recompiling it.
+ And you must show them these terms so they know their rights.</para>
+
+ <para>We protect your rights with a two-step method: (1) we copyright
+ the library, and (2) we offer you this license, which gives you legal
+ permission to copy, distribute and/or modify the library.</para>
+
+ <para>To protect each distributor, we want to make it very clear that
+ there is no warranty for the free library. Also, if the library is
+ modified by someone else and passed on, the recipients should know that
+ what they have is not the original version, so that the original
+ author's reputation will not be affected by problems that might be
+ introduced by others.</para>
+
+ <para>Finally, software patents pose a constant threat to the existence
+ of any free program. We wish to make sure that a company cannot
+ effectively restrict the users of a free program by obtaining a
+ restrictive license from a patent holder. Therefore, we insist that any
+ patent license obtained for a version of the library must be consistent
+ with the full freedom of use specified in this license.</para>
+
+ <para>Most GNU software, including some libraries, is covered by the
+ ordinary GNU General Public License. This license, the GNU Lesser
+ General Public License, applies to certain designated libraries, and is
+ quite different from the ordinary General Public License. We use this
+ license for certain libraries in order to permit linking those libraries
+ into non-free programs.</para>
+
+ <para>When a program is linked with a library, whether statically or
+ using a shared library, the combination of the two is legally speaking a
+ combined work, a derivative of the original library. The ordinary
+ General Public License therefore permits such linking only if the entire
+ combination fits its criteria of freedom. The Lesser General Public
+ License permits more lax criteria for linking other code with the
+ library.</para>
+
+ <para>We call this license the "Lesser" General Public License because
+ it does Less to protect the user's freedom than the ordinary General
+ Public License. It also provides other free software developers Less of
+ an advantage over competing non-free programs. These disadvantages are
+ the reason we use the ordinary General Public License for many
+ libraries. However, the Lesser license provides advantages in certain
+ special circumstances.</para>
+
+ <para>For example, on rare occasions, there may be a special need to
+ encourage the widest possible use of a certain library, so that it
+ becomes a de-facto standard. To achieve this, non-free programs must be
+ allowed to use the library. A more frequent case is that a free library
+ does the same job as widely used non-free libraries. In this case, there
+ is little to gain by limiting the free library to free software only, so
+ we use the Lesser General Public License.</para>
+
+ <para>In other cases, permission to use a particular library in non-free
+ programs enables a greater number of people to use a large body of free
+ software. For example, permission to use the GNU C Library in non-free
+ programs enables many more people to use the whole GNU operating system,
+ as well as its variant, the GNU/Linux operating system.</para>
+
+ <para>Although the Lesser General Public License is Less protective of
+ the users' freedom, it does ensure that the user of a program that is
+ linked with the Library has the freedom and the wherewithal to run that
+ program using a modified version of the Library.</para>
+
+ <para>The precise terms and conditions for copying, distribution and
+ modification follow. Pay close attention to the difference between a
+ "work based on the library" and a "work that uses the library". The
+ former contains code derived from the library, whereas the latter must
+ be combined with the library in order to run.</para>
+
+ <para>GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR
+ COPYING, DISTRIBUTION AND MODIFICATION</para>
+
+ <para>0. This License Agreement applies to any software library or other
+ program which contains a notice placed by the copyright holder or other
+ authorized party saying it may be distributed under the terms of this
+ Lesser General Public License (also called "this License"). Each
+ licensee is addressed as "you".</para>
+
+ <para>A "library" means a collection of software functions and/or data
+ prepared so as to be conveniently linked with application programs
+ (which use some of those functions and data) to form executables.</para>
+
+ <para>The "Library", below, refers to any such software library or work
+ which has been distributed under these terms. A "work based on the
+ Library" means either the Library or any derivative work under copyright
+ law: that is to say, a work containing the Library or a portion of it,
+ either verbatim or with modifications and/or translated
+ straightforwardly into another language. (Hereinafter, translation is
+ included without limitation in the term "modification".)</para>
+
+ <para>"Source code" for a work means the preferred form of the work for
+ making modifications to it. For a library, complete source code means
+ all the source code for all modules it contains, plus any associated
+ interface definition files, plus the scripts used to control compilation
+ and installation of the library.</para>
+
+ <para>Activities other than copying, distribution and modification are
+ not covered by this License; they are outside its scope. The act of
+ running a program using the Library is not restricted, and output from
+ such a program is covered only if its contents constitute a work based
+ on the Library (independent of the use of the Library in a tool for
+ writing it). Whether that is true depends on what the Library does and
+ what the program that uses the Library does.</para>
+
+ <para>1. You may copy and distribute verbatim copies of the Library's
+ complete source code as you receive it, in any medium, provided that you
+ conspicuously and appropriately publish on each copy an appropriate
+ copyright notice and disclaimer of warranty; keep intact all the notices
+ that refer to this License and to the absence of any warranty; and
+ distribute a copy of this License along with the Library.</para>
+
+ <para>You may charge a fee for the physical act of transferring a copy,
+ and you may at your option offer warranty protection in exchange for a
+ fee.</para>
+
+ <para>2. You may modify your copy or copies of the Library or any
+ portion of it, thus forming a work based on the Library, and copy and
+ distribute such modifications or work under the terms of Section 1
+ above, provided that you also meet all of these conditions:</para>
+
+ <para>a) The modified work must itself be a software library.</para>
+
+ <para>b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.</para>
+
+ <para>c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.</para>
+
+ <para>d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses the
+ facility, other than as an argument passed when the facility is invoked,
+ then you must make a good faith effort to ensure that, in the event an
+ application does not supply such function or table, the facility still
+ operates, and performs whatever part of its purpose remains
+ meaningful.</para>
+
+ <para>(For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the application.
+ Therefore, Subsection 2d requires that any application-supplied function
+ or table used by this function must be optional: if the application does
+ not supply it, the square root function must still compute square
+ roots.)</para>
+
+ <para>These requirements apply to the modified work as a whole. If
+ identifiable sections of that work are not derived from the Library, and
+ can be reasonably considered independent and separate works in
+ themselves, then this License, and its terms, do not apply to those
+ sections when you distribute them as separate works. But when you
+ distribute the same sections as part of a whole which is a work based on
+ the Library, the distribution of the whole must be on the terms of this
+ License, whose permissions for other licensees extend to the entire
+ whole, and thus to each and every part regardless of who wrote
+ it.</para>
+
+ <para>Thus, it is not the intent of this section to claim rights or
+ contest your rights to work written entirely by you; rather, the intent
+ is to exercise the right to control the distribution of derivative or
+ collective works based on the Library.</para>
+
+ <para>In addition, mere aggregation of another work not based on the
+ Library with the Library (or with a work based on the Library) on a
+ volume of a storage or distribution medium does not bring the other work
+ under the scope of this License.</para>
+
+ <para>3. You may opt to apply the terms of the ordinary GNU General
+ Public License instead of this License to a given copy of the Library.
+ To do this, you must alter all the notices that refer to this License,
+ so that they refer to the ordinary GNU General Public License, version
+ 2, instead of to this License. (If a newer version than version 2 of the
+ ordinary GNU General Public License has appeared, then you can specify
+ that version instead if you wish.) Do not make any other change in these
+ notices.</para>
+
+ <para>Once this change is made in a given copy, it is irreversible for
+ that copy, so the ordinary GNU General Public License applies to all
+ subsequent copies and derivative works made from that copy.</para>
+
+ <para>This option is useful when you wish to copy part of the code of
+ the Library into a program that is not a library.</para>
+
+ <para>4. You may copy and distribute the Library (or a portion or
+ derivative of it, under Section 2) in object code or executable form
+ under the terms of Sections 1 and 2 above provided that you accompany it
+ with the complete corresponding machine-readable source code, which must
+ be distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange.</para>
+
+ <para>If distribution of object code is made by offering access to copy
+ from a designated place, then offering equivalent access to copy the
+ source code from the same place satisfies the requirement to distribute
+ the source code, even though third parties are not compelled to copy the
+ source along with the object code.</para>
+
+ <para>5. A program that contains no derivative of any portion of the
+ Library, but is designed to work with the Library by being compiled or
+ linked with it, is called a "work that uses the Library". Such a work,
+ in isolation, is not a derivative work of the Library, and therefore
+ falls outside the scope of this License.</para>
+
+ <para>However, linking a "work that uses the Library" with the Library
+ creates an executable that is a derivative of the Library (because it
+ contains portions of the Library), rather than a "work that uses the
+ library". The executable is therefore covered by this License. Section 6
+ states terms for distribution of such executables.</para>
+
+ <para>When a "work that uses the Library" uses material from a header
+ file that is part of the Library, the object code for the work may be a
+ derivative work of the Library even though the source code is not.
+ Whether this is true is especially significant if the work can be linked
+ without the Library, or if the work is itself a library. The threshold
+ for this to be true is not precisely defined by law.</para>
+
+ <para>If such an object file uses only numerical parameters, data
+ structure layouts and accessors, and small macros and small inline
+ functions (ten lines or less in length), then the use of the object file
+ is unrestricted, regardless of whether it is legally a derivative work.
+ (Executables containing this object code plus portions of the Library
+ will still fall under Section 6.) Otherwise, if the work is a derivative
+ of the Library, you may distribute the object code for the work under
+ the terms of Section 6. Any executables containing that work also fall
+ under Section 6, whether or not they are linked directly with the
+ Library itself.</para>
+
+ <para>6. As an exception to the Sections above, you may also combine or
+ link a "work that uses the Library" with the Library to produce a work
+ containing portions of the Library, and distribute that work under terms
+ of your choice, provided that the terms permit modification of the work
+ for the customer's own use and reverse engineering for debugging such
+ modifications.</para>
+
+ <para>You must give prominent notice with each copy of the work that the
+ Library is used in it and that the Library and its use are covered by
+ this License. You must supply a copy of this License. If the work during
+ execution displays copyright notices, you must include the copyright
+ notice for the Library among them, as well as a reference directing the
+ user to the copy of this License. Also, you must do one of these
+ things:</para>
+
+ <para>a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever changes
+ were used in the work (which must be distributed under Sections 1 and 2
+ above); and, if the work is an executable linked with the Library, with
+ the complete machine-readable "work that uses the Library", as object
+ code and/or source code, so that the user can modify the Library and
+ then relink to produce a modified executable containing the modified
+ Library. (It is understood that the user who changes the contents of
+ definitions files in the Library will not necessarily be able to
+ recompile the application to use the modified definitions.)</para>
+
+ <para>b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a copy of
+ the library already present on the user's computer system, rather than
+ copying library functions into the executable, and (2) will operate
+ properly with a modified version of the library, if the user installs
+ one, as long as the modified version is interface-compatible with the
+ version that the work was made with.</para>
+
+ <para>c) Accompany the work with a written offer, valid for at least
+ three years, to give the same user the materials specified in Subsection
+ 6a, above, for a charge no more than the cost of performing this
+ distribution.</para>
+
+ <para>d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.</para>
+
+ <para>e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.</para>
+
+ <para>For an executable, the required form of the "work that uses the
+ Library" must include any data and utility programs needed for
+ reproducing the executable from it. However, as a special exception, the
+ materials to be distributed need not include anything that is normally
+ distributed (in either source or binary form) with the major components
+ (compiler, kernel, and so on) of the operating system on which the
+ executable runs, unless that component itself accompanies the
+ executable.</para>
+
+ <para>It may happen that this requirement contradicts the license
+ restrictions of other proprietary libraries that do not normally
+ accompany the operating system. Such a contradiction means you cannot
+ use both them and the Library together in an executable that you
+ distribute.</para>
+
+ <para>7. You may place library facilities that are a work based on the
+ Library side-by-side in a single library together with other library
+ facilities not covered by this License, and distribute such a combined
+ library, provided that the separate distribution of the work based on
+ the Library and of the other library facilities is otherwise permitted,
+ and provided that you do these two things:</para>
+
+ <para>a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library facilities. This
+ must be distributed under the terms of the Sections above.</para>
+
+ <para>b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining where to
+ find the accompanying uncombined form of the same work.</para>
+
+ <para>8. You may not copy, modify, sublicense, link with, or distribute
+ the Library except as expressly provided under this License. Any attempt
+ otherwise to copy, modify, sublicense, link with, or distribute the
+ Library is void, and will automatically terminate your rights under this
+ License. However, parties who have received copies, or rights, from you
+ under this License will not have their licenses terminated so long as
+ such parties remain in full compliance.</para>
+
+ <para>9. You are not required to accept this License, since you have not
+ signed it. However, nothing else grants you permission to modify or
+ distribute the Library or its derivative works. These actions are
+ prohibited by law if you do not accept this License. Therefore, by
+ modifying or distributing the Library (or any work based on the
+ Library), you indicate your acceptance of this License to do so, and all
+ its terms and conditions for copying, distributing or modifying the
+ Library or works based on it.</para>
+
+ <para>10. Each time you redistribute the Library (or any work based on
+ the Library), the recipient automatically receives a license from the
+ original licensor to copy, distribute, link with or modify the Library
+ subject to these terms and conditions. You may not impose any further
+ restrictions on the recipients' exercise of the rights granted herein.
+ You are not responsible for enforcing compliance by third parties with
+ this License.</para>
+
+ <para>11. If, as a consequence of a court judgment or allegation of
+ patent infringement or for any other reason (not limited to patent
+ issues), conditions are imposed on you (whether by court order,
+ agreement or otherwise) that contradict the conditions of this License,
+ they do not excuse you from the conditions of this License. If you
+ cannot distribute so as to satisfy simultaneously your obligations under
+ this License and any other pertinent obligations, then as a consequence
+ you may not distribute the Library at all. For example, if a patent
+ license would not permit royalty-free redistribution of the Library by
+ all those who receive copies directly or indirectly through you, then
+ the only way you could satisfy both it and this License would be to
+ refrain entirely from distribution of the Library.</para>
+
+ <para>If any portion of this section is held invalid or unenforceable
+ under any particular circumstance, the balance of the section is
+ intended to apply, and the section as a whole is intended to apply in
+ other circumstances.</para>
+
+ <para>It is not the purpose of this section to induce you to infringe
+ any patents or other property right claims or to contest validity of any
+ such claims; this section has the sole purpose of protecting the
+ integrity of the free software distribution system which is implemented
+ by public license practices. Many people have made generous
+ contributions to the wide range of software distributed through that
+ system in reliance on consistent application of that system; it is up to
+ the author/donor to decide if he or she is willing to distribute
+ software through any other system and a licensee cannot impose that
+ choice.</para>
+
+ <para>This section is intended to make thoroughly clear what is believed
+ to be a consequence of the rest of this License.</para>
+
+ <para>12. If the distribution and/or use of the Library is restricted in
+ certain countries either by patents or by copyrighted interfaces, the
+ original copyright holder who places the Library under this License may
+ add an explicit geographical distribution limitation excluding those
+ countries, so that distribution is permitted only in or among countries
+ not thus excluded. In such case, this License incorporates the
+ limitation as if written in the body of this License.</para>
+
+ <para>13. The Free Software Foundation may publish revised and/or new
+ versions of the Lesser General Public License from time to time. Such
+ new versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns.</para>
+
+ <para>Each version is given a distinguishing version number. If the
+ Library specifies a version number of this License which applies to it
+ and "any later version", you have the option of following the terms and
+ conditions either of that version or of any later version published by
+ the Free Software Foundation. If the Library does not specify a license
+ version number, you may choose any version ever published by the Free
+ Software Foundation.</para>
+
+ <para>14. If you wish to incorporate parts of the Library into other
+ free programs whose distribution conditions are incompatible with these,
+ write to the author to ask for permission. For software which is
+ copyrighted by the Free Software Foundation, write to the Free Software
+ Foundation; we sometimes make exceptions for this. Our decision will be
+ guided by the two goals of preserving the free status of all derivatives
+ of our free software and of promoting the sharing and reuse of software
+ generally.</para>
+
+ <para>NO WARRANTY</para>
+
+ <para>15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+ WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+ EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+ OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND,
+ EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
+ ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH
+ YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
+ NECESSARY SERVICING, REPAIR OR CORRECTION.</para>
+
+ <para>16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+ WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+ AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
+ DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL
+ DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY
+ (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED
+ INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF
+ THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR
+ OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</para>
+
+ <para>END OF TERMS AND CONDITIONS</para>
+ </sect2>
+
+ <sect2 id="licMPL">
+ <title>Mozilla Public License (MPL)</title>
+
+ <para>MOZILLA PUBLIC LICENSE Version 1.1</para>
+
+ <para>1. Definitions.</para>
+
+ <para>1.0.1. "Commercial Use" means distribution or otherwise making the
+ Covered Code available to a third party.</para>
+
+ <para>1.1. "Contributor" means each entity that creates or contributes
+ to the creation of Modifications.</para>
+
+ <para>1.2. "Contributor Version" means the combination of the Original
+ Code, prior Modifications used by a Contributor, and the Modifications
+ made by that particular Contributor.</para>
+
+ <para>1.3. "Covered Code" means the Original Code or Modifications or
+ the combination of the Original Code and Modifications, in each case
+ including portions thereof.</para>
+
+ <para>1.4. "Electronic Distribution Mechanism" means a mechanism
+ generally accepted in the software development community for the
+ electronic transfer of data.</para>
+
+ <para>1.5. "Executable" means Covered Code in any form other than Source
+ Code.</para>
+
+ <para>1.6. "Initial Developer" means the individual or entity identified
+ as the Initial Developer in the Source Code notice required by Exhibit
+ A.</para>
+
+ <para>1.7. "Larger Work" means a work which combines Covered Code or
+ portions thereof with code not governed by the terms of this
+ License.</para>
+
+ <para>1.8. "License" means this document.</para>
+
+ <para>1.8.1. "Licensable" means having the right to grant, to the
+ maximum extent possible, whether at the time of the initial grant or
+ subsequently acquired, any and all of the rights conveyed herein.</para>
+
+ <para>1.9. "Modifications" means any addition to or deletion from the
+ substance or structure of either the Original Code or any previous
+ Modifications. When Covered Code is released as a series of files, a
+ Modification is:</para>
+
+ <para>A. Any addition to or deletion from the contents of a file
+ containing Original Code or previous Modifications.</para>
+
+ <para>B. Any new file that contains any part of the Original Code or
+ previous Modifications.</para>
+
+ <para>1.10. "Original Code" means Source Code of computer software code
+ which is described in the Source Code notice required by Exhibit A as
+ Original Code, and which, at the time of its release under this License
+ is not already Covered Code governed by this License.</para>
+
+ <para>1.10.1. "Patent Claims" means any patent claim(s), now owned or
+ hereafter acquired, including without limitation, method, process, and
+ apparatus claims, in any patent Licensable by grantor.</para>
+
+ <para>1.11. "Source Code" means the preferred form of the Covered Code
+ for making modifications to it, including all modules it contains, plus
+ any associated interface definition files, scripts used to control
+ compilation and installation of an Executable, or source code
+ differential comparisons against either the Original Code or another
+ well known, available Covered Code of the Contributor's choice. The
+ Source Code can be in a compressed or archival form, provided the
+ appropriate decompression or de-archiving software is widely available
+ for no charge.</para>
+
+ <para>1.12. "You" (or "Your") means an individual or a legal entity
+ exercising rights under, and complying with all of the terms of, this
+ License or a future version of this License issued under Section 6.1.
+ For legal entities, "You" includes any entity which controls, is
+ controlled by, or is under common control with You. For purposes of this
+ definition, "control" means (a) the power, direct or indirect, to cause
+ the direction or management of such entity, whether by contract or
+ otherwise, or (b) ownership of more than fifty percent (50%) of the
+ outstanding shares or beneficial ownership of such entity.</para>
+
+ <para>2. Source Code License.</para>
+
+ <para>2.1. The Initial Developer Grant. The Initial Developer hereby
+ grants You a world-wide, royalty-free, non-exclusive license, subject to
+ third party intellectual property claims:</para>
+
+ <para>(a) under intellectual property rights (other than patent or
+ trademark) Licensable by Initial Developer to use, reproduce, modify,
+ display, perform, sublicense and distribute the Original Code (or
+ portions thereof) with or without Modifications, and/or as part of a
+ Larger Work; and</para>
+
+ <para>(b) under Patents Claims infringed by the making, using or selling
+ of Original Code, to make, have made, use, practice, sell, and offer for
+ sale, and/or otherwise dispose of the Original Code (or portions
+ thereof).</para>
+
+ <para>(c) the licenses granted in this Section 2.1(a) and (b) are
+ effective on the date Initial Developer first distributes Original Code
+ under the terms of this License.</para>
+
+ <para>(d) Notwithstanding Section 2.1(b) above, no patent license is
+ granted: 1) for code that You delete from the Original Code; 2) separate
+ from the Original Code; or 3) for infringements caused by: i) the
+ modification of the Original Code or ii) the combination of the Original
+ Code with other software or devices.</para>
+
+ <para>2.2. Contributor Grant. Subject to third party intellectual
+ property claims, each Contributor hereby grants You a world-wide,
+ royalty-free, non-exclusive license</para>
+
+ <para>(a) under intellectual property rights (other than patent or
+ trademark) Licensable by Contributor, to use, reproduce, modify,
+ display, perform, sublicense and distribute the Modifications created by
+ such Contributor (or portions thereof) either on an unmodified basis,
+ with other Modifications, as Covered Code and/or as part of a Larger
+ Work; and</para>
+
+ <para>(b) under Patent Claims infringed by the making, using, or selling
+ of Modifications made by that Contributor either alone and/or in
+ combination with its Contributor Version (or portions of such
+ combination), to make, use, sell, offer for sale, have made, and/or
+ otherwise dispose of: 1) Modifications made by that Contributor (or
+ portions thereof); and 2) the combination of Modifications made by that
+ Contributor with its Contributor Version (or portions of such
+ combination).</para>
+
+ <para>(c) the licenses granted in Sections 2.2(a) and 2.2(b) are
+ effective on the date Contributor first makes Commercial Use of the
+ Covered Code.</para>
+
+ <para>(d) Notwithstanding Section 2.2(b) above, no patent license is
+ granted: 1) for any code that Contributor has deleted from the
+ Contributor Version; 2) separate from the Contributor Version; 3) for
+ infringements caused by: i) third party modifications of Contributor
+ Version or ii) the combination of Modifications made by that Contributor
+ with other software (except as part of the Contributor Version) or other
+ devices; or 4) under Patent Claims infringed by Covered Code in the
+ absence of Modifications made by that Contributor.</para>
+
+ <para>3. Distribution Obligations.</para>
+
+ <para>3.1. Application of License. The Modifications which You create or
+ to which You contribute are governed by the terms of this License,
+ including without limitation Section 2.2. The Source Code version of
+ Covered Code may be distributed only under the terms of this License or
+ a future version of this License released under Section 6.1, and You
+ must include a copy of this License with every copy of the Source Code
+ You distribute. You may not offer or impose any terms on any Source Code
+ version that alters or restricts the applicable version of this License
+ or the recipients' rights hereunder. However, You may include an
+ additional document offering the additional rights described in Section
+ 3.5.</para>
+
+ <para>3.2. Availability of Source Code. Any Modification which You
+ create or to which You contribute must be made available in Source Code
+ form under the terms of this License either on the same media as an
+ Executable version or via an accepted Electronic Distribution Mechanism
+ to anyone to whom you made an Executable version available; and if made
+ available via Electronic Distribution Mechanism, must remain available
+ for at least twelve (12) months after the date it initially became
+ available, or at least six (6) months after a subsequent version of that
+ particular Modification has been made available to such recipients. You
+ are responsible for ensuring that the Source Code version remains
+ available even if the Electronic Distribution Mechanism is maintained by
+ a third party.</para>
+
+ <para>3.3. Description of Modifications. You must cause all Covered Code
+ to which You contribute to contain a file documenting the changes You
+ made to create that Covered Code and the date of any change. You must
+ include a prominent statement that the Modification is derived, directly
+ or indirectly, from Original Code provided by the Initial Developer and
+ including the name of the Initial Developer in (a) the Source Code, and
+ (b) in any notice in an Executable version or related documentation in
+ which You describe the origin or ownership of the Covered Code.</para>
+
+ <para>3.4. Intellectual Property Matters</para>
+
+ <para>(a) Third Party Claims. If Contributor has knowledge that a
+ license under a third party's intellectual property rights is required
+ to exercise the rights granted by such Contributor under Sections 2.1 or
+ 2.2, Contributor must include a text file with the Source Code
+ distribution titled "LEGAL" which describes the claim and the party
+ making the claim in sufficient detail that a recipient will know whom to
+ contact. If Contributor obtains such knowledge after the Modification is
+ made available as described in Section 3.2, Contributor shall promptly
+ modify the LEGAL file in all copies Contributor makes available
+ thereafter and shall take other steps (such as notifying appropriate
+ mailing lists or newsgroups) reasonably calculated to inform those who
+ received the Covered Code that new knowledge has been obtained.</para>
+
+ <para>(b) Contributor APIs. If Contributor's Modifications include an
+ application programming interface and Contributor has knowledge of
+ patent licenses which are reasonably necessary to implement that API,
+ Contributor must also include this information in the LEGAL file.</para>
+
+ <para>3.5. Required Notices. You must duplicate the notice in Exhibit A
+ in each file of the Source Code. If it is not possible to put such
+ notice in a particular Source Code file due to its structure, then You
+ must include such notice in a location (such as a relevant directory)
+ where a user would be likely to look for such a notice. If You created
+ one or more Modification(s) You may add your name as a Contributor to
+ the notice described in Exhibit A. You must also duplicate this License
+ in any documentation for the Source Code where You describe recipients'
+ rights or ownership rights relating to Covered Code. You may choose to
+ offer, and to charge a fee for, warranty, support, indemnity or
+ liability obligations to one or more recipients of Covered Code.
+ However, You may do so only on Your own behalf, and not on behalf of the
+ Initial Developer or any Contributor. You must make it absolutely clear
+ than any such warranty, support, indemnity or liability obligation is
+ offered by You alone, and You hereby agree to indemnify the Initial
+ Developer and every Contributor for any liability incurred by the
+ Initial Developer or such Contributor as a result of warranty, support,
+ indemnity or liability terms You offer.</para>
+
+ <para>3.6. Distribution of Executable Versions. You may distribute
+ Covered Code in Executable form only if the requirements of Section
+ 3.1-3.5 have been met for that Covered Code, and if You include a notice
+ stating that the Source Code version of the Covered Code is available
+ under the terms of this License, including a description of how and
+ where You have fulfilled the obligations of Section 3.2. The notice must
+ be conspicuously included in any notice in an Executable version,
+ related documentation or collateral in which You describe recipients'
+ rights relating to the Covered Code. You may distribute the Executable
+ version of Covered Code or ownership rights under a license of Your
+ choice, which may contain terms different from this License, provided
+ that You are in compliance with the terms of this License and that the
+ license for the Executable version does not attempt to limit or alter
+ the recipient's rights in the Source Code version from the rights set
+ forth in this License. If You distribute the Executable version under a
+ different license You must make it absolutely clear that any terms which
+ differ from this License are offered by You alone, not by the Initial
+ Developer or any Contributor. You hereby agree to indemnify the Initial
+ Developer and every Contributor for any liability incurred by the
+ Initial Developer or such Contributor as a result of any such terms You
+ offer.</para>
+
+ <para>3.7. Larger Works. You may create a Larger Work by combining
+ Covered Code with other code not governed by the terms of this License
+ and distribute the Larger Work as a single product. In such a case, You
+ must make sure the requirements of this License are fulfilled for the
+ Covered Code.</para>
+
+ <para>4. Inability to Comply Due to Statute or Regulation.If it is
+ impossible for You to comply with any of the terms of this License with
+ respect to some or all of the Covered Code due to statute, judicial
+ order, or regulation then You must: (a) comply with the terms of this
+ License to the maximum extent possible; and (b) describe the limitations
+ and the code they affect. Such description must be included in the LEGAL
+ file described in Section 3.4 and must be included with all
+ distributions of the Source Code. Except to the extent prohibited by
+ statute or regulation, such description must be sufficiently detailed
+ for a recipient of ordinary skill to be able to understand it.</para>
+
+ <para>5. Application of this License. This License applies to code to
+ which the Initial Developer has attached the notice in Exhibit A and to
+ related Covered Code.</para>
+
+ <para>6. Versions of the License.</para>
+
+ <para>6.1. New Versions. Netscape Communications Corporation
+ ("Netscape") may publish revised and/or new versions of the License from
+ time to time. Each version will be given a distinguishing version
+ number.</para>
+
+ <para>6.2. Effect of New Versions. Once Covered Code has been published
+ under a particular version of the License, You may always continue to
+ use it under the terms of that version. You may also choose to use such
+ Covered Code under the terms of any subsequent version of the License
+ published by Netscape. No one other than Netscape has the right to
+ modify the terms applicable to Covered Code created under this
+ License.</para>
+
+ <para>6.3. Derivative Works. If You create or use a modified version of
+ this License (which you may only do in order to apply it to code which
+ is not already Covered Code governed by this License), You must (a)
+ rename Your license so that the phrases "Mozilla", "MOZILLAPL", "MOZPL",
+ "Netscape", "MPL", "NPL" or any confusingly similar phrase do not appear
+ in your license (except to note that your license differs from this
+ License) and (b) otherwise make it clear that Your version of the
+ license contains terms which differ from the Mozilla Public License and
+ Netscape Public License. (Filling in the name of the Initial Developer,
+ Original Code or Contributor in the notice described in Exhibit A shall
+ not of themselves be deemed to be modifications of this License.)</para>
+
+ <para>7. DISCLAIMER OF WARRANTY.</para>
+
+ <para>COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS,
+ MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE
+ RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE IS WITH YOU.
+ SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE
+ INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY
+ NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY
+ CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED
+ CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.</para>
+
+ <para>8. TERMINATION.</para>
+
+ <para>8.1. This License and the rights granted hereunder will terminate
+ automatically if You fail to comply with terms herein and fail to cure
+ such breach within 30 days of becoming aware of the breach. All
+ sublicenses to the Covered Code which are properly granted shall survive
+ any termination of this License. Provisions which, by their nature, must
+ remain in effect beyond the termination of this License shall
+ survive.</para>
+
+ <para>8.2. If You initiate litigation by asserting a patent infringement
+ claim (excluding declaratory judgment actions) against Initial Developer
+ or a Contributor (the Initial Developer or Contributor against whom You
+ file such action is referred to as "Participant") alleging that:</para>
+
+ <para>(a) such Participant's Contributor Version directly or indirectly
+ infringes any patent, then any and all rights granted by such
+ Participant to You under Sections 2.1 and/or 2.2 of this License shall,
+ upon 60 days notice from Participant terminate prospectively, unless if
+ within 60 days after receipt of notice You either: (i) agree in writing
+ to pay Participant a mutually agreeable reasonable royalty for Your past
+ and future use of Modifications made by such Participant, or (ii)
+ withdraw Your litigation claim with respect to the Contributor Version
+ against such Participant. If within 60 days of notice, a reasonable
+ royalty and payment arrangement are not mutually agreed upon in writing
+ by the parties or the litigation claim is not withdrawn, the rights
+ granted by Participant to You under Sections 2.1 and/or 2.2
+ automatically terminate at the expiration of the 60 day notice period
+ specified above.</para>
+
+ <para>(b) any software, hardware, or device, other than such
+ Participant's Contributor Version, directly or indirectly infringes any
+ patent, then any rights granted to You by such Participant under
+ Sections 2.1(b) and 2.2(b) are revoked effective as of the date You
+ first made, used, sold, distributed, or had made, Modifications made by
+ that Participant.</para>
+
+ <para>8.3. If You assert a patent infringement claim against Participant
+ alleging that such Participant's Contributor Version directly or
+ indirectly infringes any patent where such claim is resolved (such as by
+ license or settlement) prior to the initiation of patent infringement
+ litigation, then the reasonable value of the licenses granted by such
+ Participant under Sections 2.1 or 2.2 shall be taken into account in
+ determining the amount or value of any payment or license.</para>
+
+ <para>8.4. In the event of termination under Sections 8.1 or 8.2 above,
+ all end user license agreements (excluding distributors and resellers)
+ which have been validly granted by You or any distributor hereunder
+ prior to termination shall survive termination.</para>
+
+ <para>9. LIMITATION OF LIABILITY. UNDER NO CIRCUMSTANCES AND UNDER NO
+ LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR
+ OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR
+ ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES,
+ BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR
+ CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION,
+ DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR
+ MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF
+ SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES.
+ THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR
+ PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT
+ APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT
+ ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL
+ DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.</para>
+
+ <para>10. U.S. GOVERNMENT END USERS. The Covered Code is a "commercial
+ item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995),
+ consisting of "commercial computer software" and "commercial computer
+ software documentation," as such terms are used in 48 C.F.R. 12.212
+ (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1
+ through 227.7202-4 (June 1995), all U.S. Government End Users acquire
+ Covered Code with only those rights set forth herein.</para>
+
+ <para>11. MISCELLANEOUS. This License represents the complete agreement
+ concerning subject matter hereof. If any provision of this License is
+ held to be unenforceable, such provision shall be reformed only to the
+ extent necessary to make it enforceable. This License shall be governed
+ by California law provisions (except to the extent applicable law, if
+ any, provides otherwise), excluding its conflict-of-law provisions. With
+ respect to disputes in which at least one party is a citizen of, or an
+ entity chartered or registered to do business in the United States of
+ America, any litigation relating to this License shall be subject to the
+ jurisdiction of the Federal Courts of the Northern District of
+ California, with venue lying in Santa Clara County, California, with the
+ losing party responsible for costs, including without limitation, court
+ costs and reasonable attorneys' fees and expenses. The application of
+ the United Nations Convention on Contracts for the International Sale of
+ Goods is expressly excluded. Any law or regulation which provides that
+ the language of a contract shall be construed against the drafter shall
+ not apply to this License.</para>
+
+ <para>12. RESPONSIBILITY FOR CLAIMS. As between Initial Developer and
+ the Contributors, each party is responsible for claims and damages
+ arising, directly or indirectly, out of its utilization of rights under
+ this License and You agree to work with Initial Developer and
+ Contributors to distribute such responsibility on an equitable basis.
+ Nothing herein is intended or shall be deemed to constitute any
+ admission of liability.</para>
+
+ <para>13. MULTIPLE-LICENSED CODE. Initial Developer may designate
+ portions of the Covered Code as "Multiple-Licensed". "Multiple-Licensed"
+ means that the Initial Developer permits you to utilize portions of the
+ Covered Code under Your choice of the NPL or the alternative licenses,
+ if any, specified by the Initial Developer in the file described in
+ Exhibit A.</para>
+
+ <para>EXHIBIT A -Mozilla Public License.</para>
+
+ <para>``The contents of this file are subject to the Mozilla Public
+ License Version 1.1 (the "License"); you may not use this file except in
+ compliance with the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/</para>
+
+ <para>Software distributed under the License is distributed on an "AS
+ IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ the License for the specific language governing rights and limitations
+ under the License.</para>
+
+ <para>The Original Code is
+ ______________________________________.</para>
+
+ <para>The Initial Developer of the Original Code is
+ ________________________. Portions created by ______________________ are
+ Copyright (C) ______ _______________________. All Rights
+ Reserved.</para>
+
+ <para>Contributor(s): ______________________________________.</para>
+
+ <para>Alternatively, the contents of this file may be used under the
+ terms of the _____ license (the "[___] License"), in which case the
+ provisions of [______] License are applicable instead of those above. If
+ you wish to allow use of your version of this file only under the terms
+ of the [____] License and not to allow others to use your version of
+ this file under the MPL, indicate your decision by deleting the
+ provisions above and replace them with the notice and other provisions
+ required by the [___] License. If you do not delete the provisions
+ above, a recipient may use your version of this file under either the
+ MPL or the [___] License."</para>
+
+ <para>[NOTE: The text of this Exhibit A may differ slightly from the
+ text of the notices in the Source Code files of the Original Code. You
+ should use the text of this Exhibit A rather than the text found in the
+ Original Code Source Code for Your Modifications.]</para>
+ </sect2>
+
+ <sect2 id="licMIT">
+ <title>MIT License</title>
+
+ <para>Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation files
+ (the "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:</para>
+
+ <para>The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.</para>
+
+ <para>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</para>
+ </sect2>
+
+ <sect2 id="licX11">
+ <title>X Consortium License (X11)</title>
+
+ <para>Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation files
+ (the "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:</para>
+
+ <para>The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.</para>
+
+ <para>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</para>
+ </sect2>
+
+ <sect2 id="licZLIB">
+ <title>zlib license</title>
+
+ <para>This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.</para>
+
+ <para>Permission is granted to anyone to use this software for any
+ purpose, including commercial applications, and to alter it and
+ redistribute it freely, subject to the following restrictions:</para>
+
+ <para>1. The origin of this software must not be misrepresented; you
+ must not claim that you wrote the original software. If you use this
+ software in a product, an acknowledgment in the product documentation
+ would be appreciated but is not required.</para>
+
+ <para>2. Altered source versions must be plainly marked as such, and
+ must not be misrepresented as being the original software.</para>
+
+ <para>3. This notice may not be removed or altered from any source
+ distribution.</para>
+
+ <screen>Jean-loup Gailly Mark Adler
+jloup@gzip.org madler@alumni.caltech.edu</screen>
+ </sect2>
+
+ <sect2 id="licSSL">
+ <title>OpenSSL license</title>
+
+ <para>This package is an SSL implementation written by Eric Young
+ (eay@cryptsoft.com). The implementation was written so as to conform
+ with Netscape's SSL.</para>
+
+ <para>This library is free for commercial and non-commercial use as long
+ as the following conditions are adhered to. The following conditions
+ apply to all code found in this distribution, be it the RC4, RSA, lhash,
+ DES, etc., code; not just the SSL code. The SSL documentation included
+ with this distribution is covered by the same copyright terms except
+ that the holder is Tim Hudson (tjh@cryptsoft.com).</para>
+
+ <para>Copyright remains Eric Young's, and as such any Copyright notices
+ in the code are not to be removed. If this package is used in a product,
+ Eric Young should be given attribution as the author of the parts of the
+ library used. This can be in the form of a textual message at program
+ startup or in documentation (online or textual) provided with the
+ package.</para>
+
+ <para>Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:</para>
+
+ <para>1. Redistributions of source code must retain the copyright
+ notice, this list of conditions and the following disclaimer.</para>
+
+ <para>2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following disclaimer
+ in the documentation and/or other materials provided with the
+ distribution.</para>
+
+ <para>3. All advertising materials mentioning features or use of this
+ software must display the following acknowledgement: "This product
+ includes cryptographic software written by Eric Young
+ (eay@cryptsoft.com)" The word 'cryptographic' can be left out if the
+ routines from the library being used are not cryptographic related
+ :-).</para>
+
+ <para>4. If you include any Windows specific code (or a derivative
+ thereof) from the apps directory (application code) you must include an
+ acknowledgement: "This product includes software written by Tim Hudson
+ (tjh@cryptsoft.com)"</para>
+
+ <para>THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.</para>
+
+ <para>The licence and distribution terms for any publicly available
+ version or derivative of this code cannot be changed. i.e. this code
+ cannot simply be copied and put under another distribution licence
+ [including the GNU Public Licence.]</para>
+ </sect2>
+
+ <sect2 id="licSlirp">
+ <title>Slirp license</title>
+
+ <para>Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:</para>
+
+ <para>1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.</para>
+
+ <para>2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following disclaimer
+ in the documentation and/or other materials provided with the
+ distribution.</para>
+
+ <para>3. All advertising materials mentioning features or use of this
+ software must display the following acknowledgment: This product
+ includes software developed by Danny Gasparovski.</para>
+
+ <para>THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+ NO EVENT SHALL DANNY GASPAROVSKI OR CONTRIBUTORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.</para>
+ </sect2>
+
+ <sect2 id="licLZF">
+ <title>liblzf license</title>
+
+ <para>Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:</para>
+
+ <para>1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.</para>
+
+ <para>2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following disclaimer
+ in the documentation and/or other materials provided with the
+ distribution.</para>
+
+ <para>3. The name of the author may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.</para>
+
+ <para>THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.</para>
+ </sect2>
+
+ <sect2>
+ <title>libpng license</title>
+
+ <para>The PNG Reference Library is supplied "AS IS". The Contributing
+ Authors and Group 42, Inc. disclaim all warranties, expressed or
+ implied, including, without limitation, the warranties of
+ merchantability and of fitness for any purpose. The Contributing Authors
+ and Group 42, Inc. assume no liability for direct, indirect, incidental,
+ special, exemplary, or consequential damages, which may result from the
+ use of the PNG Reference Library, even if advised of the possibility of
+ such damage.</para>
+
+ <para>Permission is hereby granted to use, copy, modify, and distribute
+ this source code, or portions hereof, for any purpose, without fee,
+ subject to the following restrictions:</para>
+
+ <para>1. The origin of this source code must not be
+ misrepresented.</para>
+
+ <para>2. Altered versions must be plainly marked as such and must not be
+ misrepresented as being the original source.</para>
+
+ <para>3. This Copyright notice may not be removed or altered from any
+ source or altered source distribution.</para>
+
+ <para>The Contributing Authors and Group 42, Inc. specifically permit,
+ without fee, and encourage the use of this source code as a component to
+ supporting the PNG file format in commercial products. If you use this
+ source code in a product, acknowledgment is not required but would be
+ appreciated.</para>
+ </sect2>
+
+ <sect2 id="licLWIP">
+ <title>lwIP license</title>
+
+ <para>Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:</para>
+
+ <para>1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.</para>
+
+ <para>2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following disclaimer
+ in the documentation and/or other materials provided with the
+ distribution.</para>
+
+ <para>3. The name of the author may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.</para>
+
+ <para>THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.</para>
+ </sect2>
+
+ <sect2 id="licLibXML">
+ <title>libxml license</title>
+
+ <para>Except where otherwise noted in the source code (e.g. the files
+ hash.c, list.c and the trio files, which are covered by a similar
+ licence but with different Copyright notices) all the files are:</para>
+
+ <para>Copyright (C) 1998-2003 Daniel Veillard. All Rights
+ Reserved.</para>
+
+ <para>Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation files
+ (the "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:</para>
+
+ <para>The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.</para>
+
+ <para>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ IN NO EVENT SHALL THE DANIEL VEILLARD BE LIABLE FOR ANY CLAIM, DAMAGES
+ OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ OTHER DEALINGS IN THE SOFTWARE.</para>
+
+ <para>Except as contained in this notice, the name of Daniel Veillard
+ shall not be used in advertising or otherwise to promote the sale, use
+ or other dealings in this Software without prior written authorization
+ from him.</para>
+ </sect2>
+
+ <sect2 id="licLibXSLT">
+ <title>libxslt licenses</title>
+
+ <para>Licence for libxslt except libexslt:</para>
+
+ <para>Copyright (C) 2001-2002 Daniel Veillard. All Rights
+ Reserved.</para>
+
+ <para>Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation files
+ (the "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:</para>
+
+ <para>The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.</para>
+
+ <para>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ IN NO EVENT SHALL THE DANIEL VEILLARD BE LIABLE FOR ANY CLAIM, DAMAGES
+ OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ OTHER DEALINGS IN THE SOFTWARE.</para>
+
+ <para>Except as contained in this notice, the name of Daniel Veillard
+ shall not be used in advertising or otherwise to promote the sale, use
+ or other dealings in this Software without prior written authorization
+ from him.</para>
+
+ <para>Licence for libexslt:</para>
+
+ <para>Copyright (C) 2001-2002 Thomas Broyer, Charlie Bozeman and Daniel
+ Veillard. All Rights Reserved.</para>
+
+ <para>Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation files
+ (the "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:</para>
+
+ <para>The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.</para>
+
+ <para>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ DEALINGS IN THE SOFTWARE.</para>
+
+ <para>Except as contained in this notice, the name of the authors shall
+ not be used in advertising or otherwise to promote the sale, use or
+ other dealings in this Software without prior written authorization from
+ him.</para>
+ </sect2>
+
+ <sect2 id="licgSOAP">
+ <title>gSOAP Public License Version 1.3a</title>
+
+ <para>The gSOAP public license is derived from the Mozilla Public
+ License (MPL1.1). The sections that were deleted from the original
+ MPL1.1 text are 1.0.1, 2.1.(c),(d), 2.2.(c),(d), 8.2.(b), 10, and 11.
+ Section 3.8 was added. The modified sections are 2.1.(b), 2.2.(b), 3.2
+ (simplified), 3.5 (deleted the last sentence), and 3.6
+ (simplified).</para>
+
+ <para>1 DEFINITIONS</para>
+
+ <para>1.1. "Contributor" means each entity that creates or contributes
+ to the creation of Modifications.</para>
+
+ <para>1.2. "Contributor Version" means the combination of the Original
+ Code, prior Modifications used by a Contributor, and the Modifications
+ made by that particular Contributor.</para>
+
+ <para>1.3. "Covered Code" means the Original Code, or Modifications or
+ the combination of the Original Code, and Modifications, in each case
+ including portions thereof.</para>
+
+ <para>1.4. "Electronic Distribution Mechanism" means a mechanism
+ generally accepted in the software development community for the
+ electronic transfer of data.</para>
+
+ <para>1.5. "Executable" means Covered Code in any form other than Source
+ Code.</para>
+
+ <para>1.6. "Initial Developer" means the individual or entity identified
+ as the Initial Developer in the Source Code notice required by Exhibit
+ A.</para>
+
+ <para>1.7. "Larger Work" means a work which combines Covered Code or
+ portions thereof with code not governed by the terms of this
+ License.</para>
+
+ <para>1.8. "License" means this document.</para>
+
+ <para>1.8.1. "Licensable" means having the right to grant, to the
+ maximum extent possible, whether at the time of the initial grant or
+ subsequently acquired, any and all of the rights conveyed herein.</para>
+
+ <para>1.9. "Modifications" means any addition to or deletion from the
+ substance or structure of either the Original Code or any previous
+ Modifications. When Covered Code is released as a series of files, a
+ Modification is:</para>
+
+ <para>A. Any addition to or deletion from the contents of a file
+ containing Original Code or previous Modifications.</para>
+
+ <para>B. Any new file that contains any part of the Original Code, or
+ previous Modifications.</para>
+
+ <para>1.10. "Original Code" means Source Code of computer software code
+ which is described in the Source Code notice required by Exhibit A as
+ Original Code, and which, at the time of its release under this License
+ is not already Covered Code governed by this License.</para>
+
+ <para>1.10.1. "Patent Claims" means any patent claim(s), now owned or
+ hereafter acquired, including without limitation, method, process, and
+ apparatus claims, in any patent Licensable by grantor.</para>
+
+ <para>1.11. "Source Code" means the preferred form of the Covered Code
+ for making modifications to it, including all modules it contains, plus
+ any associated interface definition files, scripts used to control
+ compilation and installation of an Executable, or source code
+ differential comparisons against either the Original Code or another
+ well known, available Covered Code of the Contributor's choice. The
+ Source Code can be in a compressed or archival form, provided the
+ appropriate decompression or de-archiving software is widely available
+ for no charge.</para>
+
+ <para>1.12. "You" (or "Your") means an individual or a legal entity
+ exercising rights under, and complying with all of the terms of, this
+ License or a future version of this License issued under Section 6.1.
+ For legal entities, "You" includes any entity which controls, is
+ controlled by, or is under common control with You. For purposes of this
+ definition, "control" means (a) the power, direct or indirect, to cause
+ the direction or management of such entity, whether by contract or
+ otherwise, or (b) ownership of more than fifty percent (50%) of the
+ outstanding shares or beneficial ownership of such entity.</para>
+
+ <para>2 SOURCE CODE LICENSE.</para>
+
+ <para>2.1. The Initial Developer Grant.</para>
+
+ <para>The Initial Developer hereby grants You a world-wide,
+ royalty-free, non-exclusive license, subject to third party intellectual
+ property claims:</para>
+
+ <para>(a) under intellectual property rights (other than patent or
+ trademark) Licensable by Initial Developer to use, reproduce, modify,
+ display, perform, sublicense and distribute the Original Code (or
+ portions thereof) with or without Modifications, and/or as part of a
+ Larger Work; and</para>
+
+ <para>(b) under patents now or hereafter owned or controlled by Initial
+ Developer, to make, have made, use and sell ("offer to sell and import")
+ the Original Code, Modifications, or portions thereof, but solely to the
+ extent that any such patent is reasonably necessary to enable You to
+ utilize, alone or in combination with other software, the Original Code,
+ Modifications, or any combination or portions thereof.</para>
+
+ <para>(c)</para>
+
+ <para>(d)</para>
+
+ <para>2.2. Contributor Grant.</para>
+
+ <para>Subject to third party intellectual property claims, each
+ Contributor hereby grants You a world-wide, royalty-free, non-exclusive
+ license</para>
+
+ <para>(a) under intellectual property rights (other than patent or
+ trademark) Licensable by Contributor, to use, reproduce, modify,
+ display, perform, sublicense and distribute the Modifications created by
+ such Contributor (or portions thereof) either on an unmodified basis,
+ with other Modifications, as Covered Code and/or as part of a Larger
+ Work; and</para>
+
+ <para>(b) under patents now or hereafter owned or controlled by
+ Contributor, to make, have made, use and sell ("offer to sell and
+ import") the Contributor Version (or portions thereof), but solely to
+ the extent that any such patent is reasonably necessary to enable You to
+ utilize, alone or in combination with other software, the Contributor
+ Version (or portions thereof).</para>
+
+ <para>(c)</para>
+
+ <para>(d)</para>
+
+ <para>3 DISTRIBUTION OBLIGATIONS.</para>
+
+ <para>3.1. Application of License.</para>
+
+ <para>The Modifications which You create or to which You contribute are
+ governed by the terms of this License, including without limitation
+ Section 2.2. The Source Code version of Covered Code may be distributed
+ only under the terms of this License or a future version of this License
+ released under Section 6.1, and You must include a copy of this License
+ with every copy of the Source Code You distribute. You may not offer or
+ impose any terms on any Source Code version that alters or restricts the
+ applicable version of this License or the recipients' rights hereunder.
+ However, You may include an additional document offering the additional
+ rights described in Section 3.5.</para>
+
+ <para>3.2. Availability of Source Code.</para>
+
+ <para>Any Modification created by You will be provided to the Initial
+ Developer in Source Code form and are subject to the terms of the
+ License. 3.3. Description of Modifications.</para>
+
+ <para>You must cause all Covered Code to which You contribute to contain
+ a file documenting the changes You made to create that Covered Code and
+ the date of any change. You must include a prominent statement that the
+ Modification is derived, directly or indirectly, from Original Code
+ provided by the Initial Developer and including the name of the Initial
+ Developer in (a) the Source Code, and (b) in any notice in an Executable
+ version or related documentation in which You describe the origin or
+ ownership of the Covered Code.</para>
+
+ <para>3.4. Intellectual Property Matters.</para>
+
+ <para>(a) Third Party Claims. If Contributor has knowledge that a
+ license under a third party's intellectual property rights is required
+ to exercise the rights granted by such Contributor under Sections 2.1 or
+ 2.2, Contributor must include a text file with the Source Code
+ distribution titled "LEGAL" which describes the claim and the party
+ making the claim in sufficient detail that a recipient will know whom to
+ contact. If Contributor obtains such knowledge after the Modification is
+ made available as described in Section 3.2, Contributor shall promptly
+ modify the LEGAL file in all copies Contributor makes available
+ thereafter and shall take other steps (such as notifying appropriate
+ mailing lists or newsgroups) reasonably calculated to inform those who
+ received the Covered Code that new knowledge has been obtained.</para>
+
+ <para>(b) Contributor APIs. If Contributor's Modifications include an
+ application programming interface and Contributor has knowledge of
+ patent licenses which are reasonably necessary to implement that API,
+ Contributor must also include this information in the LEGAL file.</para>
+
+ <para>(c) Representations. Contributor represents that, except as
+ disclosed pursuant to Section 3.4(a) above, Contributor believes that
+ Contributor's Modifications are Contributor's original creation(s)
+ and/or Contributor has sufficient rights to grant the rights conveyed by
+ this License.</para>
+
+ <para>3.5. Required Notices. You must duplicate the notice in Exhibit A
+ in each file of the Source Code. If it is not possible to put such
+ notice in a particular Source Code file due to its structure, then You
+ must include such notice in a location (such as a relevant directory)
+ where a user would be likely to look for such a notice. If You created
+ one or more Modification(s) You may add your name as a Contributor to
+ the notice described in Exhibit A. You must also duplicate this License
+ in any documentation for the Source Code where You describe recipients'
+ rights or ownership rights relating to Covered Code. You may choose to
+ offer, and to charge a fee for, warranty, support, indemnity or
+ liability obligations to one or more recipients of Covered Code.
+ However, You may do so only on Your own behalf, and not on behalf of the
+ Initial Developer or any Contributor.</para>
+
+ <para>3.6. Distribution of Executable Versions. You may distribute
+ Covered Code in Executable form only if the requirements of Section
+ 3.1-3.5 have been met for that Covered Code. You may distribute the
+ Executable version of Covered Code or ownership rights under a license
+ of Your choice, which may contain terms different from this License,
+ provided that You are in compliance with the terms of this License and
+ that the license for the Executable version does not attempt to limit or
+ alter the recipient's rights in the Source Code version from the rights
+ set forth in this License. If You distribute the Executable version
+ under a different license You must make it absolutely clear that any
+ terms which differ from this License are offered by You alone, not by
+ the Initial Developer or any Contributor. If you distribute executable
+ versions containing Covered Code as part of a product, you must
+ reproduce the notice in Exhibit B in the documentation and/or other
+ materials provided with the product.</para>
+
+ <para>3.7. Larger Works. You may create a Larger Work by combining
+ Covered Code with other code not governed by the terms of this License
+ and distribute the Larger Work as a single product. In such a case, You
+ must make sure the requirements of this License are fulfilled for the
+ Covered Code.</para>
+
+ <para>3.8. Restrictions. You may not remove any product identification,
+ copyright, proprietary notices or labels from gSOAP.</para>
+
+ <para>4 INABILITY TO COMPLY DUE TO STATUTE OR REGULATION.</para>
+
+ <para>If it is impossible for You to comply with any of the terms of
+ this License with respect to some or all of the Covered Code due to
+ statute, judicial order, or regulation then You must: (a) comply with
+ the terms of this License to the maximum extent possible; and (b)
+ describe the limitations and the code they affect. Such description must
+ be included in the LEGAL file described in Section 3.4 and must be
+ included with all distributions of the Source Code. Except to the extent
+ prohibited by statute or regulation, such description must be
+ sufficiently detailed for a recipient of ordinary skill to be able to
+ understand it.</para>
+
+ <para>5 APPLICATION OF THIS LICENSE.</para>
+
+ <para>This License applies to code to which the Initial Developer has
+ attached the notice in Exhibit A and to related Covered Code.</para>
+
+ <para>6 VERSIONS OF THE LICENSE.</para>
+
+ <para>6.1. New Versions.</para>
+
+ <para>Grantor may publish revised and/or new versions of the License
+ from time to time. Each version will be given a distinguishing version
+ number.</para>
+
+ <para>6.2. Effect of New Versions.</para>
+
+ <para>Once Covered Code has been published under a particular version of
+ the License, You may always continue to use it under the terms of that
+ version. You may also choose to use such Covered Code under the terms of
+ any subsequent version of the License.</para>
+
+ <para>6.3. Derivative Works.</para>
+
+ <para>If You create or use a modified version of this License (which you
+ may only do in order to apply it to code which is not already Covered
+ Code governed by this License), You must (a) rename Your license so that
+ the phrase "gSOAP" or any confusingly similar phrase do not appear in
+ your license (except to note that your license differs from this
+ License) and (b) otherwise make it clear that Your version of the
+ license contains terms which differ from the gSOAP Public License.
+ (Filling in the name of the Initial Developer, Original Code or
+ Contributor in the notice described in Exhibit A shall not of themselves
+ be deemed to be modifications of this License.)</para>
+
+ <para>7 DISCLAIMER OF WARRANTY.</para>
+
+ <para>COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS, IMPLIED OR STATUTORY,
+ INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, OF FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT OF
+ THIRD PARTY INTELLECTUAL PROPERTY RIGHTS, AND ANY WARRANTY THAT MAY
+ ARISE BY REASON OF TRADE USAGE, CUSTOM, OR COURSE OF DEALING. WITHOUT
+ LIMITING THE FOREGOING, YOU ACKNOWLEDGE THAT THE SOFTWARE IS PROVIDED
+ "AS IS" AND THAT THE AUTHORS DO NOT WARRANT THE SOFTWARE WILL RUN
+ UNINTERRUPTED OR ERROR FREE. LIMITED LIABILITY THE ENTIRE RISK AS TO
+ RESULTS AND PERFORMANCE OF THE SOFTWARE IS ASSUMED BY YOU. UNDER NO
+ CIRCUMSTANCES WILL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT,
+ INCIDENTAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES OF ANY KIND OR NATURE
+ WHATSOEVER, WHETHER BASED ON CONTRACT, WARRANTY, TORT (INCLUDING
+ NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, ARISING OUT OF OR IN ANY WAY
+ RELATED TO THE SOFTWARE, EVEN IF THE AUTHORS HAVE BEEN ADVISED ON THE
+ POSSIBILITY OF SUCH DAMAGE OR IF SUCH DAMAGE COULD HAVE BEEN REASONABLY
+ FORESEEN, AND NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
+ EXCLUSIVE REMEDY PROVIDED. SUCH LIMITATION ON DAMAGES INCLUDES, BUT IS
+ NOT LIMITED TO, DAMAGES FOR LOSS OF GOODWILL, LOST PROFITS, LOSS OF DATA
+ OR SOFTWARE, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION OR
+ IMPAIRMENT OF OTHER GOODS. IN NO EVENT WILL THE AUTHORS BE LIABLE FOR
+ THE COSTS OF PROCUREMENT OF SUBSTITUTE SOFTWARE OR SERVICES. YOU
+ ACKNOWLEDGE THAT THIS SOFTWARE IS NOT DESIGNED FOR USE IN ON-LINE
+ EQUIPMENT IN HAZARDOUS ENVIRONMENTS SUCH AS OPERATION OF NUCLEAR
+ FACILITIES, AIRCRAFT NAVIGATION OR CONTROL, OR LIFE-CRITICAL
+ APPLICATIONS. THE AUTHORS EXPRESSLY DISCLAIM ANY LIABILITY RESULTING
+ FROM USE OF THE SOFTWARE IN ANY SUCH ON-LINE EQUIPMENT IN HAZARDOUS
+ ENVIRONMENTS AND ACCEPTS NO LIABILITY IN RESPECT OF ANY ACTIONS OR
+ CLAIMS BASED ON THE USE OF THE SOFTWARE IN ANY SUCH ON-LINE EQUIPMENT IN
+ HAZARDOUS ENVIRONMENTS BY YOU. FOR PURPOSES OF THIS PARAGRAPH, THE TERM
+ "LIFE-CRITICAL APPLICATION" MEANS AN APPLICATION IN WHICH THE
+ FUNCTIONING OR MALFUNCTIONING OF THE SOFTWARE MAY RESULT DIRECTLY OR
+ INDIRECTLY IN PHYSICAL INJURY OR LOSS OF HUMAN LIFE. THIS DISCLAIMER OF
+ WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY
+ COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS
+ DISCLAIMER.</para>
+
+ <para>8 TERMINATION.</para>
+
+ <para>8.1.</para>
+
+ <para>This License and the rights granted hereunder will terminate
+ automatically if You fail to comply with terms herein and fail to cure
+ such breach within 30 days of becoming aware of the breach. All
+ sublicenses to the Covered Code which are properly granted shall survive
+ any termination of this License. Provisions which, by their nature, must
+ remain in effect beyond the termination of this License shall
+ survive.</para>
+
+ <para>8.2.</para>
+
+ <para>8.3.</para>
+
+ <para>If You assert a patent infringement claim against Participant
+ alleging that such Participant's Contributor Version directly or
+ indirectly infringes any patent where such claim is resolved (such as by
+ license or settlement) prior to the initiation of patent infringement
+ litigation, then the reasonable value of the licenses granted by such
+ Participant under Sections 2.1 or 2.2 shall be taken into account in
+ determining the amount or value of any payment or license.</para>
+
+ <para>8.4. In the event of termination under Sections 8.1 or 8.2 above,
+ all end user license agreements (excluding distributors and resellers)
+ which have been validly granted by You or any distributor hereunder
+ prior to termination shall survive termination.</para>
+
+ <para>9 LIMITATION OF LIABILITY.</para>
+
+ <para>UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+ (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
+ DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR
+ ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY
+ INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER
+ INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK
+ STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
+ COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
+ INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
+ LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
+ RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
+ PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION
+ OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION
+ AND LIMITATION MAY NOT APPLY TO YOU.</para>
+
+ <para>10 U.S. GOVERNMENT END USERS.</para>
+
+ <para>11 MISCELLANEOUS.</para>
+
+ <para>12 RESPONSIBILITY FOR CLAIMS.</para>
+
+ <para>As between Initial Developer and the Contributors, each party is
+ responsible for claims and damages arising, directly or indirectly, out
+ of its utilization of rights under this License and You agree to work
+ with Initial Developer and Contributors to distribute such
+ responsibility on an equitable basis. Nothing herein is intended or
+ shall be deemed to constitute any admission of liability.</para>
+
+ <para>EXHIBIT A.</para>
+
+ <para>"The contents of this file are subject to the gSOAP Public License
+ Version 1.3 (the "License"); you may not use this file except in
+ compliance with the License. You may obtain a copy of the License at
+ <ulink
+ url="http://www.cs.fsu.edu/~engelen/soaplicense.html">http://www.cs.fsu.edu/~engelen/soaplicense.html</ulink>.
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+ License for the specific language governing rights and limitations under
+ the License.</para>
+
+ <para>The Original Code of the gSOAP Software is: stdsoap.h, stdsoap2.h,
+ stdsoap.c, stdsoap2.c, stdsoap.cpp, stdsoap2.cpp, soapcpp2.h,
+ soapcpp2.c, soapcpp2_lex.l, soapcpp2_yacc.y, error2.h, error2.c,
+ symbol2.c, init2.c, soapdoc2.html, and soapdoc2.pdf, httpget.h,
+ httpget.c, stl.h, stldeque.h, stllist.h, stlvector.h, stlset.h.</para>
+
+ <para>The Initial Developer of the Original Code is Robert A. van
+ Engelen. Portions created by Robert A. van Engelen are Copyright (C)
+ 2001-2004 Robert A. van Engelen, Genivia inc. All Rights
+ Reserved.</para>
+
+ <para>Contributor(s): "________________________." [Note: The text of
+ this Exhibit A may differ slightly form the text of the notices in the
+ Source Code files of the Original code. You should use the text of this
+ Exhibit A rather than the text found in the Original Code Source Code
+ for Your Modifications.]</para>
+
+ <para>EXHIBIT B.</para>
+
+ <para>"Part of the software embedded in this product is gSOAP software.
+ Portions created by gSOAP are Copyright (C) 2001-2004 Robert A. van
+ Engelen, Genivia inc. All Rights Reserved. THE SOFTWARE IN THIS PRODUCT
+ WAS IN PART PROVIDED BY GENIVIA INC AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+ NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE."</para>
+ </sect2>
+
+ <sect2 id="licChromium">
+ <title>Chromium licenses</title>
+
+ <sect3>
+ <title>Main license</title>
+
+ <para>Copyright (c) 2002, Stanford University All rights
+ reserved.</para>
+
+ <para>Some portions of Chromium are copyrighted by individiual
+ organizations. Please see the files COPYRIGHT.LLNL and
+ COPYRIGHT.REDHAT for more information.</para>
+
+ <para>Redistribution and use in source and binary forms, with or
+ without modification, are permitted provided that the following
+ conditions are met:<itemizedlist>
+ <listitem>
+ <para>Redistributions of source code must retain the above
+ copyright notice, this list of conditions and the following
+ disclaimer.</para>
+ </listitem>
+
+ <listitem>
+ <para>Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.</para>
+ </listitem>
+
+ <listitem>
+ <para>Neither the name of Stanford University nor the names of
+ its contributors may be used to endorse or promote products
+ derived from this software without specific prior written
+ permission.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+ TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE.</para>
+ </sect3>
+
+ <sect3>
+ <title>COPYRIGHT.LLNL file</title>
+
+ <para>This Chromium distribution contains information and code which
+ is covered under the following notice:</para>
+
+ <para>Copyright (c) 2002, The Regents of the University of California.
+ Produced at the Lawrence Livermore National Laboratory For details,
+ contact: Randall Frank (rjfrank@llnl.gov). UCRL-CODE-2002-058 All
+ rights reserved.</para>
+
+ <para>This file is part of Chromium. For details, see accompanying
+ documentation.</para>
+
+ <para>Redistribution and use in source and binary forms, with or
+ without modification, are permitted provided that the following
+ conditions are met:</para>
+
+ <para>Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the disclaimer below.</para>
+
+ <para>Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the disclaimer (as noted
+ below) in the documentation and/or other materials provided with the
+ distribution.</para>
+
+ <para>Neither the name of the UC/LLNL nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.</para>
+
+ <para>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ REGENTS OF THE UNIVERSITY OF CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY
+ OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE.</para>
+
+ <para>Additional BSD Notice</para>
+
+ <para>1. This notice is required to be provided under our contract
+ with the U.S. Department of Energy (DOE). This work was produced at
+ the University of California, Lawrence Livermore National Laboratory
+ under Contract No. W-7405-ENG-48 with the DOE.</para>
+
+ <para>2. Neither the United States Government nor the University of
+ California nor any of their employees, makes any warranty, express or
+ implied, or assumes any liability or responsibility for the accuracy,
+ completeness, or usefulness of any information, apparatus, product, or
+ process disclosed, or represents that its use would not infringe
+ privately-owned rights.</para>
+
+ <para>3. Also, reference herein to any specific commercial products,
+ process, or services by trade name, trademark, manufacturer or
+ otherwise does not necessarily constitute or imply its endorsement,
+ recommendation, or favoring by the United States Government or the
+ University of California. The views and opinions of authors expressed
+ herein do not necessarily state or reflect those of the United States
+ Government or the University of California, and shall not be used for
+ advertising or product endorsement purposes.</para>
+ </sect3>
+
+ <sect3>
+ <title>COPYRIGHT.REDHAT file</title>
+
+ <para>This Chromium distribution contains information and code which
+ is covered under the following notice:</para>
+
+ <para>Copyright 2001,2002 Red Hat Inc., Durham, North Carolina.</para>
+
+ <para>All Rights Reserved.</para>
+
+ <para>Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation files
+ (the "Software"), to deal in the Software without restriction,
+ including without limitation on the rights to use, copy, modify,
+ merge, publish, distribute, sublicense, and/or sell copies of the
+ Software, and to permit persons to whom the Software is furnished to
+ do so, subject to the following conditions:</para>
+
+ <para>The above copyright notice and this permission notice (including
+ the next paragraph) shall be included in all copies or substantial
+ portions of the Software.</para>
+
+ <para>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS BE
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</para>
+ </sect3>
+ </sect2>
+
+ <sect2 id="licLibCurl">
+ <title>curl license</title>
+
+ <para>COPYRIGHT AND PERMISSION NOTICE</para>
+
+ <para>Copyright (c) 1996 - 2009, Daniel Stenberg, daniel@haxx.se.</para>
+
+ <para>All rights reserved.</para>
+
+ <para>Permission to use, copy, modify, and distribute this software for
+ any purpose with or without fee is hereby granted, provided that the
+ above copyright notice and this permission notice appear in all
+ copies.</para>
+
+ <para>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
+ THIRD PARTY RIGHTS. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.</para>
+
+ <para>Except as contained in this notice, the name of a copyright holder
+ shall not be used in advertising or otherwise to promote the sale, use
+ or other dealings in this Software without prior written authorization
+ of the copyright holder.</para>
+ </sect2>
+
+ <sect2 id="licLibgd">
+ <title>libgd license</title>
+
+ <para>Portions copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+ 2002 by Cold Spring Harbor Laboratory. Funded under Grant P41-RR02188 by
+ the National Institutes of Health.</para>
+
+ <para>Portions copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002 by
+ Boutell.Com, Inc.</para>
+
+ <para>Portions relating to GD2 format copyright 1999, 2000, 2001, 2002
+ Philip Warner.</para>
+
+ <para>Portions relating to PNG copyright 1999, 2000, 2001, 2002 Greg
+ Roelofs.</para>
+
+ <para>Portions relating to gdttf.c copyright 1999, 2000, 2001, 2002 John
+ Ellson (ellson@lucent.com).</para>
+
+ <para>Portions relating to gdft.c copyright 2001, 2002 John Ellson
+ (ellson@lucent.com).</para>
+
+ <para>Portions copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ Pierre-Alain Joye (pierre@libgd.org).</para>
+
+ <para>Portions relating to JPEG and to color quantization copyright
+ 2000, 2001, 2002, Doug Becker and copyright (C) 1994, 1995, 1996, 1997,
+ 1998, 1999, 2000, 2001, 2002, Thomas G. Lane. This software is based in
+ part on the work of the Independent JPEG Group. See the file
+ README-JPEG.TXT for more information.</para>
+
+ <para>Portions relating to WBMP copyright 2000, 2001, 2002 Maurice
+ Szmurlo and Johan Van den Brande.</para>
+
+ <para>Permission has been granted to copy, distribute and modify gd in
+ any context without fee, including a commercial application, provided
+ that this notice is present in user-accessible supporting
+ documentation.</para>
+
+ <para>This does not affect your ownership of the derived work itself,
+ and the intent is to assure proper credit for the authors of gd, not to
+ interfere with your productive use of gd. If you have questions, ask.
+ "Derived works" includes all programs that utilize the library. Credit
+ must be given in user-accessible documentation.</para>
+
+ <para>This software is provided "AS IS." The copyright holders disclaim
+ all warranties, either express or implied, including but not limited to
+ implied warranties of merchantability and fitness for a particular
+ purpose, with respect to this code and accompanying
+ documentation.</para>
+
+ <para>Although their code does not appear in gd, the authors wish to
+ thank David Koblas, David Rowley, and Hutchison Avenue Software
+ Corporation for their prior contributions.</para>
+ </sect2>
+
+ <sect2 id="licBsdIntel">
+ <title>BSD license from Intel</title>
+
+ <para>All rights reserved.</para>
+
+ <para>Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:</para>
+ <itemizedlist>
+ <listitem>
+ <para>Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.</para>
+ </listitem>
+ <listitem>
+ <para>Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.</para>
+ </listitem>
+ <listitem>
+ <para>Neither the name of the Intel Corporation nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.</para>
+ </listitem>
+ </itemizedlist>
+ <para>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE.</para>
+ </sect2>
+
+ <sect2 id="licJPEG">
+ <title>libjpeg License</title>
+
+ <para>The authors make NO WARRANTY or representation, either express or implied,
+ with respect to this software, its quality, accuracy, merchantability, or
+ fitness for a particular purpose. This software is provided "AS IS", and you,
+ its user, assume the entire risk as to its quality and accuracy.</para>
+
+ <para>This software is copyright (C) 1991-2010, Thomas G. Lane, Guido Vollbeding.
+ All Rights Reserved except as specified below.</para>
+
+ <para>Permission is hereby granted to use, copy, modify, and distribute this
+ software (or portions thereof) for any purpose, without fee, subject to these
+ conditions:</para>
+ <para>(1) If any part of the source code for this software is distributed, then this
+ README file must be included, with this copyright and no-warranty notice
+ unaltered; and any additions, deletions, or changes to the original files
+ must be clearly indicated in accompanying documentation.</para>
+ <para>(2) If only executable code is distributed, then the accompanying
+ documentation must state that "this software is based in part on the work of
+ the Independent JPEG Group".</para>
+ <para>(3) Permission for use of this software is granted only if the user accepts
+ full responsibility for any undesirable consequences; the authors accept
+ NO LIABILITY for damages of any kind.</para>
+
+ <para>These conditions apply to any software derived from or based on the IJG code,
+ not just to the unmodified library. If you use our work, you ought to
+ acknowledge us.</para>
+
+ <para>Permission is NOT granted for the use of any IJG author's name or company name
+ in advertising or publicity relating to this software or products derived from
+ it. This software may be referred to only as "the Independent JPEG Group's
+ software".</para>
+
+ <para>We specifically permit and encourage the use of this software as the basis of
+ commercial products, provided that all warranty or liability claims are
+ assumed by the product vendor.</para>
+
+ <para>ansi2knr.c is included in this distribution by permission of L. Peter Deutsch,
+ sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA.
+ ansi2knr.c is NOT covered by the above copyright and conditions, but instead
+ by the usual distribution terms of the Free Software Foundation; principally,
+ that you must include source code if you redistribute it. (See the file
+ ansi2knr.c for full details.) However, since ansi2knr.c is not needed as part
+ of any program generated from the IJG code, this does not limit you more than
+ the foregoing paragraphs do.</para>
+
+ <para>The Unix configuration script "configure" was produced with GNU Autoconf.
+ It is copyright by the Free Software Foundation but is freely distributable.
+ The same holds for its supporting scripts (config.guess, config.sub,
+ ltmain.sh). Another support script, install-sh, is copyright by X Consortium
+ but is also freely distributable.</para>
+
+ <para>The IJG distribution formerly included code to read and write GIF files.
+ To avoid entanglement with the Unisys LZW patent, GIF reading support has
+ been removed altogether, and the GIF writer has been simplified to produce
+ "uncompressed GIFs". This technique does not use the LZW algorithm; the
+ resulting GIF files are larger than usual, but are readable by all standard
+ GIF decoders.</para>
+
+ <para>We are required to state that</para>
+ <para>"The Graphics Interchange Format(c) is the Copyright property of
+ CompuServe Incorporated. GIF(sm) is a Service Mark property of
+ CompuServe Incorporated."</para>
+ </sect2>
+
+ <sect2 id="licJPEGSIMD">
+ <title>x86 SIMD extension for IJG JPEG library license</title>
+
+ <para>Copyright 2009 Pierre Ossman &lt;ossman@cendio.se&gt; for Cendio AB</para>
+ <para>Copyright 2010 D. R. Commander</para>
+
+ <para>Based on</para>
+ <para>x86 SIMD extension for IJG JPEG library - version 1.02</para>
+
+ <para>Copyright (C) 1999-2006, MIYASAKA Masaru.</para>
+
+ <para>This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.</para>
+
+ <para>Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:</para>
+
+ <para>1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.</para>
+ <para>2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.</para>
+ <para>3. This notice may not be removed or altered from any source distribution.</para>
+ </sect2>
+
+ </sect1>
+</appendix>
diff --git a/doc/manual/en_US/user_Troubleshooting.xml b/doc/manual/en_US/user_Troubleshooting.xml
new file mode 100644
index 00000000..43a00665
--- /dev/null
+++ b/doc/manual/en_US/user_Troubleshooting.xml
@@ -0,0 +1,1441 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<chapter id="Troubleshooting">
+ <title>Troubleshooting</title>
+
+ <para>This chapter provides answers to commonly asked questions. In order to
+ improve your user experience with VirtualBox, it is recommended to read this
+ section to learn more about common pitfalls and get recommendations on how
+ to use the product.</para>
+
+ <sect1>
+ <title>Procedures and tools</title>
+
+ <sect2>
+ <title>Categorizing and isolating problems</title>
+
+ <para>More often than not, a virtualized guest behaves like a physical
+ system. Any problems that a physical machine would encounter, a virtual
+ machine will encounter as well. If, for example, Internet connectivity
+ is lost due to external issues, virtual machines will be affected just
+ as much as physical ones.</para>
+
+ <para>If a true VirtualBox problem is encountered, it helps to
+ categorize and isolate the problem first. Here are some of the questions
+ that should be answered before reporting a problem:<orderedlist>
+ <listitem>
+ <para>Is the problem specific to a certain guest OS? Specific
+ release of a guest OS? Especially with Linux guest related
+ problems, the issue may be specific to a certain distribution and
+ version of Linux.</para>
+ </listitem>
+
+ <listitem>
+ <para>Is the problem specific to a certain host OS? Problems are
+ usually not host OS specific (because most of the VirtualBox code
+ base is shared across all supported platforms), but especially in
+ the areas of networking and USB support, there are significant
+ differences between host platforms. Some GUI related issues are
+ also host specific.</para>
+ </listitem>
+
+ <listitem>
+ <para>Is the problem specific to certain host hardware? This
+ category of issues is typically related to the host CPU. Because
+ of significant differences between VT-x and AMD-V, problems may be
+ specific to one or the other technology. The exact CPU model may
+ also make a difference (even for software virtualization) because
+ different CPUs support different features, which may affect
+ certain aspects of guest CPU operation.</para>
+ </listitem>
+
+ <listitem>
+ <para>Is the problem specific to a certain virtualization mode?
+ Some problems may only occur in software virtualization mode,
+ others may be specific to hardware virtualization.</para>
+ </listitem>
+
+ <listitem>
+ <para>Is the problem specific to guest SMP? That is, is it related
+ to the number of virtual CPUs (VCPUs) in the guest? Using more
+ than one CPU usually significantly affects the internal operation
+ of a guest OS.</para>
+ </listitem>
+
+ <listitem>
+ <para>Is the problem specific to the Guest Additions? In some
+ cases, this is a given (e.g., a shared folders problem), in other
+ cases it may be less obvious (for example, display problems). And
+ if the problem is Guest Additions specific, is it also specific to
+ a certain version of the Additions?</para>
+ </listitem>
+
+ <listitem>
+ <para>Is the problem specific to a certain environment? Some
+ problems are related to a particular environment external to the
+ VM; this usually involves network setup. Certain configurations of
+ external servers such as DHCP or PXE may expose problems which do
+ not occur with other, similar servers.</para>
+ </listitem>
+
+ <listitem>
+ <para>Is the problem a regression? Knowing that an issue is a
+ regression usually makes it significantly easier to find the
+ solution. In this case, it is crucial to know which version is
+ affected and which is not.</para>
+ </listitem>
+ </orderedlist></para>
+ </sect2>
+
+ <sect2>
+ <title>Collecting debugging information</title>
+
+ <para>For problem determination, it is often important to collect
+ debugging information which can be analyzed by VirtualBox support. This
+ section contains information about what kind of information can be
+ obtained.</para>
+
+ <para>Every time VirtualBox starts up a VM, a so-called <emphasis
+ role="bold">"release log file"</emphasis> is created containing lots of
+ information about the VM configuration and runtime events. The log file
+ is called <computeroutput><literal>VBox.log</literal></computeroutput>
+ and resides in the VM log file folder. Typically this will be a
+ directory like this:<screen>$HOME/VirtualBox VMs/{machinename}/Logs</screen></para>
+
+ <para>When starting a VM, the configuration file of the last run will be
+ renamed to <computeroutput>.1</computeroutput>, up to
+ <computeroutput>.3</computeroutput>. Sometimes when there is a problem,
+ it is useful to have a look at the logs. Also when requesting support
+ for VirtualBox, supplying the corresponding log file is
+ mandatory.</para>
+
+ <para>For convenience, for each virtual machine, the VirtualBox main
+ window can show these logs in a window. To access it, select a virtual
+ machine from the list on the left and select "Show logs..." from the
+ "Machine" window.</para>
+
+ <para>The release log file (VBox.log) contains a wealth of diagnostic
+ information, such as Host OS type and version, VirtualBox version and
+ build (32-bit or 64-bit), a complete dump of the guest's configuration
+ (CFGM), detailed information about the host CPU type and supported
+ features, whether hardware virtualization is enabled, information about
+ VT-x/AMD-V setup, state transitions (creating, running, paused,
+ stopping, etc.), guest BIOS messages, Guest Additions messages,
+ device-specific log entries and, at the end of execution, final guest
+ state and condensed statistics.</para>
+
+ <para>In case of crashes, it is very important to collect <emphasis
+ role="bold">crash dumps</emphasis>. This is true for both host and guest
+ crashes. For information about enabling core dumps on Linux, Solaris,
+ and OS X systems, refer to the core dump article on the VirtualBox
+ website.<footnote>
+ <para><ulink
+ url="http://www.virtualbox.org/wiki/Core_dump">http://www.virtualbox.org/wiki/Core_dump</ulink>.</para>
+ </footnote></para>
+
+ <para>You can also use <computeroutput>VBoxManage
+ debugvm</computeroutput> to create a dump of a complete virtual machine;
+ see <xref linkend="vboxmanage-debugvm" />.</para>
+
+ <para>For network related problems, it is often helpful to capture a
+ trace of network traffic. If the traffic is routed through an adapter on
+ the host, it is possible to use Wireshark or a similar tool to capture
+ the traffic there. However, this often also includes a lot of traffic
+ unrelated to the VM.</para>
+
+ <para>VirtualBox provides an ability to capture network traffic only on
+ a specific VM's network adapter. Refer to the network tracing article on
+ the VirtualBox website<footnote>
+ <para><ulink
+ url="http://www.virtualbox.org/wiki/Network_tips">http://www.virtualbox.org/wiki/Network_tips</ulink>.</para>
+ </footnote> for information on enabling this capture. The trace files
+ created by VirtualBox are in <computeroutput>.pcap</computeroutput>
+ format and can be easily analyzed with Wireshark.</para>
+ </sect2>
+
+ <sect2>
+ <title id="ts_debugger">The built-in VM debugger</title>
+
+ <para>VirtualBox includes a built-in VM debugger, which advanced users
+ may find useful. This debugger allows for examining and, to some extent,
+ controlling the VM state.<warning>
+ <para>Use the VM debugger at your own risk. There is no support for
+ it, and the following documentation is only made available for
+ advanced users with a very high level of familiarity with the
+ x86/AMD64 machine instruction set, as well as detailed knowledge of
+ the PC architecture. A degree of familiarity with the internals of
+ the guest OS in question may also be very helpful.</para>
+ </warning></para>
+
+ <para>The VM debugger is available in all regular production versions of
+ VirtualBox, but it is disabled by default because the average user will
+ have little use for it. There are two ways to access the
+ debugger:<itemizedlist>
+ <listitem>
+ <para>A debugger console window displayed alongside the VM</para>
+ </listitem>
+
+ <listitem>
+ <para>Via the <computeroutput>telnet</computeroutput> protocol at
+ port 5000</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>The debugger can be enabled in three ways:<itemizedlist>
+ <listitem>
+ <para>Start the VM directly using <computeroutput>VirtualBox
+ --startvm</computeroutput>, with an additional
+ <computeroutput>--dbg</computeroutput>,
+ <computeroutput>--debug</computeroutput>, or
+ <computeroutput>--debug-command-line</computeroutput> argument.
+ See the VirtualBox usage help for details.</para>
+ </listitem>
+
+ <listitem>
+ <para>Set the
+ <computeroutput>VBOX_GUI_DBG_ENABLED</computeroutput> or
+ <computeroutput>VBOX_GUI_DBG_AUTO_SHOW</computeroutput>
+ environment variable to <computeroutput>true</computeroutput>
+ before launching the VirtualBox process. Setting these variables
+ (only their presence is checked) is effective even when the first
+ VirtualBox process is the VM selector window. VMs subsequently
+ launched from the selector will have the debugger enabled.</para>
+ </listitem>
+
+ <listitem>
+ <para>Set the <computeroutput>GUI/Dbg/Enabled</computeroutput>
+ extra data item to <computeroutput>true</computeroutput> before
+ launching the VM. This can be set globally or on a per VM
+ basis.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>A new 'Debug' menu entry will be added to the VirtualBox
+ application. This menu allows the user to open the debugger
+ console.</para>
+
+ <para>The VM debugger command syntax is loosely modeled on Microsoft and
+ IBM debuggers used on DOS, OS/2 and Windows. Users familiar with symdeb,
+ CodeView, or the OS/2 kernel debugger will find the VirtualBox VM
+ debugger familiar.</para>
+
+ <para>The most important command is
+ <computeroutput>help</computeroutput>. This will print brief usage help
+ for all debugger commands. The set of commands supported by the VM
+ debugger changes frequently and the
+ <computeroutput>help</computeroutput> command is always
+ up-to-date.</para>
+
+ <para>A brief summary of frequently used commands follows:<itemizedlist>
+ <listitem>
+ <para><computeroutput>stop</computeroutput> -- stops the VM
+ execution and enables single stepping</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>g</computeroutput> -- continue VM
+ execution</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>t</computeroutput> -- single step an
+ instruction</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>rg/rh/r</computeroutput> -- print the
+ guest/hypervisor/current registers</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>kg/kh/k</computeroutput> -- print the
+ guest/hypervisor/current call stack</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>da/db/dw/dd/dq</computeroutput> -- print
+ memory contents as ASCII/bytes/words/dwords/qwords</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>u</computeroutput> -- unassemble
+ memory</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>dg</computeroutput> -- print the guest's
+ GDT</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>di</computeroutput> -- print the guest's
+ IDT</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>dl</computeroutput> -- print the guest's
+ LDT</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>dt</computeroutput> -- print the guest's
+ TSS</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>dp*</computeroutput> -- print the guest's
+ page table structures</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>bp/br</computeroutput> -- set a
+ normal/recompiler breakpoint</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>bl</computeroutput> -- list
+ breakpoints</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>bc</computeroutput> -- clear a
+ breakpoint</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>writecore</computeroutput> -- writes a VM
+ core file to disk, refer <xref linkend="ts_guest-core-format" /></para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>See the built-in <computeroutput>help</computeroutput> for other
+ available commands.</para>
+
+ <para>The VM debugger supports symbolic debugging, although symbols for
+ guest code are often not available. For Solaris guests, the
+ <computeroutput>detect</computeroutput> command automatically determines
+ the guest OS version and locates kernel symbols in guest's memory.
+ Symbolic debugging is then available. For Linux guests, the
+ <computeroutput>detect</computeroutput> commands also determines the
+ guest OS version, but there are no symbols in the guest's memory. Kernel
+ symbols are available in the file
+ <computeroutput>/proc/kallsyms</computeroutput> on Linux guests. This
+ file must be copied to the host, for example using
+ <computeroutput>scp</computeroutput>. The
+ <computeroutput>loadmap</computeroutput> debugger command can be used to
+ make the symbol information available to the VM debugger. Note that the
+ <computeroutput>kallsyms</computeroutput> file contains the symbols for
+ the currently loaded modules; if the guest's configuration changes, the
+ symbols will change as well and must be updated.</para>
+
+ <para>For all guests, a simple way to verify that the correct symbols
+ are loaded is the <computeroutput>k</computeroutput> command. The guest
+ is normally idling and it should be clear from the symbolic information
+ that the guest operating system's idle loop is being executed.</para>
+
+ <para>Another group of debugger commands is the set of
+ <computeroutput>info</computeroutput> commands. Running
+ <computeroutput>info help</computeroutput> provides complete usage
+ information. The information commands provide ad-hoc data pertinent to
+ various emulated devices and aspects of the VMM. There is no general
+ guideline for using the <computeroutput>info</computeroutput> commands,
+ the right command to use depends entirely on the problem being
+ investigated. Some of the info commands are:<itemizedlist>
+ <listitem>
+ <para><computeroutput>cfgm</computeroutput> -- print a branch of
+ the configuration tree</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>cpuid</computeroutput> -- display the guest
+ CPUID leaves</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>ioport</computeroutput> -- print registered
+ I/O port ranges</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>mmio</computeroutput> -- print registered
+ MMIO ranges</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>mode</computeroutput> -- print the current
+ paging mode</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>pit</computeroutput> -- print the i8254 PIT
+ state</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>pic</computeroutput> -- print the i8259A PIC
+ state</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>ohci/ehci</computeroutput> -- print a subset
+ of the OHCI/EHCI USB controller state</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>pcnet0</computeroutput> -- print the PCnet
+ state</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>vgatext</computeroutput> -- print the
+ contents of the VGA framebuffer formatted as standard text
+ mode</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>timers</computeroutput> -- print all VM
+ timers</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>The output of the <computeroutput>info</computeroutput> commands
+ generally requires in-depth knowledge of the emulated device and/or
+ VirtualBox VMM internals. However, when used properly, the information
+ provided can be invaluable.</para>
+ </sect2>
+
+ <sect2 id="ts_guest-core-format">
+ <title>VM core format</title>
+
+ <para>VirtualBox uses the 64-bit ELF format for its VM core files
+ created by <computeroutput>VBoxManage debugvm</computeroutput>; see
+ <xref linkend="vboxmanage-debugvm" />. The VM core file contain the
+ memory and CPU dumps of the VM and can be useful for debugging your
+ guest OS. The 64-bit ELF object format specficiation can be obtained
+ here: <literal><ulink
+ url="http://downloads.openwatcom.org/ftp/devel/docs/elf-64-gen.pdf">http://downloads.openwatcom.org/ftp/devel/docs/elf-64-gen.pdf</ulink></literal>.</para>
+
+ <para>The overall layout of the VM core format is as follows:</para>
+
+ <para><screen>[ ELF 64 Header]
+[ Program Header, type PT_NOTE ]
+ -&gt; offset to COREDESCRIPTOR
+[ Program Header, type PT_LOAD ] - one for each contiguous physical memory range
+ -&gt; Memory offset of range
+ -&gt; File offset
+[ Note Header, type NT_VBOXCORE ]
+[ COREDESCRIPTOR ]
+ -&gt; Magic
+ -&gt; VM core file version
+ -&gt; VBox version
+ -&gt; Number of vCPUs etc.
+[ Note Header, type NT_VBOXCPU ] - one for each vCPU
+[ vCPU 1 Note Header ]
+ [ CPUMCTX - vCPU 1 dump ]
+[ Additional Notes + Data ] - currently unused
+[ Memory dump ]</screen></para>
+
+ <para>The memory descriptors contain physical addresses relative to the
+ guest and not virtual addresses. Regions of memory such as MMIO regions
+ are not included in the core file.</para>
+
+ <para>The relevant data structures and definitions can be found in the
+ VirtualBox sources under the following header files:
+ <computeroutput>include/VBox/dbgfcorefmt.h</computeroutput>,
+ <computeroutput>include/VBox/cpumctx.h</computeroutput> and
+ <computeroutput>src/VBox/Runtime/include/internal/ldrELFCommon.h</computeroutput>.</para>
+
+ <para>The VM core file can be inspected using
+ <computeroutput>elfdump</computeroutput> and GNU
+ <computeroutput>readelf</computeroutput> or other similar
+ utilities.</para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>General</title>
+
+ <sect2 id="ts_config-periodic-flush">
+ <title>Guest shows IDE/SATA errors for file-based images on slow host
+ file system</title>
+
+ <para>Occasionally, some host file systems provide very poor writing
+ performance and as a consequence cause the guest to time out IDE/SATA
+ commands. This is normal behavior and should normally cause no real
+ problems, as the guest should repeat commands that have timed out.
+ However, some guests (e.g. some Linux versions) have severe problems if a
+ write to an image file takes longer than about 15 seconds. Some file
+ systems however require more than a minute to complete a single write,
+ if the host cache contains a large amount of data that needs to be
+ written.</para>
+
+ <para>The symptom for this problem is that the guest can no longer
+ access its files during large write or copying operations, usually
+ leading to an immediate hang of the guest.</para>
+
+ <para>In order to work around this problem (the true fix is to use a
+ faster file system that doesn't exhibit such unacceptable write
+ performance), it is possible to flush the image file after a certain
+ amount of data has been written. This interval is normally infinite, but
+ can be configured individually for each disk of a VM.</para>
+
+ <para>For IDE disks use the following command:</para>
+
+ <screen>VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/piix3ide/0/LUN#[x]/Config/FlushInterval" [b]</screen>
+
+ <para>For SATA disks use the following command:</para>
+
+ <screen>VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/ahci/0/LUN#[x]/Config/FlushInterval" [b]</screen>
+
+ <para>The value [x] that selects the disk for IDE is 0 for the master
+ device on the first channel, 1 for the slave device on the first
+ channel, 2 for the master device on the second channel or 3 for the
+ master device on the second channel. For SATA use values between 0 and
+ 29. Only disks support this configuration option; it must not be set for
+ CD/DVD drives.</para>
+
+ <para>The unit of the interval [b] is the number of bytes written since
+ the last flush. The value for it must be selected so that the occasional
+ long write delays do not occur. Since the proper flush interval depends
+ on the performance of the host and the host filesystem, finding the
+ optimal value that makes the problem disappear requires some
+ experimentation. Values between 1000000 and 10000000 (1 to 10 megabytes)
+ are a good starting point. Decreasing the interval both decreases the
+ probability of the problem and the write performance of the guest.
+ Setting the value unnecessarily low will cost performance without
+ providing any benefits. An interval of 1 will cause a flush for each
+ write operation and should solve the problem in any case, but has a
+ severe write performance penalty.</para>
+
+ <para>Providing a value of 0 for [b] is treated as an infinite flush
+ interval, effectively disabling this workaround. Removing the extra data
+ key by specifying no value for [b] has the same effect.</para>
+ </sect2>
+
+ <sect2>
+ <title>Responding to guest IDE/SATA flush requests</title>
+
+ <para>If desired, the virtual disk images can be flushed when the guest
+ issues the IDE FLUSH CACHE command. Normally these requests are ignored
+ for improved performance. The parameters below are only accepted for
+ disk drives. They must not be set for DVD drives.</para>
+
+ <para>To enable flushing for IDE disks, issue the following
+ command:</para>
+
+ <screen>VBoxManage setextradata "VM name" "VBoxInternal/Devices/piix3ide/0/LUN#[x]/Config/IgnoreFlush" 0</screen>
+
+ <para>The value [x] that selects the disk is 0 for the master device on
+ the first channel, 1 for the slave device on the first channel, 2 for
+ the master device on the second channel or 3 for the master device on
+ the second channel.</para>
+
+ <para>To enable flushing for SATA disks, issue the following
+ command:</para>
+
+ <screen>VBoxManage setextradata "VM name" "VBoxInternal/Devices/ahci/0/LUN#[x]/Config/IgnoreFlush" 0</screen>
+
+ <para>The value [x] that selects the disk can be a value between 0 and
+ 29.</para>
+
+ <para>Note that this doesn't affect the flushes performed according to
+ the configuration described in <xref linkend="ts_config-periodic-flush"
+ xrefstyle="template: %n" />. Restoring the default of ignoring flush
+ commands is possible by setting the value to 1 or by removing the
+ key.</para>
+ </sect2>
+
+ <sect2 id="ts_host-powermgmt">
+ <title>Poor performance caused by host power management</title>
+
+ <para>On some hardware platforms and operating systems, virtualization
+ performance is negatively affected by host CPU power management. The
+ symptoms may be choppy audio in the guest or erratic guest clock
+ behavior.</para>
+
+ <para>Some of the problems may be caused by firmware and/or host
+ operating system bugs. Therefore, updating the firmware and applying
+ operating systems fixes is recommended.</para>
+
+ <para>For optimal virtualization performance, the C1E power state
+ support in the system's BIOS should be disabled, if such a setting is
+ available (not all systems support the C1E power state). Disabling other
+ power management settings may also improve performance. However, a
+ balance between performance and power consumption must always be
+ considered.</para>
+ </sect2>
+
+ <sect2 id="ts_gui-2d-grayed-out">
+ <title>GUI: 2D Video Acceleration option is grayed out</title>
+
+ <para>To use 2D Video Acceleration within VirtualBox, your host's video
+ card should support certain OpenGL extensions. On startup, VirtualBox
+ checks for those extensions, and, if the test fails, this option is
+ silently grayed out.</para>
+
+ <para>To find out why it has failed, you can manually execute the
+ following command:</para>
+
+ <screen>VBoxTestOGL --log "log_file_name" --test 2D</screen>
+
+ <para>It will list the required OpenGL extensions one by one and will
+ show you which one failed the test. This usually means that you are
+ running an outdated or misconfigured OpenGL driver on your host. It can
+ also mean that your video chip is lacking required functionality.</para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Windows guests</title>
+
+ <sect2>
+ <title>Windows bluescreens after changing VM configuration</title>
+
+ <para>Changing certain virtual machine settings can cause Windows guests
+ to fail during start up with a bluescreen. This may happen if you change
+ VM settings after installing Windows, or if you copy a disk image with
+ an already installed Windows to a newly created VM which has settings
+ that differ from the original machine.</para>
+
+ <para>This applies in particular to the following settings:<itemizedlist>
+ <listitem>
+ <para>The ACPI and I/O APIC settings should never be changed after
+ installing Windows. Depending on the presence of these hardware
+ features, the Windows installation program chooses special kernel
+ and device driver versions and will fail to startup should these
+ hardware features be removed. (Enabling them for a Windows VM
+ which was installed without them does not cause any harm. However,
+ Windows will not use these features in this case.)</para>
+ </listitem>
+
+ <listitem>
+ <para>Changing the storage controller hardware will cause bootup
+ failures as well. This might also apply to you if you copy a disk
+ image from an older version of VirtualBox to a virtual machine
+ created with a newer VirtualBox version; the default subtype of
+ IDE controller hardware was changed from PIIX3 to PIIX4 with
+ VirtualBox 2.2. Make sure these settings are identical.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect2>
+
+ <sect2>
+ <title>Windows 0x101 bluescreens with SMP enabled (IPI timeout)</title>
+
+ <para>If a VM is configured to have more than one processor (symmetrical
+ multiprocessing, SMP), some configurations of Windows guests crash with
+ an 0x101 error message, indicating a timeout for inter-processor
+ interrupts (IPIs). These interrupts synchronize memory management
+ between processors.</para>
+
+ <para>According to Microsoft, this is due to a race condition in
+ Windows. A hotfix is available.<footnote>
+ <para>See <ulink
+ url="http://support.microsoft.com/kb/955076">http://support.microsoft.com/kb/955076</ulink>.</para>
+ </footnote> If this does not help, please reduce the number of virtual
+ processors to 1.</para>
+ </sect2>
+
+ <sect2>
+ <title>Windows 2000 installation failures</title>
+
+ <para>When installing Windows 2000 guests, you might run into one of the
+ following issues:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Installation reboots, usually during component
+ registration.</para>
+ </listitem>
+
+ <listitem>
+ <para>Installation fills the whole hard disk with empty log
+ files.</para>
+ </listitem>
+
+ <listitem>
+ <para>Installation complains about a failure installing
+ <literal>msgina.dll</literal>.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>These problems are all caused by a bug in the hard disk driver of
+ Windows 2000. After issuing a hard disk request, there is a race
+ condition in the Windows driver code which leads to corruption if the
+ operation completes too fast, i.e. the hardware interrupt from the IDE
+ controller arrives too soon. With physical hardware, there is a
+ guaranteed delay in most systems so the problem is usually hidden there
+ (however it should be possible to reproduce it on physical hardware as
+ well). In a virtual environment, it is possible for the operation to be
+ done immediately (especially on very fast systems with multiple CPUs)
+ and the interrupt is signaled sooner than on a physical system. The
+ solution is to introduce an artificial delay before delivering such
+ interrupts. This delay can be configured for a VM using the following
+ command:</para>
+
+ <screen>VBoxManage setextradata "VM name" "VBoxInternal/Devices/piix3ide/0/Config/IRQDelay" 1</screen>
+
+ <para>This sets the delay to one millisecond. In case this doesn't help,
+ increase it to a value between 1 and 5 milliseconds. Please note that
+ this slows down disk performance. After installation, you should be able
+ to remove the key (or set it to 0).</para>
+ </sect2>
+
+ <sect2>
+ <title>How to record bluescreen information from Windows guests</title>
+
+ <para>When Windows guests run into a kernel crash, they display the
+ infamous bluescreen. Depending on how Windows is configured, the
+ information will remain on the screen until the machine is restarted or
+ it will reboot automatically. During installation, Windows is usually
+ configured to reboot automatically. With automatic reboots, there is no
+ chance to record the bluescreen information which might be important for
+ problem determination.</para>
+
+ <para>VirtualBox provides a method of halting a guest when it wants to
+ perform a reset. In order to enable this feature, issue the following
+ command:</para>
+
+ <para><screen>VBoxManage setextradata "VM name" "VBoxInternal/PDM/HaltOnReset" 1</screen></para>
+ </sect2>
+
+ <sect2>
+ <title>No networking in Windows Vista guests</title>
+
+ <para>With Windows Vista, Microsoft dropped support for the AMD PCNet
+ card that VirtualBox used to provide as the default virtual network card
+ before version 1.6.0. For Windows Vista guests, VirtualBox now uses an
+ Intel E1000 card by default.</para>
+
+ <para>If, for some reason, you still want to use the AMD card, you need
+ to download the PCNet driver from the AMD website (available for 32-bit
+ Windows only). You can transfer it into the virtual machine using a
+ shared folder, see (see <xref linkend="sharedfolders" />).</para>
+ </sect2>
+
+ <sect2>
+ <title>Windows guests may cause a high CPU load</title>
+
+ <para>Several background applications of Windows guests, especially
+ virus scanners, are known to increases the CPU load notably even if the
+ guest appears to be idle. We recommend to deactivate virus scanners
+ within virtualized guests if possible.</para>
+ </sect2>
+
+ <sect2>
+ <title>Long delays when accessing shared folders</title>
+
+ <para>The performance for accesses to shared folders from a Windows
+ guest might be decreased due to delays during the resolution of the
+ VirtualBox shared folders name service. To fix these delays, add the
+ following entries to the file
+ <computeroutput>\windows\system32\drivers\etc\lmhosts</computeroutput>
+ of the Windows guest:</para>
+
+ <screen>255.255.255.255 VBOXSVR #PRE
+255.255.255.255 VBOXSRV #PRE</screen>
+
+ <para>After doing this change, a reboot of the guest is required.</para>
+ </sect2>
+
+ <sect2>
+ <title>USB tablet coordinates wrong in Windows 98 guests</title>
+
+ <para>If a Windows 98 VM is configured to use the emulated USB tablet
+ (absolute pointing device), the coordinate translation may be incorrect
+ and the pointer is restricted to the upper left quarter of the guest's
+ screen.
+ </para>
+
+ <para>The USB HID (Human Interface Device) drivers in Windows 98 are very
+ old and do not handle tablets the same way all more recent operating
+ systems do (Windows 2000 and later, Mac OS X, Solaris). To
+ work around the problem, issue the following command:
+ </para>
+
+ <para><screen>VBoxManage setextradata "VM name" "VBoxInternal/USB/HidMouse/0/Config/CoordShift" 0</screen></para>
+
+ <para>To restore the default behavior, remove the key or set its value
+ to 1.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Windows guests are removed from an Active Directory domain after
+ restoring a snapshot</title>
+
+ <para>If a Windows guest is a member of an Active Directory domain and
+ the snapshot feature of VirtualBox is used, it could happen it loses
+ this status after you restore an older snapshot.
+ </para>
+
+ <para>The reason is the automatic machine password changing performed by
+ Windows in regular intervals for security purposes. You can disable
+ this feature by following the instruction of this <ulink
+ url="http://support.microsoft.com/kb/154501">http://support.microsoft.com/kb/154501</ulink>
+ article from Microsoft.
+ </para>
+ </sect2>
+
+ <sect2 id="ts_d3d8-d3d9-restore">
+ <title>Restoring d3d8.dll and d3d9.dll</title>
+
+ <para>VirtualBox Guest Additions for Windows prior to 4.1.8 did not properly
+ back up the original d3d8.dll and d3d9.dll system files when selecting
+ and installing the experimental Direct3D support. This process replaces
+ both system files with files from the VirtualBox Guest Additions so that
+ Direct3D calls can be handled correctly. Although this issue was fixed
+ with VirtualBox 4.1.8, there is no way the Windows Guest Additions
+ installer can repair these files.</para>
+
+ <para>Corruption of these files has no implications in case 3D acceleration
+ is enabled and basic Direct3D support is installed, that is, without WDDM
+ (on Windows Vista or higher) or on older Windows systems like Windows XP.
+ With the basic Direct3D support all Direct3D 8.0 and Direct3D 9.0
+ applications will utilize VirtualBox Direct3D files directly and thus
+ will run as expected.</para>
+
+ <para>For WDDM Direct3D support however, the originally shipped d3d8.dll and
+ d3d9.dll files are required in order to run Direct3D 8.0
+ and Direct3D 9.0 applications. As a result of the above mentioned system
+ files corruption these applications will not work anymore. See below for
+ a step-by-step guide for restoring the original d3d8.dll and d3d9.dll
+ system files in case the VirtualBox Guest Additions installer warned
+ about those incorrect files or when having trouble running Direct3D
+ applications.</para>
+
+ <note><para>Starting at Windows 7 the 3D desktop (aka Aero) uses DirectX 10
+ for rendering so that corrupted d3d8.dll and d3d9.dll system files will
+ have no effect on the actual rendering.</para></note>
+
+ <para>This is why such a detected file corruption is not considered as fatal
+ for the basic Direct3D installation on all supported Windows guests,
+ and for WDDM Direct3D installation on Windows 7 and later guests.</para>
+
+ <para>Extracting d3d8 and d3d9.dll from a Windows XP installation CD:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>Download and install the latest version of 7-Zip File Manager <ulink
+ url="http//www.7-zip.org">http//www.7-zip.org</ulink></para>
+ </listitem>
+
+ <listitem>
+ <para>Browse into installation CD for example E:\i386 (or AMD64 for 64bit version)</para>
+ </listitem>
+
+ <listitem>
+ <para>Locate file d3d8.dl_ and d3d9.dl_, double click on it and Extract d3d8.dll and d3d9.dll</para>
+ </listitem>
+
+ <listitem>
+ <para>Reboot Windows in Safe mode</para>
+ </listitem>
+
+ <listitem>
+ <para>Copy extracted d3d8.dll and d3d9.dll to C:\Windows\system32 and C:\Windows\system32\dllcache</para>
+ </listitem>
+
+ <listitem>
+ <para>Reboot</para>
+ </listitem>
+ </orderedlist>
+
+ <para>Extracting d3d8 and d3d9.dll from Windows XP Service pack </para>
+
+ <orderedlist>
+ <listitem>
+ <para>1, 3-6 Same as installation CD</para>
+ </listitem>
+ <listitem>
+ <para>Use 'Open inside' to open WindowsXP-KB936929-SP3-x86.exe as archive and browse i386 directory.</para>
+ </listitem>
+ </orderedlist>
+
+ <para>Extracting d3d8 and d3d9.dll from Vista/Windows7 installation CD or Service Pack iso</para>
+
+ <orderedlist>
+ <listitem>
+ <para>Download and install the latest version of 7-Zip File Manager <ulink
+ url="http//www.7-zip.org">http//www.7-zip.org</ulink></para>
+ </listitem>
+
+ <listitem>
+ <para>Browse into installation CD for example E:\sources</para>
+ </listitem>
+
+ <listitem>
+ <para>Locate file install.wim and double click it. After 7-Zip utility opens the file, you'll get a few numbered folders. Each numeric subfolder represents a different version of Windows (Starter, Home Basic, and so on)</para>
+ </listitem>
+
+ <listitem>
+ <para>After entering into the one of the numeric folders, browse into Windows\System32 (or C:\Windows\SysWOW64 for 64 bit version) directory locate d3d8.dll and d3d9.dll and extract</para>
+ </listitem>
+
+ <listitem>
+ <para>Copy extracted d3d8.dll and d3d9.dll to C:\Windows\system32 or C:\Windows\SysWOW64 (files from system32 should go to system32, from SysWOW64 to SysWOW64)</para>
+ </listitem>
+
+ <listitem>
+ <para>Reboot</para>
+ </listitem>
+ </orderedlist>
+ </sect2>
+
+ </sect1>
+
+ <sect1>
+ <title>Linux and X11 guests</title>
+
+ <sect2>
+ <title>Linux guests may cause a high CPU load</title>
+
+ <para>Some Linux guests may cause a high CPU load even if the guest
+ system appears to be idle. This can be caused by a high timer frequency
+ of the guest kernel. Some Linux distributions, for example Fedora, ship
+ a Linux kernel configured for a timer frequency of <emphasis
+ role="bold"> 1000Hz</emphasis>. We recommend to recompile the guest
+ kernel and to select a timer frequency of 100Hz.</para>
+
+ <para>Linux kernels shipped with Red Hat Enterprise Linux (RHEL) as of
+ release 4.7 and 5.1 as well as kernels of related Linux distributions
+ (for instance CentOS and Oracle Enterprise Linux) support a kernel
+ parameter <emphasis>divider=N</emphasis>. Hence, such kernels support a
+ lower timer frequency without recompilation. We suggest to add the
+ kernel parameter <emphasis>divider=10</emphasis> to select a guest
+ kernel timer frequency of 100Hz.</para>
+ </sect2>
+
+ <sect2>
+ <title>AMD Barcelona CPUs</title>
+
+ <para>Most Linux-based guests will fail with AMD Phenoms or
+ Barcelona-level Opterons due to a bug in the Linux kernel. Enable the
+ I/O-APIC to work around the problem (see <xref
+ linkend="settings-system" />).</para>
+ </sect2>
+
+ <sect2 id="ts_linux-buggy">
+ <title>Buggy Linux 2.6 kernel versions</title>
+
+ <para>The following bugs in Linux kernels prevent them from executing
+ correctly in VirtualBox, causing VM boot crashes:<itemizedlist>
+ <listitem>
+ <para>The Linux kernel version 2.6.18 (and some 2.6.17 versions)
+ introduced a race condition that can cause boot crashes in
+ VirtualBox. Please use a kernel version 2.6.19 or later.</para>
+ </listitem>
+
+ <listitem>
+ <para>With hardware virtualization and the I/O APIC enabled,
+ kernels before 2.6.24-rc6 may panic on boot with the following
+ message:<screen>Kernel panic - not syncing: IO-APIC + timer doesn't work! Boot with
+apic=debug and send a report. Then try booting with the 'noapic' option</screen></para>
+
+ <para>If you see this message, either disable hardware
+ virtualization or the I/O APIC (see <xref
+ linkend="settings-system" />), or upgrade the guest to a newer
+ kernel.<footnote>
+ <para>See <ulink
+ url="http://www.mail-archive.com/git-commits-head@vger.kernel.org/msg30813.html">http://www.mail-archive.com/git-commits-head@vger.kernel.org/msg30813.html</ulink>
+ for details about the kernel fix.</para>
+ </footnote></para>
+ </listitem>
+ </itemizedlist></para>
+ </sect2>
+
+ <sect2>
+ <title>Shared clipboard, auto-resizing and seamless desktop in X11
+ guests</title>
+
+ <para>Guest desktop services in guests running the X11 window system
+ (Solaris, Linux and others) are provided by a guest service called
+ <computeroutput>VBoxClient</computeroutput>, which runs under the ID of
+ the user who started the desktop session and is automatically started
+ using the following command lines <screen>VBoxClient --clipboard
+VBoxClient --display
+VBoxClient --seamless</screen> when your X11 user session is started if you
+ are using a common desktop environment (Gnome, KDE and others). If a
+ particular desktop service is not working correctly, it is worth
+ checking whether the process which should provide it is running.</para>
+
+ <para>The <computeroutput>VBoxClient</computeroutput> processes create
+ files in the user's home directory with names of the form
+ <computeroutput>.vboxclient-*.pid</computeroutput> when they are running
+ in order to prevent a given service from being started twice. It can
+ happen due to misconfiguration that these files are created owned by
+ root and not deleted when the services are stopped, which will prevent
+ them from being started in future sessions. If the services cannot be
+ started, you may wish to check whether these files still exist.</para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Solaris guests</title>
+
+ <sect2>
+ <title>Older Solaris 10 releases hang in 64-bit mode</title>
+
+ <para>Solaris 10 releases up to and including Solaris 10 8/07 ("S10U4")
+ incorrectly detect newer Intel processors produced since 2007. This
+ problem leads to the 64-bit Solaris kernel hanging or crashing almost
+ immediately during startup, in both virtualized and physical
+ environments.
+ </para>
+ <para>
+ The recommended solution is upgrading to at least Solaris 10 5/08
+ ("S10U5"). Alternative solutions include forcing Solaris to always
+ boot the 32-bit kernel or applying a patch for bug 6574102 (while
+ Solaris is using the 32-bit kernel).
+ </para>
+
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Windows hosts</title>
+
+ <sect2>
+ <title>VBoxSVC out-of-process COM server issues</title>
+
+ <para>VirtualBox makes use of the Microsoft Component Object Model (COM)
+ for inter- and intra-process communication. This allows VirtualBox to
+ share a common configuration among different virtual machine processes
+ and provide several user interface options based on a common
+ architecture. All global status information and configuration is
+ maintained by the process <computeroutput>VBoxSVC.exe</computeroutput>,
+ which is an out-of-process COM server. Whenever a VirtualBox process is
+ started, it requests access to the COM server and Windows automatically
+ starts the process. Note that it should never be started by the end
+ user.</para>
+
+ <para>When the last process disconnects from the COM server, it will
+ terminate itself after some seconds. The VirtualBox configuration (XML
+ files) is maintained and owned by the COM server and the files are
+ locked whenever the server runs.</para>
+
+ <para>In some cases - such as when a virtual machine is terminated
+ unexpectedly - the COM server will not notice that the client is
+ disconnected and stay active for a longer period (10 minutes or so)
+ keeping the configuration files locked. In other rare cases the COM
+ server might experience an internal error and subsequently other
+ processes fail to initialize it. In these situations, it is recommended
+ to use the Windows task manager to kill the process
+ <computeroutput>VBoxSVC.exe</computeroutput>.</para>
+ </sect2>
+
+ <sect2>
+ <title>CD/DVD changes not recognized</title>
+
+ <para>In case you have assigned a physical CD/DVD drive to a guest and
+ the guest does not notice when the medium changes, make sure that the
+ Windows media change notification (MCN) feature is not turned off. This
+ is represented by the following key in the Windows registry:<screen><literal>HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Cdrom\Autorun</literal></screen>Certain
+ applications may disable this key against Microsoft's advice. If it is
+ set to 0, change it to 1 and reboot your system. VirtualBox relies on
+ Windows notifying it of media changes.</para>
+ </sect2>
+
+ <sect2>
+ <title>Sluggish response when using Microsoft RDP client</title>
+
+ <para>If connecting to a Virtual Machine via the Microsoft RDP client
+ (called Remote Desktop Connection), there can be large delays between
+ input (moving the mouse over a menu is the most obvious situation) and
+ output. This is because this RDP client collects input for a certain
+ time before sending it to the RDP server.</para>
+
+ <para>The interval can be decreased by setting a Windows registry key to
+ smaller values than the default of 100. The key does not exist initially
+ and must be of type DWORD. The unit for its values is milliseconds.
+ Values around 20 are suitable for low-bandwidth connections between the
+ RDP client and server. Values around 4 can be used for a gigabit
+ Ethernet connection. Generally values below 10 achieve a performance
+ that is very close to that of the local input devices and screen of the
+ host on which the Virtual Machine is running.</para>
+
+ <para>Depending whether the setting should be changed for an individual
+ user or for the system, either</para>
+
+ <screen>HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Min Send Interval</screen>
+
+ <para>or</para>
+
+ <screen>HKEY_LOCAL_MACHINE\Software\Microsoft\Terminal Server Client\Min Send Interval</screen>
+
+ <para>can be set appropriately.</para>
+ </sect2>
+
+ <sect2>
+ <title>Running an iSCSI initiator and target on a single system</title>
+
+ <para>Deadlocks can occur on a Windows host when attempting to access an
+ iSCSI target running in a guest virtual machine with an iSCSI initiator
+ (e.g. Microsoft iSCSI Initiator) that is running on the host. This is
+ caused by a flaw in the Windows cache manager component, and causes
+ sluggish host system response for several minutes, followed by a
+ "Delayed Write Failed" error message in the system tray or in a separate
+ message window. The guest is blocked during that period and may show
+ error messages or become unstable.</para>
+
+ <para>Setting the environment variable
+ <computeroutput>VBOX_DISABLE_HOST_DISK_CACHE</computeroutput> to 1 will
+ enable a workaround for this problem until Microsoft addresses the
+ issue. For example, open a command prompt window and start VirtualBox
+ like this:</para>
+
+ <screen>set VBOX_DISABLE_HOST_DISK_CACHE=1
+VirtualBox</screen>
+
+ <para>While this will decrease guest disk performance (especially
+ writes), it does not affect the performance of other applications
+ running on the host.</para>
+ </sect2>
+
+ <sect2>
+ <title>Bridged networking adapters missing</title>
+
+ <para>If no bridged adapters show up in the "Networking" section of the
+ VM settings, this typically means that the bridged networking driver was
+ not installed properly on your host. This could be due to the following
+ reasons: <itemizedlist>
+ <listitem>
+ <para>The maximum allowed filter count was reached on the host. In
+ this case, the MSI log would mention the
+ <computeroutput>0x8004a029</computeroutput> error code returned on
+ NetFlt network component install:<screen>VBoxNetCfgWinInstallComponent: Install failed, hr (0x8004a029)</screen></para>
+
+ <para>You can try to increase the maximum filter count in the
+ Windows registry at the following key:<screen>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\MaxNumFilters</screen>The
+ maximum number allowed is 14. After a reboot, try to re-install
+ VirtualBox.</para>
+ </listitem>
+
+ <listitem>
+ <para>The INF cache is corrupt. In this case, the install log
+ (<computeroutput>%windir%\inf\setupapi.log</computeroutput> on XP
+ or <computeroutput>%windir%\inf\setupapi.dev.log</computeroutput>
+ on Vista or later) would typically mention the failure to find a
+ suitable driver package for either the
+ <computeroutput>sun_VBoxNetFlt</computeroutput> or
+ <computeroutput>sun_VBoxNetFltmp</computeroutput> components. The
+ solution then is to uninstall VirtualBox, remove the INF cache
+ (<computeroutput>%windir%\inf\INFCACHE.1</computeroutput>), reboot
+ and try to re-install VirtualBox</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect2>
+
+ <sect2>
+ <title>Host-only networking adapters cannot be created</title>
+
+ <para>If host-only adapter cannot be created (either via the Manager or
+ VBoxManage), then the INF cache is probably corrupt. In this case, the
+ install log (<computeroutput>%windir%\inf\setupapi.log</computeroutput>
+ on XP or <computeroutput>%windir%\inf\setupapi.dev.log</computeroutput>
+ on Vista or later) would typically mention the failure to find a
+ suitable driver package for the
+ <computeroutput>sun_VBoxNetAdp</computeroutput> component. Again, as
+ with the bridged networking problem described above, the solution is to
+ uninstall VirtualBox, remove the INF cache
+ (<computeroutput>%windir%\inf\INFCACHE.1</computeroutput>), reboot and
+ try to re-install VirtualBox.</para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Linux hosts</title>
+
+ <sect2 id="ts_linux-kernelmodule-fails-to-load">
+ <title>Linux kernel module refuses to load</title>
+
+ <para>If the VirtualBox kernel module
+ (<computeroutput>vboxdrv</computeroutput>) refuses to load, i.e. you get
+ an "Error inserting vboxdrv: Invalid argument", check (as root) the
+ output of the <computeroutput>dmesg</computeroutput> command to find out
+ why the load failed. Most probably the kernel disagrees with the version
+ of the gcc used to compile the module. Make sure that you use the same
+ compiler as used to build the kernel.</para>
+ </sect2>
+
+ <sect2>
+ <title>Linux host CD/DVD drive not found</title>
+
+ <para>If you have configured a virtual machine to use the host's CD/DVD
+ drive, but this does not appear to work, make sure that the current user
+ has permission to access the corresponding Linux device file
+ (<computeroutput>/dev/hdc</computeroutput> or
+ <computeroutput>/dev/scd0</computeroutput> or
+ <computeroutput>/dev/cdrom</computeroutput> or similar). On most
+ distributions, the user must be added to a corresponding group (usually
+ called <computeroutput>cdrom</computeroutput> or
+ <computeroutput>cdrw</computeroutput>).</para>
+ </sect2>
+
+ <sect2>
+ <title>Linux host CD/DVD drive not found (older distributions)</title>
+
+ <para>On older Linux distributions, if your CD/DVD device has a
+ different name, VirtualBox may be unable to find it. On older Linux
+ hosts, VirtualBox performs the following steps to locate your CD/DVD
+ drives:</para>
+
+ <para><orderedlist>
+ <listitem>
+ <para>VirtualBox examines if the environment variable
+ <computeroutput>VBOX_CDROM</computeroutput> is defined (see
+ below). If so, VirtualBox omits all the following checks.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox tests if
+ <computeroutput>/dev/cdrom</computeroutput> works.</para>
+ </listitem>
+
+ <listitem>
+ <para>In addition, VirtualBox checks if any CD/DVD drives are
+ currently mounted by checking
+ <computeroutput>/etc/mtab</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para>In addition, VirtualBox checks if any of the entries in
+ <computeroutput>/etc/fstab</computeroutput> point to CD/DVD
+ devices.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>In other words, you can try to set VBOX_CDROM to contain a list of
+ your CD/DVD devices, separated by colons, for example as follows:</para>
+
+ <para><screen>export VBOX_CDROM='/dev/cdrom0:/dev/cdrom1'</screen>On
+ modern Linux distributions, VirtualBox uses the hardware abstraction
+ layer (hal) to locate CD and DVD hardware.</para>
+ </sect2>
+
+ <sect2>
+ <title>Linux host floppy not found</title>
+
+ <para>The previous instructions (for CD and DVD drives) apply
+ accordingly to floppy disks, except that on older distributions
+ VirtualBox tests for <computeroutput>/dev/fd*</computeroutput> devices
+ by default, and this can be overridden with the
+ <computeroutput>VBOX_FLOPPY</computeroutput> environment
+ variable.</para>
+ </sect2>
+
+ <sect2>
+ <title>Strange guest IDE error messages when writing to CD/DVD</title>
+
+ <para>If the experimental CD/DVD writer support is enabled with an
+ incorrect VirtualBox, host or guest configuration, it is possible that
+ any attempt to access the CD/DVD writer fails and simply results in
+ guest kernel error messages (for Linux guests) or application error
+ messages (for Windows guests). VirtualBox performs the usual consistency
+ checks when a VM is powered up (in particular it aborts with an error
+ message if the device for the CD/DVD writer is not writable by the user
+ starting the VM), but it cannot detect all misconfigurations. The
+ necessary host and guest OS configuration is not specific for
+ VirtualBox, but a few frequent problems are listed here which occurred
+ in connection with VirtualBox.</para>
+
+ <para>Special care must be taken to use the correct device. The
+ configured host CD/DVD device file name (in most cases
+ <literal>/dev/cdrom</literal>) must point to the device that allows
+ writing to the CD/DVD unit. For CD/DVD writer units connected to a SCSI
+ controller or to a IDE controller that interfaces to the Linux SCSI
+ subsystem (common for some SATA controllers), this must refer to the
+ SCSI device node (e.g. <literal>/dev/scd0</literal>). Even for IDE
+ CD/DVD writer units this must refer to the appropriate SCSI CD-ROM
+ device node (e.g. <literal>/dev/scd0</literal>) if the
+ <literal>ide-scsi</literal> kernel module is loaded. This module is
+ required for CD/DVD writer support with all Linux 2.4 kernels and some
+ early 2.6 kernels. Many Linux distributions load this module whenever a
+ CD/DVD writer is detected in the system, even if the kernel would
+ support CD/DVD writers without the module. VirtualBox supports the use
+ of IDE device files (e.g. <literal>/dev/hdc</literal>), provided the
+ kernel supports this and the <literal>ide-scsi</literal> module is not
+ loaded.</para>
+
+ <para>Similar rules (except that within the guest the CD/DVD writer is
+ always an IDE device) apply to the guest configuration. Since this setup
+ is very common, it is likely that the default configuration of the guest
+ works as expected.</para>
+ </sect2>
+
+ <sect2>
+ <title>VBoxSVC IPC issues</title>
+
+ <para>On Linux, VirtualBox makes use of a custom version of Mozilla
+ XPCOM (cross platform component object model) for inter- and
+ intra-process communication (IPC). The process
+ <computeroutput>VBoxSVC</computeroutput> serves as a communication hub
+ between different VirtualBox processes and maintains the global
+ configuration, i.e. the XML database. When starting a VirtualBox
+ component, the processes <computeroutput>VBoxSVC</computeroutput> and
+ <computeroutput>VirtualBoxXPCOMIPCD</computeroutput> are started
+ automatically. They are only accessible from the user account they are
+ running under. <computeroutput>VBoxSVC</computeroutput> owns the
+ VirtualBox configuration database which normally resides in
+ <computeroutput>~/.VirtualBox</computeroutput>. While it is running, the
+ configuration files are locked. Communication between the various
+ VirtualBox components and <computeroutput>VBoxSVC</computeroutput> is
+ performed through a local domain socket residing in
+ <computeroutput>/tmp/.vbox-&lt;username&gt;-ipc</computeroutput>. In
+ case there are communication problems (i.e. a VirtualBox application
+ cannot communicate with <computeroutput>VBoxSVC</computeroutput>),
+ terminate the daemons and remove the local domain socket
+ directory.</para>
+ </sect2>
+
+ <sect2 id="ts_usb-linux">
+ <title>USB not working</title>
+
+ <para>If USB is not working on your Linux host, make sure that the
+ current user is a member of the
+ <computeroutput>vboxusers</computeroutput> group. On older hosts, you
+ need to make sure that the user has permission to access the USB
+ filesystem (<computeroutput>usbfs</computeroutput>), which VirtualBox
+ relies on to retrieve valid information about your host's USB devices.
+ The rest of this section only applies to those older systems.</para>
+
+ <para>As <computeroutput>usbfs</computeroutput> is a virtual filesystem,
+ a <computeroutput>chmod</computeroutput> on
+ <computeroutput>/proc/bus/usb</computeroutput> has no effect. The
+ permissions for <computeroutput>usbfs</computeroutput> can therefore
+ <emphasis>only</emphasis> be changed by editing the
+ <computeroutput>/etc/fstab</computeroutput> file.</para>
+
+ <para>For example, most Linux distributions have a user group called
+ <computeroutput>usb</computeroutput> or similar, of which the current
+ user must be a member. To give all users of that group access to usbfs,
+ make sure the following line is present:<screen># 85 is the USB group
+none /proc/bus/usb usbfs devgid=85,devmode=664 0 0</screen>Replace
+ 85 with the group ID that matches your system (search
+ <computeroutput>/etc/group</computeroutput> for "usb" or similar).
+ Alternatively, if you don't mind the security hole, give all users
+ access to USB by changing "664" to "666".</para>
+
+ <para>The various distributions are very creative from which script the
+ <computeroutput>usbfs</computeroutput> filesystem is mounted. Sometimes
+ the command is hidden in unexpected places. For SuSE 10.0 the mount
+ command is part of the udev configuration file
+ <computeroutput>/etc/udev/rules.d/50-udev.rules</computeroutput>. As
+ this distribution has no user group called
+ <computeroutput>usb</computeroutput>, you may e.g. use the
+ <computeroutput>vboxusers</computeroutput> group which was created by
+ the VirtualBox installer. Since group numbers are allocated dynamically,
+ the following example uses 85 as a placeholder. Modify the line
+ containing (a linebreak has been inserted to improve
+ readability)<screen>DEVPATH="/module/usbcore", ACTION=="add",
+ RUN+="/bin/mount -t usbfs usbfs /proc/bus/usb"</screen> and add the
+ necessary options (make sure that everything is in a single
+ line):<screen>DEVPATH="/module/usbcore", ACTION=="add",
+ RUN+="/bin/mount -t usbfs usbfs /proc/bus/usb -o devgid=85,devmode=664"</screen></para>
+
+ <para>Debian Etch has the mount command in
+ <computeroutput>/etc/init.d/mountkernfs.sh</computeroutput>. Since that
+ distribution has no group <computeroutput>usb</computeroutput>, it is
+ also the easiest solution to allow all members of the group
+ <computeroutput>vboxusers</computeroutput> to access the USB subsystem.
+ Modify the line <screen>domount usbfs usbdevfs /proc/bus/usb -onoexec,nosuid,nodev</screen>
+ so that it contains <screen>domount usbfs usbdevfs /proc/bus/usb -onoexec,nosuid,nodev,devgid=85,devmode=664</screen>
+ As usual, replace the 85 with the actual group number which should get
+ access to USB devices.</para>
+
+ <para>Other distributions do similar operations in scripts stored in the
+ <computeroutput>/etc/init.d</computeroutput> directory.</para>
+ </sect2>
+
+ <sect2>
+ <title>PAX/grsec kernels</title>
+
+ <para>Linux kernels including the grsec patch (see <literal><ulink
+ url="http://www.grsecurity.net/">http://www.grsecurity.net/</ulink></literal>)
+ and derivates have to disable PAX_MPROTECT for the VBox binaries to be
+ able to start a VM. The reason is that VBox has to create executable
+ code on anonymous memory.</para>
+ </sect2>
+
+ <sect2>
+ <title>Linux kernel vmalloc pool exhausted</title>
+
+ <para>When running a large number of VMs with a lot of RAM on a Linux
+ system (say 20 VMs with 1GB of RAM each), additional VMs might fail to
+ start with a kernel error saying that the vmalloc pool is exhausted and
+ should be extended. The error message also tells you to specify
+ <computeroutput>vmalloc=256MB</computeroutput> in your kernel parameter
+ list. If adding this parameter to your GRUB or LILO configuration makes
+ the kernel fail to boot (with a weird error message such as "failed to
+ mount the root partition"), then you have probably run into a memory
+ conflict of your kernel and initial RAM disk. This can be solved by
+ adding the following parameter to your GRUB configuration:</para>
+
+ <screen>uppermem 524288</screen>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Solaris hosts</title>
+
+ <sect2>
+ <title>Cannot start VM, not enough contiguous memory</title>
+
+ <para>The ZFS file system is known to use all available RAM as cache if
+ the default system settings are not changed. This may lead to a heavy
+ fragmentation of the host memory preventing VirtualBox VMs from being
+ started. We recommend to limit the ZFS cache by adding a line<screen>set zfs:zfs_arc_max = xxxx</screen>
+ to /etc/system where <computeroutput>xxxx</computeroutput> bytes is the
+ amount of memory usable for the ZFS cache.</para>
+ </sect2>
+
+ <sect2>
+ <title>VM aborts with out of memory errors on Solaris 10 hosts</title>
+
+ <para>32-bit Solaris 10 hosts (bug 1225025) require swap space equal to,
+ or greater than the host's physical memory size. For example, 8 GB
+ physical memory would require at least 8 GB swap. This can be configured
+ during a Solaris 10 install by choosing a 'custom install' and changing
+ the default partitions.</para>
+
+ <note>
+ <para>This restriction applies only to 32-bit Solaris hosts, 64-bit
+ hosts are not affected!</para>
+ </note>
+
+ <para>For existing Solaris 10 installs, an additional swap image needs
+ to be mounted and used as swap. Hence if you have 1 GB swap and 8 GB of
+ physical memory, you require to add 7 GB more swap. This can be done as
+ follows:</para>
+
+ <para>For ZFS (as root user):</para>
+
+ <para><screen>zfs create -V 8gb /_&lt;ZFS volume&gt;_/swap
+swap -a /dev/zvol/dsk/_&lt;ZFS volume&gt;_/swap</screen></para>
+
+ <para>To mount if after reboot, add the following line to
+ /etc/vfstab:</para>
+
+ <screen>/dev/zvol/dsk/_&lt;ZFS volume&gt;_/swap - - swap - no -</screen>
+
+ <para>Alternatively, you could grow the existing swap using:</para>
+
+ <screen>zfs set volsize=8G rpool/swap</screen>
+
+ <para>And reboot the system for the changes to take effect.</para>
+
+ <para>For UFS (as root user):</para>
+
+ <screen>mkfile 7g /path/to/swapfile.img
+swap -a /path/to/swapfile.img</screen>
+
+ <para>To mount it after reboot, add the following line to
+ /etc/vfstab:</para>
+
+ <screen>/path/to/swap.img - - swap - no -</screen>
+ </sect2>
+ </sect1>
+</chapter>
diff --git a/doc/manual/en_US/user_VBoxManage.xml b/doc/manual/en_US/user_VBoxManage.xml
new file mode 100644
index 00000000..bac32c6f
--- /dev/null
+++ b/doc/manual/en_US/user_VBoxManage.xml
@@ -0,0 +1,3578 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<chapter id="vboxmanage">
+ <title>VBoxManage</title>
+
+ <sect1>
+ <title>Introduction</title>
+
+ <para>As briefly mentioned in <xref linkend="frontends" />, VBoxManage is
+ the command-line interface to VirtualBox. With it, you can completely
+ control VirtualBox from the command line of your host operating system.
+ VBoxManage supports all the features that the graphical user interface
+ gives you access to, but it supports a lot more than that. It exposes
+ really all the features of the virtualization engine, even those that
+ cannot (yet) be accessed from the GUI.</para>
+
+ <para>You will need to use the command line if you want to</para>
+
+ <para><itemizedlist>
+ <listitem>
+ <para>use a different user interface than the main GUI (for example,
+ VBoxSDL or the VBoxHeadless server);</para>
+ </listitem>
+
+ <listitem>
+ <para>control some of the more advanced and experimental
+ configuration settings for a VM.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>There are two main things to keep in mind when using
+ <computeroutput>VBoxManage</computeroutput>: First,
+ <computeroutput>VBoxManage</computeroutput> must always be used with a
+ specific "subcommand", such as "list" or "createvm" or "startvm". All the
+ subcommands that <computeroutput>VBoxManage</computeroutput> supports are
+ described in detail in <xref linkend="vboxmanage" />.</para>
+
+ <para>Second, most of these subcommands require that you specify a
+ particular virtual machine after the subcommand. There are two ways you
+ can do this:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>You can specify the VM name, as it is shown in the VirtualBox
+ GUI. Note that if that name contains spaces, then you must enclose the
+ entire name in double quotes (as it is always required with command
+ line arguments that contain spaces).</para>
+
+ <para>For example:<screen>VBoxManage startvm "Windows XP"</screen></para>
+ </listitem>
+
+ <listitem>
+ <para>You can specify the UUID, which is the internal unique
+ identifier that VirtualBox uses to refer to the virtual machine.
+ Assuming that the aforementioned VM called "Windows XP" has the UUID
+ shown below, the following command has the same effect as the
+ previous:<screen>VBoxManage startvm 670e746d-abea-4ba6-ad02-2a3b043810a5</screen></para>
+ </listitem>
+ </itemizedlist>
+
+ <para>You can type <computeroutput>VBoxManage list vms</computeroutput> to
+ have all currently registered VMs listed with all their settings,
+ including their respective names and UUIDs.</para>
+
+ <para>Some typical examples of how to control VirtualBox from the command
+ line are listed below:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>To create a new virtual machine from the command line and
+ immediately register it with VirtualBox, use
+ <computeroutput>VBoxManage createvm</computeroutput> with the
+ <computeroutput>--register</computeroutput> option,<footnote>
+ <para>For details, see <xref
+ linkend="vboxmanage-createvm" />.</para>
+ </footnote> like this:</para>
+
+ <screen>$ VBoxManage createvm --name "SUSE 10.2" --register
+VirtualBox Command Line Management Interface Version $VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILD
+(C) 2005-$VBOX_C_YEAR $VBOX_VENDOR
+All rights reserved.
+
+Virtual machine 'SUSE 10.2' is created.
+UUID: c89fc351-8ec6-4f02-a048-57f4d25288e5
+Settings file: '/home/username/.VirtualBox/Machines/SUSE 10.2/SUSE 10.2.xml'
+</screen>
+
+ <para>As can be seen from the above output, a new virtual machine has
+ been created with a new UUID and a new XML settings file.</para>
+ </listitem>
+
+ <listitem>
+ <para>To show the configuration of a particular VM, use
+ <computeroutput>VBoxManage showvminfo</computeroutput>; see <xref
+ linkend="vboxmanage-showvminfo" /> for details and an example.</para>
+ </listitem>
+
+ <listitem>
+ <para>To change settings while a VM is powered off, use
+ <computeroutput>VBoxManage modifyvm</computeroutput>, e.g. as
+ follows:<screen>VBoxManage modifyvm "Windows XP" --memory "512MB"</screen></para>
+
+ <para>For details, see <xref linkend="vboxmanage-modifyvm" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>To change the storage configuration (e.g. to add a storage
+ controller and then a virtual disk), use <computeroutput>VBoxManage
+ storagectl</computeroutput> and <computeroutput>VBoxManage
+ storageattach</computeroutput>; see <xref
+ linkend="vboxmanage-storagectl" /> and <xref
+ linkend="vboxmanage-storageattach" /> for details.</para>
+ </listitem>
+
+ <listitem>
+ <para>To control VM operation, use one of the following:<itemizedlist>
+ <listitem>
+ <para>To start a VM that is currently powered off, use
+ <computeroutput>VBoxManage startvm</computeroutput>; see <xref
+ linkend="vboxmanage-startvm" /> for details.</para>
+ </listitem>
+
+ <listitem>
+ <para>To pause or save a VM that is currently running or change
+ some of its settings, use <computeroutput>VBoxManage
+ controlvm</computeroutput>; see <xref
+ linkend="vboxmanage-controlvm" /> for details.</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Commands overview</title>
+
+ <para>When running VBoxManage without parameters or when supplying an
+ invalid command line, the below syntax diagram will be shown. Note that
+ the output will be slightly different depending on the host platform; when
+ in doubt, check the output of <computeroutput>VBoxManage</computeroutput>
+ for the commands available on your particular host.</para>
+
+ <screen>$VBOX_MANAGE_OUTPUT</screen>
+
+ <para>Each time VBoxManage is invoked, only one command can be executed.
+ However, a command might support several subcommands which then can be
+ invoked in one single call. The following sections provide detailed
+ reference information on the different commands.</para>
+ </sect1>
+
+ <sect1 id="vboxmanage-general">
+ <title>General options</title>
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para><computeroutput>--version</computeroutput>: show the version of
+ this tool and exit.</para>
+ </listitem>
+ <listitem>
+ <para><computeroutput>--nologo</computeroutput>: suppress the output
+ of the logo information (useful for scripts)</para>
+ </listitem>
+ <listitem>
+ <para><computeroutput>--settingspw</computeroutput>: specifiy a settings
+ password</para>
+ </listitem>
+ <listitem>
+ <para><computeroutput>--settingspwfile</computeroutput>: specify a file
+ containing the settings password.</para>
+ </listitem>
+ </itemizedlist>
+ The settings password is used for certain settings which need to be
+ stored encrypted for security reasons. At the moment, the only encrypted
+ setting is the iSCSI initiator secret (see
+ <xref linkend="vboxmanage-storageattach" /> for details). As long as no
+ settings password is specified, this information is stored in
+ <emphasis role="bold">plain text</emphasis>. After using the
+ <computeroutput>--settingspw|--settingspwfile</computeroutput> option
+ once, it must be always used, otherwise the encrypted setting cannot
+ be unencrypted.
+ </para>
+ </sect1>
+
+ <sect1 id="vboxmanage-list">
+ <title>VBoxManage list</title>
+
+ <para>The <computeroutput>list</computeroutput> command gives relevant
+ information about your system and information about VirtualBox's current
+ settings.</para>
+
+ <para>The following subcommands are available with
+ <computeroutput>VBoxManage list</computeroutput>: <itemizedlist>
+ <listitem>
+ <para><computeroutput>vms</computeroutput> lists all virtual
+ machines currently registered with VirtualBox. By default this
+ displays a compact list with each VM's name and UUID; if you also
+ specify <computeroutput>--long</computeroutput> or
+ <computeroutput>-l</computeroutput>, this will be a detailed list as
+ with the <computeroutput>showvminfo</computeroutput> command (see
+ below).</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>runningvms</computeroutput> lists all
+ currently running virtual machines by their unique identifiers
+ (UUIDs) in the same format as with
+ <computeroutput>vms</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>ostypes</computeroutput> lists all guest
+ operating systems presently known to VirtualBox, along with the
+ identifiers used to refer to them with the
+ <computeroutput>modifyvm</computeroutput> command.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>hostdvds</computeroutput>,
+ <computeroutput>hostfloppies</computeroutput>, respectively, list
+ DVD, floppy, bridged networking and host-only networking interfaces
+ on the host, along with the name used to access them from within
+ VirtualBox.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>bridgedifs</computeroutput>,
+ <computeroutput>hostonlyifs</computeroutput> and
+ <computeroutput>dhcpservers</computeroutput>, respectively, list
+ bridged network interfaces, host-only network interfaces and DHCP
+ servers currently available on the host. Please see <xref
+ linkend="networkingdetails" /> for details on these.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>hostinfo</computeroutput> displays information
+ about the host system, such as CPUs, memory size and operating
+ system version.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>hostcpuids</computeroutput> dumps the CPUID
+ parameters for the host CPUs. This can be used for a more fine
+ grained analyis of the host's virtualization capabilities.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>hddbackends</computeroutput> lists all known
+ virtual disk back-ends of VirtualBox. For each such format (such as
+ VDI, VMDK or RAW), this lists the back-end's capabilities and
+ configuration.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>hdds</computeroutput>,
+ <computeroutput>dvds</computeroutput> and
+ <computeroutput>floppies</computeroutput> all give you information
+ about virtual disk images currently in use by VirtualBox, including
+ all their settings, the unique identifiers (UUIDs) associated with
+ them by VirtualBox and all files associated with them. This is the
+ command-line equivalent of the Virtual Media Manager; see <xref
+ linkend="vdis" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>usbhost</computeroutput> supplies information
+ about USB devices attached to the host, notably information useful
+ for constructing USB filters and whether they are currently in use
+ by the host.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>usbfilters</computeroutput> lists all global
+ USB filters registered with VirtualBox -- that is, filters for
+ devices which are accessible to all virtual machines -- and displays
+ the filter parameters.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>systemproperties</computeroutput> displays
+ some global VirtualBox settings, such as minimum and maximum guest
+ RAM and virtual hard disk size, folder settings and the current
+ authentication library in use.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>extpacks</computeroutput> displays all
+ VirtualBox extension packs currently installed; see <xref
+ linkend="intro-installing" /> and <xref
+ linkend="vboxmanage-extpack" /> for more information.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect1>
+
+ <sect1 id="vboxmanage-showvminfo">
+ <title>VBoxManage showvminfo</title>
+
+ <para>The <computeroutput>showvminfo</computeroutput> command shows
+ information about a particular virtual machine. This is the same
+ information as <computeroutput>VBoxManage list vms --long</computeroutput>
+ would show for all virtual machines.</para>
+
+ <para>You will get information similar to the following:</para>
+
+ <para><screen>$ VBoxManage showvminfo "Windows XP"
+VirtualBox Command Line Management Interface Version $VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILD
+(C) 2005-$VBOX_C_YEAR $VBOX_VENDOR
+All rights reserved.
+
+Name: Windows XP
+Guest OS: Other/Unknown
+UUID: 1bf3464d-57c6-4d49-92a9-a5cc3816b7e7
+Config file: /home/username/.VirtualBox/Machines/Windows XP/Windows XP.xml
+Memory size: 512MB
+VRAM size: 12MB
+Number of CPUs: 2
+Synthetic Cpu: off
+Boot menu mode: message and menu
+Boot Device (1): DVD
+Boot Device (2): HardDisk
+Boot Device (3): Not Assigned
+Boot Device (4): Not Assigned
+ACPI: on
+IOAPIC: on
+PAE: on
+Time offset: 0 ms
+Hardw. virt.ext: on
+Hardw. virt.ext exclusive: on
+Nested Paging: on
+VT-x VPID: off
+State: powered off (since 2009-10-20T14:52:19.000000000)
+Monitor count: 1
+3D Acceleration: off
+2D Video Acceleration: off
+Teleporter Enabled: off
+Teleporter Port: 0
+Teleporter Address:
+Teleporter Password:
+Storage Controller (0): IDE Controller
+Storage Controller Type (0): PIIX4
+Storage Controller (1): Floppy Controller 1
+Storage Controller Type (1): I82078
+IDE Controller (0, 0): /home/user/windows.vdi (UUID: 46f6e53a-4557-460a-9b95-68b0f17d744b)
+IDE Controller (0, 1): /home/user/openbsd-cd46.iso (UUID: 4335e162-59d3-4512-91d5-b63e94eebe0b)
+Floppy Controller 1 (0, 0): /home/user/floppy.img (UUID: 62ac6ccb-df36-42f2-972e-22f836368137)
+NIC 1: disabled
+NIC 2: disabled
+NIC 3: disabled
+NIC 4: disabled
+NIC 5: disabled
+NIC 6: disabled
+NIC 7: disabled
+NIC 8: disabled
+UART 1: disabled
+UART 2: disabled
+Audio: disabled (Driver: Unknown)
+Clipboard Mode: Bidirectional
+VRDE: disabled
+USB: disabled
+
+USB Device Filters:
+&lt;none&gt;
+
+Shared folders:
+&lt;none&gt;
+
+Statistics update: disabled
+</screen></para>
+ </sect1>
+
+ <sect1 id="vboxmanage-registervm">
+ <title>VBoxManage registervm / unregistervm</title>
+
+ <para>The <computeroutput>registervm</computeroutput> command allows you
+ to import a virtual machine definition in an XML file into VirtualBox. The
+ machine must not conflict with one already registered in VirtualBox and it
+ may not have any hard or removable disks attached. It is advisable to
+ place the definition file in the machines folder before registering
+ it.<note>
+ <para>When creating a new virtual machine with
+ <computeroutput>VBoxManage createvm</computeroutput> (see below), you
+ can directly specify the <computeroutput>--register</computeroutput>
+ option to avoid having to register it separately.</para>
+ </note></para>
+
+ <para>The <computeroutput>unregistervm</computeroutput> command
+ unregisters a virtual machine. If
+ <computeroutput>--delete</computeroutput> is also specified, the following
+ files will automatically be deleted as well:<orderedlist>
+ <listitem>
+ <para>all hard disk image files, including differencing files, which
+ are used by the machine and not shared with other machines;</para>
+ </listitem>
+
+ <listitem>
+ <para>saved state files that the machine created, if any (one if the
+ machine was in "saved" state and one for each online
+ snapshot);</para>
+ </listitem>
+
+ <listitem>
+ <para>the machine XML file and its backups;</para>
+ </listitem>
+
+ <listitem>
+ <para>the machine log files, if any;</para>
+ </listitem>
+
+ <listitem>
+ <para>the machine directory, if it is empty after having deleted all
+ the above.</para>
+ </listitem>
+ </orderedlist></para>
+ </sect1>
+
+ <sect1>
+ <title id="vboxmanage-createvm">VBoxManage createvm</title>
+
+ <para>This command creates a new XML virtual machine definition
+ file.</para>
+
+ <para>The <computeroutput>--name &lt;name&gt;</computeroutput> parameter
+ is required and must specify the name of the machine. Since this name is
+ used by default as the file name of the settings file (with the extension
+ <computeroutput>.xml</computeroutput>) and the machine folder (a subfolder
+ of the <computeroutput>.VirtualBox/Machines</computeroutput> folder), it
+ must conform to your host operating system's requirements for file name
+ specifications. If the VM is later renamed, the file and folder names will
+ change automatically.</para>
+
+ <para>However, if the <computeroutput>--basefolder
+ &lt;path&gt;</computeroutput> option is used, the machine folder will be
+ named <computeroutput>&lt;path&gt;</computeroutput>. In this case, the
+ names of the file and the folder will not change if the virtual machine is
+ renamed.</para>
+
+ <para>By default, this command only creates the XML file without
+ automatically registering the VM with your VirtualBox installation. To
+ register the VM instantly, use the optional
+ <computeroutput>--register</computeroutput> option, or run
+ <computeroutput>VBoxManage registervm</computeroutput> separately
+ afterwards.</para>
+ </sect1>
+
+ <sect1 id="vboxmanage-modifyvm">
+ <title>VBoxManage modifyvm</title>
+
+ <para>This command changes the properties of a registered virtual machine
+ which is not running. Most of the properties that this command makes
+ available correspond to the VM settings that VirtualBox graphical user
+ interface displays in each VM's "Settings" dialog; these were described in
+ <xref linkend="BasicConcepts" />. Some of the more advanced settings,
+ however, are only available through the
+ <computeroutput>VBoxManage</computeroutput> interface.</para>
+
+ <para>These commands require that the machine is powered off (neither
+ running nor in "saved" state). Some machine settings can also be changed
+ while a machine is running; those settings will then have a corresponding
+ subcommand with the <computeroutput>VBoxManage controlvm</computeroutput>
+ subcommand (see <xref linkend="vboxmanage-controlvm" />).</para>
+
+ <sect2>
+ <title>General settings</title>
+
+ <para>The following general settings are available through
+ <computeroutput>VBoxManage modifyvm</computeroutput>:<itemizedlist>
+ <listitem>
+ <para><computeroutput>--name &lt;name&gt;</computeroutput>: This
+ changes the VM's name and possibly renames the internal virtual
+ machine files, as described with <computeroutput>VBoxManage
+ createvm</computeroutput> above.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--ostype &lt;ostype&gt;</computeroutput>:
+ This specifies what guest operating system is supposed to run in
+ the VM. To learn about the various identifiers that can be used
+ here, use <computeroutput>VBoxManage list
+ ostypes</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--memory
+ &lt;memorysize&gt;</computeroutput>: This sets the amount of RAM,
+ in MB, that the virtual machine should allocate for itself from
+ the host. See the remarks in <xref linkend="gui-createvm" /> for
+ more information.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--vram &lt;vramsize&gt;</computeroutput>:
+ This sets the amount of RAM that the virtual graphics card should
+ have. See <xref linkend="settings-display" /> for details.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--acpi on|off</computeroutput>;
+ <computeroutput>--ioapic on|off</computeroutput>: These two
+ determine whether the VM should have ACPI and I/O APIC support,
+ respectively; see <xref linkend="settings-motherboard" /> for
+ details.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--hardwareuuid
+ &lt;uuid&gt;</computeroutput>: The UUID presented to the guest via
+ memory tables (DMI/SMBIOS), hardware and guest properties. By
+ default this is the same as the VM uuid. Useful when cloning a VM.
+ Teleporting takes care of this automatically.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--cpus &lt;cpucount&gt;</computeroutput>:
+ This sets the number of virtual CPUs for the virtual machine (see
+ <xref linkend="settings-processor" />). If CPU hot-plugging is
+ enabled (see below), this then sets the
+ <emphasis>maximum</emphasis> number of virtual CPUs that can be
+ plugged into the virtual machines.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--rtcuseutc on|off</computeroutput>: This
+ option lets the real-time clock (RTC) operate in UTC time (see
+ <xref linkend="settings-motherboard" />).</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--cpuhotplug on|off</computeroutput>: This
+ enables CPU hot-plugging. When enabled, virtual CPUs can be added
+ to and removed from a virtual machine while it is running. See
+ <xref linkend="cpuhotplug" /> for more information.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--plugcpu|unplugcpu
+ &lt;id&gt;</computeroutput>: If CPU hot-plugging is enabled (see
+ above), this adds a virtual CPU to the virtual machines (or
+ removes one). <computeroutput>&lt;id&gt;</computeroutput>
+ specifies the index of the virtual CPU to be added or removed and
+ must be a number from 0 to the maximum no. of CPUs configured with
+ the <computeroutput>--cpus</computeroutput> option. CPU 0 can
+ never be removed.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--cpuexecutioncap
+ &lt;1-100&gt;</computeroutput>: This setting controls how much cpu
+ time a virtual CPU can use. A value of 50 implies a single virtual
+ CPU can use up to 50% of a single host CPU.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--synthcpu on|off</computeroutput>: This
+ setting determines whether VirtualBox will expose a synthetic CPU
+ to the guest to allow live migration between host systems that
+ differ significantly.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--pae on|off</computeroutput>: This
+ enables/disables PAE (see <xref
+ linkend="settings-processor" />).</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--hpet on|off</computeroutput>: This
+ enables/disables a High Precision Event Timer (HPET) which can
+ replace the legacy system timers. This is turned off by default.
+ Note that Windows supports a HPET only from Vista onwards.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--hwvirtex on|off</computeroutput>: This
+ enables or disables the use of hardware virtualization extensions
+ (Intel VT-x or AMD-V) in the processor of your host system; see
+ <xref linkend="hwvirt" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--hwvirtexexcl on|off</computeroutput>: This
+ specifies whether VirtualBox will make exclusive use of the
+ hardware virtualization extensions (Intel VT-x or AMD-V) in the
+ processor of your host system; see <xref linkend="hwvirt" />. If
+ you wish to simultaneously share these extensions with other
+ hypervisors, then you must disable this setting. Doing so has
+ negative performance implications.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--nestedpaging on|off</computeroutput>: If
+ hardware virtualization is enabled, this additional setting
+ enables or disables the use of the nested paging feature in the
+ processor of your host system; see <xref
+ linkend="hwvirt" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--largepages on|off</computeroutput>: If
+ hardware virtualization <emphasis>and</emphasis> nested paging are
+ enabled, for Intel VT-x only, an additional performance
+ improvement of up to 5% can be obtained by enabling this setting.
+ This causes the hypervisor to use large pages to reduce TLB use
+ and overhead.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--vtxvpid on|off</computeroutput>: If
+ hardware virtualization is enabled, for Intel VT-x only, this
+ additional setting enables or disables the use of the tagged TLB
+ (VPID) feature in the processor of your host system; see <xref
+ linkend="hwvirt" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--accelerate3d on|off</computeroutput>: This
+ enables, if the Guest Additions are installed, whether hardware 3D
+ acceleration should be available; see <xref
+ linkend="guestadd-3d" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>You can influence the BIOS logo that is displayed when a
+ virtual machine starts up with a number of settings. Per default,
+ a VirtualBox logo is displayed.</para>
+
+ <para>With <computeroutput>--bioslogofadein
+ on|off</computeroutput> and <computeroutput>--bioslogofadeout
+ on|off</computeroutput>, you can determine whether the logo should
+ fade in and out, respectively.</para>
+
+ <para>With <computeroutput>--bioslogodisplaytime
+ &lt;msec&gt;</computeroutput> you can set how long the logo should
+ be visible, in milliseconds.</para>
+
+ <para>With <computeroutput>--bioslogoimagepath
+ &lt;imagepath&gt;</computeroutput> you can, if you are so
+ inclined, replace the image that is shown, with your own logo. The
+ image must be an uncompressed 256 color BMP file.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--biosbootmenu
+ disabled|menuonly|messageandmenu</computeroutput>: This specifies
+ whether the BIOS allows the user to select a temporary boot
+ device. <computeroutput>menuonly</computeroutput> suppresses the
+ message, but the user can still press F12 to select a temporary
+ boot device.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--nicbootprio&lt;1-N&gt;
+ &lt;priority&gt;</computeroutput>: This specifies the order in which
+ NICs are tried for booting over the network (using PXE). The
+ priority is an integer in the 0 to 4 range. Priority 1 is the
+ highest, priority 4 is low. Priority 0, which is the default unless
+ otherwise specified, is the lowest.
+ </para>
+ <para> Note that this option only has effect when the Intel PXE boot
+ ROM is used.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--boot&lt;1-4&gt;
+ none|floppy|dvd|disk|net</computeroutput>: This specifies the boot
+ order for the virtual machine. There are four "slots", which the
+ VM will try to access from 1 to 4, and for each of which you can
+ set a device that the VM should attempt to boot from.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--snapshotfolder
+ default|&lt;path&gt;</computeroutput>: This allows you to specify
+ the folder in which snapshots will be kept for a virtual
+ machine.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--firmware efi|bios</computeroutput>:
+ Specifies which firmware is used to boot particular virtual
+ machine: EFI or BIOS. Use EFI only if your fully understand what
+ you're doing.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--guestmemoryballoon
+ &lt;size&gt;</computeroutput> sets the default size of the guest
+ memory balloon, that is, memory allocated by the VirtualBox Guest
+ Additions from the guest operating system and returned to the
+ hypervisor for re-use by other virtual machines. &lt;size&gt; must
+ be specified in megabytes. The default size is 0 megabytes. For
+ details, see <xref linkend="guestadd-balloon" />.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect2>
+
+ <sect2>
+ <title>Networking settings</title>
+
+ <para>The following networking settings are available through
+ <computeroutput>VBoxManage modifyvm</computeroutput>. With all these
+ settings, the decimal number directly following the option name ("1-N"
+ in the list below) specifies the virtual network adapter whose settings
+ should be changed.<itemizedlist>
+ <listitem>
+ <para><computeroutput>--nic&lt;1-N&gt;
+ none|null|nat|bridged|intnet|hostonly|generic
+ </computeroutput>: With
+ this, you can set, for each of the VM's virtual network cards,
+ what type of networking should be available. They can be not
+ present (<computeroutput>none</computeroutput>), not connected to
+ the host (<computeroutput>null</computeroutput>), use network
+ address translation (<computeroutput>nat</computeroutput>),
+ bridged networking (<computeroutput>bridged</computeroutput>) or
+ communicate with other virtual machines using internal networking
+ (<computeroutput>intnet</computeroutput>), host-only networking
+ (<computeroutput>hostonly</computeroutput>), or access rarely used
+ sub-modes (<computeroutput>generic</computeroutput>).
+ These options correspond
+ to the modes which are described in detail in <xref
+ linkend="networkingmodes" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--nictype&lt;1-N&gt;
+ Am79C970A|Am79C973|82540EM|82543GC|82545EM|virtio</computeroutput>:
+ This allows you, for each of the VM's virtual network cards, to
+ specify which networking hardware VirtualBox presents to the
+ guest; see <xref linkend="nichardware" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--cableconnected&lt;1-N&gt;
+ on|off</computeroutput>: This allows you to temporarily disconnect
+ a virtual network interface, as if a network cable had been pulled
+ from a real network card. This might be useful for resetting
+ certain software components in the VM.</para>
+ </listitem>
+
+ <listitem>
+ <para>With the "nictrace" options, you can optionally trace
+ network traffic by dumping it to a file, for debugging
+ purposes.</para>
+
+ <para>With <computeroutput>--nictrace&lt;1-N&gt;
+ on|off</computeroutput>, you can enable network tracing for a
+ particular virtual network card.</para>
+
+ <para>If enabled, you must specify with
+ <computeroutput>--nictracefile&lt;1-N&gt;
+ &lt;filename&gt;</computeroutput> what file the trace should be
+ logged to.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--bridgeadapter&lt;1-N&gt;
+ none|&lt;devicename&gt;</computeroutput>: If bridged networking
+ has been enabled for a virtual network card (see the
+ <computeroutput>--nic</computeroutput> option above; otherwise
+ this setting has no effect), use this option to specify which host
+ interface the given virtual network interface will use. For
+ details, please see <xref linkend="network_bridged" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--hostonlyadapter&lt;1-N&gt;
+ none|&lt;devicename&gt;</computeroutput>: If host-only networking
+ has been enabled for a virtual network card (see the --nic option
+ above; otherwise this setting has no effect), use this option to
+ specify which host-only networking interface the given virtual
+ network interface will use. For details, please see <xref
+ linkend="network_hostonly" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--intnet&lt;1-N&gt;
+ network</computeroutput>: If internal networking has been enabled
+ for a virtual network card (see the
+ <computeroutput>--nic</computeroutput> option above; otherwise
+ this setting has no effect), use this option to specify the name
+ of the internal network (see <xref
+ linkend="network_internal" />).</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--macaddress&lt;1-N&gt;
+ auto|&lt;mac&gt;</computeroutput>: With this option you can set
+ the MAC address of the virtual network card. Normally, each
+ virtual network card is assigned a random address by VirtualBox at
+ VM creation.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--nicgenericdrv&lt;1-N&gt;
+ &lt;backend driver&gt;</computeroutput>: If generic networking has been
+ enabled for a virtual network card (see the
+ <computeroutput>--nic</computeroutput> option above; otherwise
+ this setting has no effect), this mode allows you to access
+ rarely used networking sub-modes, such as VDE network or UDP Tunnel.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--nicproperty&lt;1-N&gt;
+ &lt;paramname&gt;="paramvalue"</computeroutput>:
+ This option, in combination with "nicgenericdrv" allows you to
+ pass parameters to rarely-used network backends.</para><para>
+ Those parameters are backend engine-specific, and are different
+ between UDP Tunnel and the VDE backend drivers. For example,
+ please see <xref linkend="network_udp_tunnel" />.
+ </para>
+ </listitem>
+ </itemizedlist></para>
+
+ <sect3>
+ <title>NAT Networking settings.</title>
+
+ <para>The following NAT networking settings are available through
+ <computeroutput>VBoxManage modifyvm</computeroutput>. With all these
+ settings, the decimal number directly following the option name ("1-N"
+ in the list below) specifies the virtual network adapter whose
+ settings should be changed.<itemizedlist>
+ <listitem>
+ <para><computeroutput>--natpf&lt;1-N&gt;
+ [&lt;name&gt;],tcp|udp,[&lt;hostip&gt;],&lt;hostport&gt;,[&lt;guestip&gt;],
+ &lt;guestport&gt;</computeroutput>: This option defines a NAT
+ port-forwarding rule (please see <xref linkend="natforward" />
+ for details).</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--natpf&lt;1-N&gt; delete
+ &lt;name&gt;</computeroutput>: This option deletes a NAT
+ port-forwarding rule (please see <xref linkend="natforward" />
+ for details).</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--nattftpprefix&lt;1-N&gt;
+ &lt;prefix&gt;</computeroutput>: This option defines a prefix
+ for the built-in TFTP server, i.e. where the boot file is
+ located (please see <xref linkend="nat-tftp" /> and <xref
+ linkend="nat-adv-tftp" /> for details).</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--nattftpfile&lt;1-N&gt;
+ &lt;bootfile&gt;</computeroutput>: This option defines the TFT
+ boot file (please see <xref linkend="nat-adv-tftp" /> for
+ details).</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--nattftpserver&lt;1-N&gt;
+ &lt;tftpserver&gt;</computeroutput>: This option defines the
+ TFTP server address to boot from (please see <xref
+ linkend="nat-adv-tftp" /> for details).</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--natdnspassdomain&lt;1-N&gt;
+ on|off</computeroutput>: This option specifies whether the
+ built-in DHCP server passes the domain name for network name
+ resolution.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--natdnsproxy&lt;1-N&gt;
+ on|off</computeroutput>: This option makes the NAT engine proxy
+ all guest DNS requests to the host's DNS servers (please see
+ <xref linkend="nat-adv-dns" /> for details).</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--natdnshostresolver&lt;1-N&gt;
+ on|off</computeroutput>: This option makes the NAT engine use
+ the host's resolver mechanisms to handle DNS requests (please
+ see <xref linkend="nat-adv-dns" /> for details).</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--natnatsettings&lt;1-N&gt;
+ [&lt;mtu&gt;],[&lt;socksnd&gt;],[&lt;sockrcv&gt;],[&lt;tcpsnd&gt;],
+ [&lt;tcprcv&gt;]</computeroutput>: This option controls several
+ NAT settings (please see <xref linkend="nat-adv-settings" /> for
+ details).</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--nataliasmode&lt;1-N&gt;
+ default|[log],[proxyonly],[sameports]</computeroutput>: This
+ option defines behaviour of NAT engine core: log - enables
+ logging, proxyonly - switches of aliasing mode makes NAT
+ transparent, sameports enforces NAT engine to send packets via
+ the same port as they originated on, default - disable all
+ mentioned modes above . (please see <xref
+ linkend="nat-adv-alias" /> for details).</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect3>
+ </sect2>
+
+ <sect2 id="vboxmanage-modifyvm-other">
+ <title>Serial port, audio, clipboard, remote desktop and USB
+ settings</title>
+
+ <para>The following other hardware settings are available through
+ <computeroutput>VBoxManage modifyvm</computeroutput>:<itemizedlist>
+ <listitem>
+ <para><computeroutput>--uart&lt;1-N&gt; off|&lt;I/O base&gt;
+ &lt;IRQ&gt;</computeroutput>: With this option you can configure
+ virtual serial ports for the VM; see <xref
+ linkend="serialports" /> for an introduction.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--uartmode&lt;1-N&gt;
+ &lt;arg&gt;</computeroutput>: This setting controls how VirtualBox
+ connects a given virtual serial port (previously configured with
+ the <computeroutput>--uartX</computeroutput> setting, see above)
+ to the host on which the virtual machine is running. As described
+ in detail in <xref linkend="serialports" />, for each such port,
+ you can specify <computeroutput>&lt;arg&gt;</computeroutput> as
+ one of the following options:<itemizedlist>
+ <listitem>
+ <para><computeroutput>disconnected</computeroutput>: Even
+ though the serial port is shown to the guest, it has no
+ "other end" -- like a real COM port without a cable.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>server
+ &lt;pipename&gt;</computeroutput>: On a Windows host, this
+ tells VirtualBox to create a named pipe on the host named
+ <computeroutput>&lt;pipename&gt;</computeroutput> and
+ connect the virtual serial device to it. Note that Windows
+ requires that the name of a named pipe begin with
+ <computeroutput>\\.\pipe\</computeroutput>.</para>
+
+ <para>On a Linux host, instead of a named pipe, a local
+ domain socket is used.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>client
+ &lt;pipename&gt;</computeroutput>: This operates just like
+ <computeroutput>server ...</computeroutput>, except that the
+ pipe (or local domain socket) is not created by VirtualBox,
+ but assumed to exist already.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>&lt;devicename&gt;</computeroutput>:
+ If, instead of the above, the device name of a physical
+ hardware serial port of the host is specified, the virtual
+ serial port is connected to that hardware port. On a Windows
+ host, the device name will be a COM port such as
+ <computeroutput>COM1</computeroutput>; on a Linux host, the
+ device name will look like
+ <computeroutput>/dev/ttyS0</computeroutput>. This allows you
+ to "wire" a real serial port to a virtual machine.</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--audio none|null|oss</computeroutput>: With
+ this option, you can set whether the VM should have audio
+ support.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--clipboard
+ disabled|hosttoguest|guesttohost|bidirectional</computeroutput>:
+ With this setting, you can select whether the guest operating
+ system's clipboard should be shared with the host; see <xref
+ linkend="generalsettings" />. This requires that the Guest
+ Additions be installed in the virtual machine.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--monitorcount
+ &lt;count&gt;</computeroutput>: This enables multi-monitor
+ support; see <xref linkend="settings-display" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--usb on|off</computeroutput>: This option
+ enables or disables the VM's virtual USB controller; see <xref
+ linkend="settings-usb" /> for details.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--usbehci on|off</computeroutput>: This
+ option enables or disables the VM's virtual USB 2.0 controller;
+ see <xref linkend="settings-usb" /> for details.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect2>
+
+ <sect2>
+ <title>Remote machine settings</title>
+
+ <para>The following settings that affect remote machine behavior are
+ available through <computeroutput>VBoxManage
+ modifyvm</computeroutput>:<itemizedlist>
+ <listitem>
+ <para><computeroutput>--vrde on|off</computeroutput>: With the
+ VirtualBox graphical user interface, this enables or disables the
+ VirtualBox remote desktop extension (VRDE) server. Note that if
+ you are using <computeroutput>VBoxHeadless</computeroutput> (see
+ <xref linkend="vboxheadless" />), VRDE is enabled by
+ default.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--vrdeport
+ default|&lt;ports&gt;</computeroutput>: A port or a range of ports
+ the VRDE server can bind to; "default" or "0" means port 3389, the
+ standard port for RDP. You can specify a comma-separated list of
+ ports or ranges of ports. Use a dash between two port numbers to
+ specify a range. The VRDE server will bind to <emphasis
+ role="bold">one</emphasis> of available ports from the specified
+ list. Only one machine can use a given port at a time. For
+ example, the option <computeroutput> --vrdeport
+ 5000,5010-5012</computeroutput> will tell the server to bind to
+ one of following ports: 5000, 5010, 5011 or 5012.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--vrdeaddress &lt;IP
+ address&gt;</computeroutput>: The IP address of the host network
+ interface the VRDE server will bind to. If specified, the server
+ will accept connections only on the specified host network
+ interface.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--vrdeauthtype
+ null|external|guest</computeroutput>: This allows you to choose
+ whether and how authorization will be performed; see <xref
+ linkend="vbox-auth" /> for details.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--vrdemulticon on|off</computeroutput>: This
+ enables multiple connections to the same VRDE server, if the
+ server supports this feature; see <xref lang=""
+ linkend="vrde-multiconnection" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--vrdereusecon on|off</computeroutput>: This
+ specifies the VRDE server behavior when multiple connections are
+ disabled. When this option is enabled, the server will allow a new
+ client to connect and will drop the existing connection. When this
+ option is disabled (this is the default setting), a new connection
+ will not be accepted if there is already a client connected to the
+ server.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--vrdevideochannel on|off</computeroutput>:
+ This enables video redirection, if it is supported by the VRDE
+ server; see <xref lang="" linkend="vrde-videochannel" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--vrdevideochannelquality
+ &lt;percent&gt;</computeroutput>: Sets the image quality for video
+ redirection; see <xref lang=""
+ linkend="vrde-videochannel" />.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect2>
+
+ <sect2 id="vboxmanage-modifyvm-teleport">
+ <title>Teleporting settings</title>
+
+ <para>With the following commands for <computeroutput>VBoxManage
+ modifyvm</computeroutput> you can configure a machine to be a target for
+ teleporting. See <xref linkend="teleporting" /> for an
+ introduction.<itemizedlist>
+ <listitem>
+ <para><computeroutput>--teleporter on|off</computeroutput>: With
+ this setting you turn on or off whether a machine waits for a
+ teleporting request to come in on the network when it is started.
+ If "on", when the machine is started, it does not boot the virtual
+ machine as it would normally; instead, it then waits for a
+ teleporting request to come in on the port and address listed with
+ the next two parameters.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--teleporterport
+ &lt;port&gt;</computeroutput>, <computeroutput>--teleporteraddress
+ &lt;address&gt;</computeroutput>: these must be used with
+ --teleporter and tell the virtual machine on which port and
+ address it should listen for a teleporting request from another
+ virtual machine. <computeroutput>&lt;port&gt;</computeroutput> can
+ be any free TCP/IP port number (e.g. 6000);
+ <computeroutput>&lt;address&gt;</computeroutput> can be any IP
+ address or hostname and specifies the TCP/IP socket to bind to.
+ The default is "0.0.0.0", which means any address.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--teleporterpassword
+ &lt;password&gt;</computeroutput>: if this optional argument is
+ given, then the teleporting request will only succeed if the
+ source machine specifies the same password as the one given with
+ this command.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--teleporterpasswordfile
+ &lt;password&gt;</computeroutput>: if this optional argument is
+ given, then the teleporting request will only succeed if the
+ source machine specifies the same password as the one specified
+ in the file give with this command. Use <computeroutput>stdin</computeroutput>
+ to read the password from stdin.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--cpuid &lt;leaf&gt; &lt;eax&gt; &lt;ebx&gt;
+ &lt;ecx&gt; &lt;edx&gt;</computeroutput>: Advanced users can use
+ this command before a teleporting operation to restrict the
+ virtual CPU capabilities that VirtualBox presents to the guest
+ operating system. This must be run on both the source and the
+ target machines involved in the teleporting and will then modify
+ what the guest sees when it executes the
+ <computeroutput>CPUID</computeroutput> machine instruction. This
+ might help with misbehaving applications that wrongly assume that
+ certain CPU capabilities are present. The meaning of the
+ parameters is hardware dependent; please refer to the AMD or Intel
+ processor manuals.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="vboxmanage-clonevm">
+ <title>VBoxManage clonevm</title>
+
+ <para>This command creates a full or linked copy of an existing virtual
+ machine.</para>
+
+ <para>The <computeroutput>clonevm</computeroutput> subcommand takes at
+ least the name of the virtual machine which should be cloned. The following
+ additional settings can be used to further configure the clone VM
+ operation:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><computeroutput>--snapshot &lt;uuid&gt;|&lt;name&gt;</computeroutput>:
+ Select a specific snapshot where the clone operation should refer
+ to. Default is referring to the current state.</para>
+ </listitem>
+ <listitem>
+ <para><computeroutput>--mode machine|machineandchildren|all</computeroutput>:
+ Selects the cloning mode of the operation. If
+ <computeroutput>machine</computeroutput> is selected (the default),
+ the current state of the VM without any snapshots is cloned. In the
+ <computeroutput>machineandchildren</computeroutput> mode the snapshot
+ provided by <computeroutput>--snapshot</computeroutput> and all
+ child snapshots are cloned. If <computeroutput>all</computeroutput>
+ is the selected mode all snapshots and the current state are cloned.
+ </para>
+ </listitem>
+ <listitem>
+ <para><computeroutput>--options link|keepallmacs|keepnatmacs|keepdisknames</computeroutput>:
+ Allows additional fine tuning of the clone operation. The first
+ option defines that a linked clone should be created, which is
+ only possible for a machine clone from a snapshot. The next two
+ options allow to define how the MAC addresses of every virtual
+ network card should be handled. They can either be reinitialized
+ (the default), left unchanged
+ (<computeroutput>keepallmacs</computeroutput>) or left unchanged
+ when the network type is NAT
+ (<computeroutput>keepnatmacs</computeroutput>). If you add
+ <computeroutput>keepdisknames</computeroutput> all new disk images
+ are called like the original once, otherwise they are
+ renamed.</para>
+ </listitem>
+ <listitem>
+ <para><computeroutput>--name &lt;name&gt;</computeroutput>: Select a
+ new name for the new virtual machine. Default is "Original Name
+ Clone".</para>
+ </listitem>
+ <listitem>
+ <para><computeroutput>--basefolder &lt;basefolder&gt;</computeroutput>:
+ Select the folder where the new virtual machine configuration should
+ be saved in.</para>
+ </listitem>
+ <listitem>
+ <para><computeroutput>--uuid &lt;uuid&gt;</computeroutput>:
+ Select the UUID the new VM should have. This id has to be unique in
+ the VirtualBox instance this clone should be registered. Default is
+ creating a new UUID.</para>
+ </listitem>
+ <listitem>
+ <para><computeroutput>--register</computeroutput>:
+ Automatically register the new clone in this VirtualBox
+ installation. If you manually want register the new VM later, see
+ <xref linkend="vboxmanage-registervm" /> for instructions how to do
+ so.</para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1 id="vboxmanage-import">
+ <title>VBoxManage import</title>
+
+ <para>This command imports a virtual appliance in OVF format by copying
+ the virtual disk images and creating virtual machines in VirtualBox. See
+ <xref linkend="ovf" /> for an introduction to appliances.</para>
+
+ <para>The <computeroutput>import</computeroutput> subcommand takes at
+ least the path name of an OVF file as input and expects the disk images,
+ if needed, in the same directory as the OVF file. A lot of additional
+ command-line options are supported to control in detail what is being
+ imported and modify the import parameters, but the details depend on the
+ content of the OVF file.</para>
+
+ <para>It is therefore recommended to first run the import subcommand with
+ the <computeroutput>--dry-run</computeroutput> or
+ <computeroutput>-n</computeroutput> option. This will then print a
+ description of the appliance's contents to the screen how it would be
+ imported into VirtualBox, together with the optional command-line options
+ to influence the import behavior.</para>
+
+ <para>As an example, here is the screen output with a sample appliance
+ containing a Windows XP guest:<screen>VBoxManage import WindowsXp.ovf --dry-run
+Interpreting WindowsXp.ovf...
+OK.
+Virtual system 0:
+ 0: Suggested OS type: "WindowsXP"
+ (change with "--vsys 0 --ostype &lt;type&gt;"; use "list ostypes" to list all)
+ 1: Suggested VM name "Windows XP Professional_1"
+ (change with "--vsys 0 --vmname &lt;name&gt;")
+ 3: Number of CPUs: 1
+ (change with "--vsys 0 --cpus &lt;n&gt;")
+ 4: Guest memory: 956 MB (change with "--vsys 0 --memory &lt;MB&gt;")
+ 5: Sound card (appliance expects "ensoniq1371", can change on import)
+ (disable with "--vsys 0 --unit 5 --ignore")
+ 6: USB controller
+ (disable with "--vsys 0 --unit 6 --ignore")
+ 7: Network adapter: orig bridged, config 2, extra type=bridged
+ 8: Floppy
+ (disable with "--vsys 0 --unit 8 --ignore")
+ 9: SCSI controller, type BusLogic
+ (change with "--vsys 0 --unit 9 --scsitype {BusLogic|LsiLogic}";
+ disable with "--vsys 0 --unit 9 --ignore")
+10: IDE controller, type PIIX4
+ (disable with "--vsys 0 --unit 10 --ignore")
+11: Hard disk image: source image=WindowsXp.vmdk,
+ target path=/home/user/disks/WindowsXp.vmdk, controller=9;channel=0
+ (change controller with "--vsys 0 --unit 11 --controller &lt;id&gt;";
+ disable with "--vsys 0 --unit 11 --ignore")</screen></para>
+
+ <para>As you can see, the individual configuration items are numbered, and
+ depending on their type support different command-line options. The import
+ subcommand can be directed to ignore many such items with a
+ <computeroutput>--vsys X --unit Y --ignore</computeroutput> option, where
+ X is the number of the virtual system (zero unless there are several
+ virtual system descriptions in the appliance) and Y the item number, as
+ printed on the screen.</para>
+
+ <para>In the above example, Item #1 specifies the name of the target
+ machine in VirtualBox. Items #9 and #10 specify hard disk controllers,
+ respectively. Item #11 describes a hard disk image; in this case, the
+ additional <computeroutput>--controller</computeroutput> option indicates
+ which item the disk image should be connected to, with the default coming
+ from the OVF file.</para>
+
+ <para>You can combine several items for the same virtual system behind the
+ same <computeroutput>--vsys</computeroutput> option. For example, to
+ import a machine as described in the OVF, but without the sound card and
+ without the USB controller, and with the disk image connected to the IDE
+ controller instead of the SCSI controller, use this:<screen>VBoxManage import WindowsXp.ovf
+ --vsys 0 --unit 5 --ignore --unit 6 --ignore --unit 11 --controller 10</screen></para>
+ </sect1>
+
+ <sect1 id="vboxmanage-export">
+ <title>VBoxManage export</title>
+
+ <para>This command exports one or more virtual machines from VirtualBox
+ into a virtual appliance in OVF format, including copying their virtual
+ disk images to compressed VMDK. See <xref linkend="ovf" /> for an
+ introduction to appliances.</para>
+
+ <para>The <computeroutput>export</computeroutput> command is simple to
+ use: list the machine (or the machines) that you would like to export to
+ the same OVF file and specify the target OVF file after an additional
+ <computeroutput>--output</computeroutput> or
+ <computeroutput>-o</computeroutput> option. Note that the directory of the
+ target OVF file will also receive the exported disk images in the
+ compressed VMDK format (regardless of the original format) and should have
+ enough disk space left for them.</para>
+
+ <para>Beside a simple export of a given virtual machine, you can append
+ several product information to the appliance file. Use
+ <computeroutput>--product</computeroutput>,
+ <computeroutput>--producturl</computeroutput>,
+ <computeroutput>--vendor</computeroutput>,
+ <computeroutput>--vendorurl</computeroutput> and
+ <computeroutput>--version</computeroutput> to specify this additional
+ information. For legal reasons you may add a license text or the content
+ of a license file by using the <computeroutput>--eula</computeroutput> and
+ <computeroutput>--eulafile</computeroutput> option respectively. As with
+ OVF import, you must use the <computeroutput>--vsys X</computeroutput>
+ option to direct the previously mentioned options to the correct virtual
+ machine.</para>
+
+ <para>For virtualization products which aren't fully compatible with the
+ OVF standard 1.0 you can enable a OVF 0.9 legacy mode with the
+ <computeroutput>--legacy09</computeroutput> option.</para>
+ </sect1>
+
+ <sect1 id="vboxmanage-startvm">
+ <title>VBoxManage startvm</title>
+
+ <para>This command starts a virtual machine that is currently in the
+ "Powered off" or "Saved" states.</para>
+
+ <note>
+ <para>This is provided for backwards compatibility only. We recommend to
+ start virtual machines directly by running the respective front-end, as
+ you might otherwise miss important error and state information that
+ VirtualBox may display on the console. This is especially important for
+ front-ends other than <computeroutput>VirtualBox</computeroutput>, our
+ graphical user interface, because those cannot display error messages in
+ a popup window. See <xref linkend="vboxheadless" /> for more
+ information.</para>
+ </note>
+
+ <para>The optional <computeroutput>--type</computeroutput> specifier
+ determines whether the machine will be started in a window (GUI mode,
+ which is the default) or whether the output should go through
+ <computeroutput>VBoxHeadless</computeroutput>, with VRDE enabled or not;
+ see <xref linkend="vboxheadless" /> for more information. The list of
+ types is subject to change, and it's not guaranteed that all types are
+ accepted by any product variant.</para>
+
+ <para>The following values are allowed:</para>
+
+ <glosslist>
+ <glossentry>
+ <glossterm>gui</glossterm>
+
+ <glossdef>
+ <para>Starts a VM showing a GUI window. This is the default.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>headless</glossterm>
+
+ <glossdef>
+ <para>Starts a VM without a window for remote display only.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist>
+ </sect1>
+
+ <sect1 id="vboxmanage-controlvm">
+ <title>VBoxManage controlvm</title>
+
+ <para>The <computeroutput>controlvm</computeroutput> subcommand allows you
+ to change the state of a virtual machine that is currently running. The
+ following can be specified:</para>
+
+ <para><itemizedlist>
+ <listitem>
+ <para><computeroutput>VBoxManage controlvm &lt;vm&gt;
+ pause</computeroutput> temporarily puts a virtual machine on hold,
+ without changing its state for good. The VM window will be painted
+ in gray to indicate that the VM is currently paused. (This is
+ equivalent to selecting the "Pause" item in the "Machine" menu of
+ the GUI.)</para>
+ </listitem>
+
+ <listitem>
+ <para>Use <computeroutput>VBoxManage controlvm &lt;vm&gt;
+ resume</computeroutput> to undo a previous
+ <computeroutput>pause</computeroutput> command. (This is equivalent
+ to selecting the "Resume" item in the "Machine" menu of the
+ GUI.)</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>VBoxManage controlvm &lt;vm&gt;
+ reset</computeroutput> has the same effect on a virtual machine as
+ pressing the "Reset" button on a real computer: a cold reboot of the
+ virtual machine, which will restart and boot the guest operating
+ system again immediately. The state of the VM is not saved
+ beforehand, and data may be lost. (This is equivalent to selecting
+ the "Reset" item in the "Machine" menu of the GUI.)</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>VBoxManage controlvm &lt;vm&gt;
+ poweroff</computeroutput> has the same effect on a virtual machine
+ as pulling the power cable on a real computer. Again, the state of
+ the VM is not saved beforehand, and data may be lost. (This is
+ equivalent to selecting the "Close" item in the "Machine" menu of
+ the GUI or pressing the window's close button, and then selecting
+ "Power off the machine" in the dialog.)</para>
+
+ <para>After this, the VM's state will be "Powered off". From there,
+ it can be started again; see <xref
+ linkend="vboxmanage-startvm" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>VBoxManage controlvm &lt;vm&gt;
+ savestate</computeroutput> will save the current state of the VM to
+ disk and then stop the VM. (This is equivalent to selecting the
+ "Close" item in the "Machine" menu of the GUI or pressing the
+ window's close button, and then selecting "Save the machine state"
+ in the dialog.)</para>
+
+ <para>After this, the VM's state will be "Saved". From there, it can
+ be started again; see <xref linkend="vboxmanage-startvm" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>VBoxManage controlvm &lt;vm&gt; teleport
+ --hostname &lt;name&gt; --port &lt;port&gt; [--passwordfile
+ &lt;file&gt; | --password &lt;password&gt;]</computeroutput> makes
+ the machine the source of a teleporting operation and initiates a
+ teleport to the given target. See <xref linkend="teleporting" /> for
+ an introduction. If the optional password is specified, it must match
+ the password that was given to the
+ <computeroutput>modifyvm</computeroutput> command for the target
+ machine; see <xref linkend="vboxmanage-modifyvm-teleport" /> for
+ details.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>A few extra options are available with
+ <computeroutput>controlvm</computeroutput> that do not directly affect the
+ VM's running state:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>The <computeroutput>setlinkstate&lt;1-N&gt;</computeroutput>
+ operation connects or disconnects virtual network cables from their
+ network interfaces.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>nic&lt;1-N&gt;
+ null|nat|bridged|intnet|hostonly|generic</computeroutput>: With this, you can
+ set, for each of the VM's virtual network cards, what type of
+ networking should be available. They can be not connected to the host
+ (<computeroutput>null</computeroutput>), use network address
+ translation (<computeroutput>nat</computeroutput>), bridged networking
+ (<computeroutput>bridged</computeroutput>) or communicate with other
+ virtual machines using internal networking
+ (<computeroutput>intnet</computeroutput>) or host-only networking
+ (<computeroutput>hostonly</computeroutput>) or access to rarely used
+ sub-modes
+ (<computeroutput>generic</computeroutput>). These options correspond
+ to the modes which are described in detail in <xref
+ linkend="networkingmodes" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>usbattach</computeroutput> and
+ <computeroutput>usbdettach</computeroutput> make host USB devices
+ visible to the virtual machine on the fly, without the need for
+ creating filters first. The USB devices can be specified by UUID
+ (unique identifier) or by address on the host system.</para>
+
+ <para>You can use <computeroutput>VBoxManage list
+ usbhost</computeroutput> to locate this information.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>vrde on|off</computeroutput> lets you enable or
+ disable the VRDE server, if it is installed.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>vrdeport default|&lt;ports&gt;</computeroutput>
+ changes the port or a range of ports that the VRDE server can bind to;
+ "default" or "0" means port 3389, the standard port for RDP. For
+ details, see the description for the
+ <computeroutput>--vrdeport</computeroutput> option in <xref
+ linkend="vboxmanage-modifyvm-other" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>setvideomodehint</computeroutput> requests that
+ the guest system change to a particular video mode. This requires that
+ the Guest Additions be installed, and will not work for all guest
+ systems.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>screenshotpng</computeroutput> takes a screenshot
+ of the guest display and saves it in PNG format.</para>
+ </listitem>
+
+ <listitem>
+ <para>The <computeroutput>setcredentials</computeroutput> operation is
+ used for remote logons in Windows guests. For details, please refer to
+ <xref linkend="autologon" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>The <computeroutput>guestmemoryballoon</computeroutput>
+ operation changes the size of the guest memory balloon, that is,
+ memory allocated by the VirtualBox Guest Additions from the guest
+ operating system and returned to the hypervisor for re-use by other
+ virtual machines. This must be specified in megabytes. For details,
+ see <xref linkend="guestadd-balloon" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>The <computeroutput>cpuexecutioncap
+ &lt;1-100&gt;</computeroutput>: This operation controls how much cpu
+ time a virtual CPU can use. A value of 50 implies a single virtual CPU
+ can use up to 50% of a single host CPU.</para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>VBoxManage discardstate</title>
+
+ <para>This command discards the saved state of a virtual machine which is
+ not currently running, which will cause its operating system to restart
+ next time you start it. This is the equivalent of pulling out the power
+ cable on a physical machine, and should be avoided if possible.</para>
+ </sect1>
+
+ <sect1>
+ <title>VBoxManage adoptstate</title>
+
+ <para>If you have a saved state file (<computeroutput>.sav</computeroutput>)
+ that is seperate from the VM configuration, you can use this command to
+ "adopt" the file. This will change the VM to saved state and when you
+ start it, VirtualBox will attempt to restore it from the saved state file
+ you indicated. This command should only be used in special setups.</para>
+ </sect1>
+
+ <sect1>
+ <title>VBoxManage snapshot</title>
+
+ <para>This command is used to control snapshots from the command line. A
+ snapshot consists of a complete copy of the virtual machine settings,
+ copied at the time when the snapshot was taken, and optionally a virtual
+ machine saved state file if the snapshot was taken while the machine was
+ running. After a snapshot has been taken, VirtualBox creates differencing
+ hard disk for each normal hard disk associated with the machine so that
+ when a snapshot is restored, the contents of the virtual machine's virtual
+ hard disks can be quickly reset by simply dropping the pre-existing
+ differencing files.</para>
+
+ <para>The <computeroutput>take</computeroutput> operation takes a snapshot
+ of the current state of the virtual machine. You must supply a name for
+ the snapshot and can optionally supply a description. The new snapshot is
+ inserted into the snapshots tree as a child of the current snapshot and
+ then becomes the new current snapshot.</para>
+
+ <para>The <computeroutput>delete</computeroutput> operation deletes a
+ snapshot (specified by name or by UUID). This can take a while to finish
+ since the differencing images associated with the snapshot might need to
+ be merged with their child differencing images.</para>
+
+ <para>The <computeroutput>restore</computeroutput> operation will restore
+ the given snapshot (specified by name or by UUID) by resetting the virtual
+ machine's settings and current state to that of the snapshot. The previous
+ current state of the machine will be lost. After this, the given snapshot
+ becomes the new "current" snapshot so that subsequent snapshots are
+ inserted under the snapshot from which was restored.</para>
+
+ <para>The <computeroutput>restorecurrent</computeroutput> operation is a
+ shortcut to restore the current snapshot (i.e. the snapshot from which the
+ current state is derived). This subcommand is equivalent to using the
+ "restore" subcommand with the name or UUID of the current snapshot, except
+ that it avoids the extra step of determining that name or UUID.</para>
+
+ <para>With the <computeroutput>edit</computeroutput> operation, you can
+ change the name or description of an existing snapshot.</para>
+
+ <para>With the <computeroutput>showvminfo</computeroutput> operation, you
+ can view the virtual machine settings that were stored with an existing
+ snapshot.</para>
+ </sect1>
+
+ <sect1 id="vboxmanage-closemedium">
+ <title>VBoxManage closemedium</title>
+
+ <para>This commands removes a hard disk, DVD or floppy image from a
+ VirtualBox media registry.<footnote>
+ <para>Before VirtualBox 4.0, it was necessary to call VBoxManage
+ openmedium before a medium could be attached to a virtual machine;
+ that call "registered" the medium with the global VirtualBox media
+ registry. With VirtualBox 4.0 this is no longer necessary; media are
+ added to media registries automatically. The "closemedium" call has
+ been retained, however, to allow for explicitly removing a medium from
+ a registry.</para>
+ </footnote></para>
+
+ <para>Optionally, you can request that the image be deleted. You will get
+ appropriate diagnostics that the deletion failed, however the image will
+ become unregistered in any case.</para>
+ </sect1>
+
+ <sect1>
+ <title id="vboxmanage-storageattach">VBoxManage storageattach</title>
+
+ <para>This command attaches/modifies/removes a storage medium connected to
+ a storage controller that was previously added with the
+ <computeroutput>storagectl</computeroutput> command (see the previous
+ section). The syntax is as follows:</para>
+
+ <screen>VBoxManage storageattach &lt;uuid|vmname&gt;
+ --storagectl &lt;name&gt;
+ [--port &lt;number&gt;]
+ [--device &lt;number&gt;]
+ [--type dvddrive|hdd|fdd]
+ [--medium none|emptydrive|
+ &lt;uuid&gt;|&lt;filename&gt;|host:&lt;drive&gt;|iscsi]
+ [--mtype normal|writethrough|immutable|shareable]
+ [--comment &lt;text&gt;]
+ [--setuuid &lt;uuid&gt;]
+ [--setparentuuid &lt;uuid&gt;]
+ [--passthrough on|off]
+ [--tempeject on|off]
+ [--nonrotational on|off]
+ [--discard on|off]
+ [--bandwidthgroup name|none]
+ [--forceunmount]
+ [--server &lt;name&gt;|&lt;ip&gt;]
+ [--target &lt;target&gt;]
+ [--tport &lt;port&gt;]
+ [--lun &lt;lun&gt;]
+ [--encodedlun &lt;lun&gt;]
+ [--username &lt;username&gt;]
+ [--password &lt;password&gt;]
+ [--initiator &lt;initiator&gt;]
+ [--intnet]
+</screen>
+
+ <para>A number of parameters are commonly required; the ones at the end of
+ the list are required only for iSCSI targets (see below).</para>
+
+ <para>The common parameters are:<glosslist>
+ <glossentry>
+ <glossterm>uuid|vmname</glossterm>
+
+ <glossdef>
+ <para>The VM UUID or VM Name. Mandatory.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>storagectl</glossterm>
+
+ <glossdef>
+ <para>Name of the storage controller. Mandatory. The list of the
+ storage controllers currently attached to a VM can be obtained
+ with <computeroutput>VBoxManage showvminfo</computeroutput>; see
+ <xref linkend="vboxmanage-showvminfo" />.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>port</glossterm>
+
+ <glossdef>
+ <para>The number of the storage controller's port which is to be
+ modified. Mandatory, unless the storage controller has only a
+ single port.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>device</glossterm>
+
+ <glossdef>
+ <para>The number of the port's device which is to be modified.
+ Mandatory, unless the storage controller has only a single device
+ per port.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>type</glossterm>
+
+ <glossdef>
+ <para>Define the type of the drive to which the medium is being
+ attached/detached/modified. This argument can only be omitted if
+ the type of medium can be determined from either the medium given
+ with the <computeroutput>--medium</computeroutput> argument or
+ from a previous medium attachment.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>medium</glossterm>
+
+ <glossdef>
+ <para>Specifies what is to be attached. The following values are
+ supported:<itemizedlist>
+ <listitem>
+ <para>"none": Any existing device should be removed from the
+ given slot.</para>
+ </listitem>
+
+ <listitem>
+ <para>"emptydrive": For a virtual DVD or floppy drive only,
+ this makes the device slot behaves like a removeable drive
+ into which no media has been inserted.</para>
+ </listitem>
+
+ <listitem>
+ <para>If a UUID is specified, it must be the UUID of a
+ storage medium that is already known to VirtualBox (e.g.
+ because it has been attached to another virtual machine).
+ See <xref linkend="vboxmanage-list" /> for how to list known
+ media. This medium is then attached to the given device
+ slot.</para>
+ </listitem>
+
+ <listitem>
+ <para>If a filename is specified, it must be the full path
+ of an existing disk image (ISO, RAW, VDI, VMDK or other),
+ which is then attached to the given device slot.</para>
+ </listitem>
+
+ <listitem>
+ <para>"host:&lt;drive&gt;": For a virtual DVD or floppy
+ drive only, this connects the given device slot to the
+ specified DVD or floppy drive on the host computer.</para>
+ </listitem>
+
+ <listitem>
+ <para>"iscsi": For virtual hard disks only, this allows for
+ specifying an iSCSI target. In this case, more parameters
+ must be given; see below.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>Some of the above changes, in particular for removeable
+ media (floppies and CDs/DVDs), can be effected while a VM is
+ running. Others (device changes or changes in hard disk device
+ slots) require the VM to be powered off.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>mtype</glossterm>
+
+ <glossdef>
+ <para>Defines how this medium behaves with respect to snapshots
+ and write operations. See <xref linkend="hdimagewrites" /> for
+ details.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>comment</glossterm>
+
+ <glossdef>
+ <para>Any description that you want to have stored with this
+ medium (optional; for example, for an iSCSI target, "Big storage
+ server downstairs"). This is purely descriptive and not needed for
+ the medium to function correctly.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>setuuid, setparentuuid</glossterm>
+
+ <glossdef>
+ <para>Modifies the UUID or parent UUID of a medium before
+ attaching it to a VM. This is an expert option. Inappropriate use
+ can make the medium unusable or lead to broken VM configurations
+ if any other VM is referring to the same media already. The most
+ frequently used variant is <code>--setuuid ""</code>, which assigns
+ a new (random) UUID to an image. This is useful to resolve the
+ duplicate UUID errors if one duplicated an image using file copy
+ utilities.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>passthrough</glossterm>
+
+ <glossdef>
+ <para>For a virtual DVD drive only, you can enable DVD writing
+ support (currently experimental; see <xref
+ linkend="storage-cds" />).</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>tempeject</glossterm>
+
+ <glossdef>
+ <para>For a virtual DVD drive only, you can configure the behavior
+ for guest-triggered medium eject. If this is set to "on", the eject
+ has only temporary effects. If the VM is powered off and restarted
+ the originally configured medium will be still in the drive.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>nonrotational</glossterm>
+
+ <glossdef>
+ <para>This switch allows to enable the non-rotational flag for virtual
+ hard disks. Some guests (i.e. Windows 7+) treat such disks like SSDs
+ and don't perform disk fragmentation on such media.
+ </para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>bandwidthgroup</glossterm>
+
+ <glossdef>
+ <para>Sets the bandwidth group to use for the given device; see
+ <xref linkend="storage-bandwidth-limit" />.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>forceunmount</glossterm>
+
+ <glossdef>
+ <para>For a virtual DVD or floppy drive only, this forcibly
+ unmounts the DVD/CD/Floppy or mounts a new DVD/CD/Floppy even if
+ the previous one is locked down by the guest for reading. Again,
+ see <xref linkend="storage-cds" /> for details.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+
+ <para>When "iscsi" is used with the
+ <computeroutput>--medium</computeroutput> parameter for iSCSI support --
+ see <xref linkend="storage-iscsi" /> --, additional parameters must or can
+ be used:<glosslist>
+ <glossentry>
+ <glossterm>server</glossterm>
+
+ <glossdef>
+ <para>The host name or IP address of the iSCSI target;
+ required.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>target</glossterm>
+
+ <glossdef>
+ <para>Target name string. This is determined by the iSCSI target
+ and used to identify the storage resource; required.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>tport</glossterm>
+
+ <glossdef>
+ <para>TCP/IP port number of the iSCSI service on the target
+ (optional).</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>lun</glossterm>
+
+ <glossdef>
+ <para>Logical Unit Number of the target resource (optional).
+ Often, this value is zero.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>username, password</glossterm>
+
+ <glossdef>
+ <para>Username and password (initiator secret) for target
+ authentication, if required (optional).<note>
+ <para>Username and password are stored without
+ encryption (i.e. in clear text) in the XML machine
+ configuration file if no settings password is provided.
+ When a settings password was specified the first time,
+ the password is stored encrypted.</para>
+ </note></para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>intnet</glossterm>
+
+ <glossdef>
+ <para>If specified, connect to the iSCSI target via Internal
+ Networking. This needs further configuration which is described in
+ <xref linkend="iscsi-intnet" />.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+ </sect1>
+
+ <sect1 id="vboxmanage-storagectl">
+ <title>VBoxManage storagectl</title>
+
+ <para>This command attaches/modifies/removes a storage controller. After
+ this, virtual media can be attached to the controller with the
+ <computeroutput>storageattach</computeroutput> command (see the next
+ section).</para>
+
+ <para>The syntax is as follows:</para>
+
+ <screen>VBoxManage storagectl &lt;uuid|vmname&gt;
+ --name &lt;name&gt;
+ [--add &lt;ide/sata/scsi/floppy&gt;]
+ [--controller &lt;LsiLogic|LSILogicSAS|BusLogic|
+ IntelAhci|PIIX3|PIIX4|ICH6|I82078&gt;]
+ [--sataportcount &lt;1-30&gt;]
+ [--hostiocache on|off]
+ [--bootable on|off]
+ [--remove]</screen>
+
+ <para>where the parameters mean: <glosslist>
+ <glossentry>
+ <glossterm>uuid|vmname</glossterm>
+
+ <glossdef>
+ <para>The VM UUID or VM Name. Mandatory.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>name</glossterm>
+
+ <glossdef>
+ <para>Name of the storage controller. Mandatory.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>add</glossterm>
+
+ <glossdef>
+ <para>Define the type of the system bus to which the storage
+ controller must be connected.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>controller</glossterm>
+
+ <glossdef>
+ <para>Allows to choose the type of chipset being emulated for the
+ given storage controller.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>sataportcount</glossterm>
+
+ <glossdef>
+ <para>This determines how many ports the SATA controller should
+ support.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>hostiocache</glossterm>
+
+ <glossdef>
+ <para>Configures the use of the host I/O cache for all disk images
+ attached to this storage controller. For details, please see <xref
+ linkend="iocaching" />.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>bootable</glossterm>
+
+ <glossdef>
+ <para>Selects whether this controller is bootable.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>remove</glossterm>
+
+ <glossdef>
+ <para>Removes the storage controller from the VM config.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+ </sect1>
+
+ <sect1>
+ <title>VBoxManage bandwidthctl</title>
+
+ <para>This command creates/deletes/modifies/shows bandwidth groups of the given
+ virtual machine:<screen>VBoxManage bandwidthctl &lt;uuid|vmname&gt;
+ add &lt;name&gt; --type disk|network --limit &lt;megabytes per second&gt;[k|m|g|K|M|G] |
+ set &lt;name&gt; --limit &lt;megabytes per second&gt;[k|m|g|K|M|G] |
+ remove &lt;name&gt; |
+ list [--machinereadable]</screen></para>
+
+ <para>The following subcommands are available:<itemizedlist>
+ <listitem>
+ <para><computeroutput>add</computeroutput>, creates a new bandwidth
+ group of given type.</para>
+ </listitem>
+ <listitem>
+ <para><computeroutput>set</computeroutput>, modifies the limit for an
+ existing bandwidth group.</para>
+ </listitem>
+ <listitem>
+ <para><computeroutput>remove</computeroutput>, destroys a bandwidth
+ group.</para>
+ </listitem>
+ <listitem>
+ <para><computeroutput>list</computeroutput>, shows all bandwidth groups
+ defined for the given VM.</para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ <para>The parameters mean:<glosslist>
+ <glossentry>
+ <glossterm>uuid|vmname</glossterm>
+
+ <glossdef>
+ <para>The VM UUID or VM Name. Mandatory.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>name</glossterm>
+
+ <glossdef>
+ <para>Name of the bandwidth group. Mandatory.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>type</glossterm>
+
+ <glossdef>
+ <para>Type of the bandwidth group. Mandatory. Two types are
+ supported: <computeroutput>disk</computeroutput> and
+ <computeroutput>network</computeroutput>. See
+ <xref linkend="storage-bandwidth-limit" /> or
+ <xref linkend="network_bandwidth_limit" /> for a description of a
+ particular type.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>limit</glossterm>
+
+ <glossdef>
+ <para>Specifies the limit for the given group. Can be changed
+ while the VM is running. The default unit is megabytes per
+ second. The unit can be changed by specifying one of the
+ following suffixes: <computeroutput>k</computeroutput> for kilobits/s, <computeroutput>m</computeroutput> for megabits/s, <computeroutput>g</computeroutput> for gigabits/s, <computeroutput>K</computeroutput> for kilobytes/s, <computeroutput>M</computeroutput> for megabytes/s, <computeroutput>G</computeroutput> for gigabytes/s.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist>
+ <note>
+ <para>The network bandwidth limits apply only to the traffic being sent by
+ virtual machines. The traffic being received by VMs is unlimited.</para>
+ </note>
+ <note>
+ <para>To remove a bandwidth group it must not be referenced by any disks
+ or adapters in running VM.</para>
+ </note>
+ </para>
+ </sect1>
+
+ <sect1>
+ <title>VBoxManage showhdinfo</title>
+
+ <para>This command shows information about a virtual hard disk image,
+ notably its size, its size on disk, its type and the virtual machines
+ which use it.<note>
+ <para>For compatibility with earlier versions of VirtualBox, the
+ "showvdiinfo" command is also supported and mapped internally to the
+ "showhdinfo" command.</para>
+ </note></para>
+ <para>The disk image must be specified either by its UUID (if the medium
+ is registered) or by its filename. Registered images can be listed by
+ <computeroutput>VBoxManage list hdds</computeroutput> (see <xref linkend="vboxmanage-list" />
+ for more information). A filename must be specified as valid path, either
+ as an absolute path or as a relative path starting from the current
+ directory.</para>
+ </sect1>
+
+ <sect1 id="vboxmanage-createvdi">
+ <title>VBoxManage createhd</title>
+
+ <para>This command creates a new virtual hard disk image. The syntax is as
+ follows:</para>
+
+ <screen>VBoxManage createhd --filename &lt;filename&gt;
+ --size &lt;megabytes&gt;
+ [--format VDI|VMDK|VHD] (default: VDI)
+ [--variant Standard,Fixed,Split2G,Stream,ESX]</screen>
+
+ <para>where the parameters mean:<glosslist>
+ <glossentry>
+ <glossterm>filename</glossterm>
+
+ <glossdef>
+ <para>Allows to choose a file name. Mandatory.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>size</glossterm>
+
+ <glossdef>
+ <para>Allows to define the image capacity, in 1 MiB units.
+ Mandatory.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>format</glossterm>
+
+ <glossdef>
+ <para>Allows to choose a file format for the output file different
+ from the file format of the input file.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>variant</glossterm>
+
+ <glossdef>
+ <para>Allows to choose a file format variant for the output file.
+ It is a comma-separated list of variant flags. Not all
+ combinations are supported, and specifying inconsistent flags will
+ result in an error message.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist> <note>
+ <para>For compatibility with earlier versions of VirtualBox, the
+ "createvdi" command is also supported and mapped internally to the
+ "createhd" command.</para>
+ </note></para>
+ </sect1>
+
+ <sect1 id="vboxmanage-modifyvdi">
+ <title>VBoxManage modifyhd</title>
+
+ <para>With the <computeroutput>modifyhd</computeroutput> command, you can
+ change the characteristics of a disk image after it has been
+ created:<screen>VBoxManage modifyhd &lt;uuid&gt;|&lt;filename&gt;
+ [--type normal|writethrough|immutable|shareable|
+ readonly|multiattach]
+ [--autoreset on|off]
+ [--compact]
+ [--resize &lt;megabytes&gt;|--resizebyte &lt;bytes&gt;]</screen><note>
+ <para>Despite the "hd" in the subcommand name, the command works with
+ all disk images, not only hard disks. For compatibility with earlier
+ versions of VirtualBox, the "modifyvdi" command is also supported and
+ mapped internally to the "modifyhd" command.</para>
+ </note></para>
+
+ <para>The disk image to modify must be specified either by its UUID
+ (if the medium is registered) or by its filename. Registered images
+ can be listed by <computeroutput>VBoxManage list hdds</computeroutput>
+ (see <xref linkend="vboxmanage-list" /> for more information).
+ A filename must be specified as valid path, either as an absolute path
+ or as a relative path starting from the current directory.</para>
+ <para>The following options are available:<itemizedlist>
+ <listitem>
+ <para>With the <computeroutput>--type</computeroutput> argument, you
+ can change the type of an existing image between the normal,
+ immutable, write-through and other modes; see <xref
+ linkend="hdimagewrites" /> for details.</para>
+ </listitem>
+
+ <listitem>
+ <para>For immutable (differencing) hard disks only, the
+ <computeroutput>--autoreset on|off</computeroutput> option
+ determines whether the disk is automatically reset on every VM
+ startup (again, see <xref linkend="hdimagewrites" />). The default
+ is "on".</para>
+ </listitem>
+
+ <listitem>
+ <para>With the <computeroutput>--compact</computeroutput> option,
+ can be used to compact disk images, i.e. remove blocks that only
+ contains zeroes. This will shrink a dynamically allocated image
+ again; it will reduce the <emphasis>physical</emphasis> size of the
+ image without affecting the logical size of the virtual disk.
+ Compaction works both for base images and for diff images created as
+ part of a snapshot.</para>
+
+ <para>For this operation to be effective, it is required that free
+ space in the guest system first be zeroed out using a suitable
+ software tool. For Windows guests, you can use the
+ <computeroutput>sdelete</computeroutput> tool provided by Microsoft.
+ Execute <computeroutput>sdelete -z</computeroutput> in the guest to
+ zero the free disk space before compressing the virtual disk
+ image. For Linux, use the <code>zerofree</code> utility which
+ supports ext2/ext3 filesystems.</para>
+
+ <para>Please note that compacting is currently only available for
+ VDI images. A similar effect can be achieved by zeroing out free
+ blocks and then cloning the disk to any other dynamically allocated
+ format. You can use this workaround until compacting is also
+ supported for disk formats other than VDI.</para>
+ </listitem>
+
+ <listitem>
+ <para>The <computeroutput>--resize x</computeroutput> option (where x
+ is the desired new total space in <emphasis role="bold">megabytes</emphasis>)
+ allows you to change the capacity of an existing image; this adjusts the
+ <emphasis>logical</emphasis> size of a virtual disk without affecting
+ the physical size much.<footnote>
+ <para>Image resizing was added with VirtualBox 4.0.</para>
+ </footnote> This currently works only for VDI and VHD formats, and only
+ for the dynamically allocated variants, and can only be used to expand
+ (not shrink) the capacity.
+ For example, if you originally created a 10G disk which is now full,
+ you can use the <computeroutput>--resize 15360</computeroutput>
+ command to change the capacity to 15G (15,360MB) without having to create a new
+ image and copy all data from within a virtual machine. Note however that
+ this only changes the drive capacity; you will typically next need to use
+ a partition management tool inside the guest to adjust the main partition
+ to fill the drive.</para><para>The <computeroutput>--resizebyte x</computeroutput>
+ option does almost the same thing, except that x is expressed in bytes
+ instead of megabytes.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect1>
+
+ <sect1 id="vboxmanage-clonevdi">
+ <title>VBoxManage clonehd</title>
+
+ <para>This command duplicates a registered virtual hard disk image to a
+ new image file with a new unique identifier (UUID). The new image can be
+ transferred to another host system or imported into VirtualBox again using
+ the Virtual Media Manager; see <xref linkend="vdis" /> and <xref
+ linkend="cloningvdis" />. The syntax is as follows:</para>
+
+ <screen>VBoxManage clonehd &lt;uuid&gt;|&lt;filename&gt; &lt;outputfile&gt;
+ [--format VDI|VMDK|VHD|RAW|&lt;other&gt;]
+ [--variant Standard,Fixed,Split2G,Stream,ESX]
+ [--existing]</screen>
+
+ <para>The disk image to clone as well as the target image must be described
+ either by its UUIDs (if the mediums are registered) or by its filename.
+ Registered images can be listed by <computeroutput>VBoxManage list hdds</computeroutput>
+ (see <xref linkend="vboxmanage-list" /> for more information).
+ A filename must be specified as valid path, either as an absolute path or
+ as a relative path starting from the current directory.</para>
+ <para>The following options are available:<glosslist>
+ <glossentry>
+ <glossterm>format</glossterm>
+
+ <glossdef>
+ <para>Allow to choose a file format for the output file different
+ from the file format of the input file.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>variant</glossterm>
+
+ <glossdef>
+ <para>Allow to choose a file format variant for the output file.
+ It is a comma-separated list of variant flags. Not all
+ combinations are supported, and specifying inconsistent flags will
+ result in an error message.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>existing</glossterm>
+
+ <glossdef>
+ <para>Perform the clone operation to an already existing
+ destination medium. Only the portion of the source medium which
+ fits into the destination medium is copied. This means if the
+ destination medium is smaller than the source only a part of it is
+ copied, and if the destination medium is larger than the source
+ the remaining part of the destination medium is unchanged.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist> <note>
+ <para>For compatibility with earlier versions of VirtualBox, the
+ "clonevdi" command is also supported and mapped internally to the
+ "clonehd" command.</para>
+ </note></para>
+ </sect1>
+
+ <sect1>
+ <title>VBoxManage convertfromraw</title>
+
+ <para>This command converts a raw disk image to a VirtualBox Disk Image
+ (VDI) file. The syntax is as follows:</para>
+
+ <screen>VBoxManage convertfromraw &lt;filename&gt; &lt;outputfile&gt;
+ [--format VDI|VMDK|VHD]
+ [--variant Standard,Fixed,Split2G,Stream,ESX]
+ [--uuid &lt;uuid&gt;]
+VBoxManage convertfromraw stdin &lt;outputfile&gt; &lt;bytes&gt;
+ [--format VDI|VMDK|VHD]
+ [--variant Standard,Fixed,Split2G,Stream,ESX]
+ [--uuid &lt;uuid&gt;]</screen>
+
+ <para>where the parameters mean:<glosslist>
+ <glossentry>
+ <glossterm>bytes</glossterm>
+
+ <glossdef>
+ <para>The size of the image file, in bytes, provided through
+ stdin.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>format</glossterm>
+
+ <glossdef>
+ <para>Select the disk image format to create. Default is
+ VDI.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>variant</glossterm>
+
+ <glossdef>
+ <para>Allow to choose a file format variant for the output file.
+ It is a comma-separated list of variant flags. Not all
+ combinations are supported, and specifying inconsistent flags will
+ result in an error message.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>uuid</glossterm>
+
+ <glossdef>
+ <para>Allow to specifiy the UUID of the output file.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist> The second form forces VBoxManage to read the content for
+ the disk image from standard input (useful for using that command in a
+ pipe).</para>
+
+ <para><note>
+ <para>For compatibility with earlier versions of VirtualBox, the
+ "convertdd" command is also supported and mapped internally to the
+ "convertfromraw" command.</para>
+ </note></para>
+ </sect1>
+
+ <sect1>
+ <title>VBoxManage getextradata/setextradata</title>
+
+ <para>These commands let you attach and retrieve string data to a virtual
+ machine or to a VirtualBox configuration (by specifying
+ <computeroutput>global</computeroutput> instead of a virtual machine
+ name). You must specify a key (as a text string) to associate the data
+ with, which you can later use to retrieve it. For example:</para>
+
+ <screen>VBoxManage setextradata Fedora5 installdate 2006.01.01
+VBoxManage setextradata SUSE10 installdate 2006.02.02</screen>
+
+ <para>would associate the string "2006.01.01" with the key installdate for
+ the virtual machine Fedora5, and "2006.02.02" on the machine SUSE10. You
+ could retrieve the information as follows:</para>
+
+ <screen>VBoxManage getextradata Fedora5 installdate</screen>
+
+ <para>which would return</para>
+
+ <screen>VirtualBox Command Line Management Interface Version $VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILD
+(C) 2005-$VBOX_C_YEAR $VBOX_VENDOR
+All rights reserved.
+
+Value: 2006.01.01</screen>
+ <para>To remove a key, the <computeroutput>setextradata</computeroutput>
+ command must be run without specifying data (only the key), for example:
+ </para>
+
+ <screen>VBoxManage setextradata Fedora5 installdate</screen>
+
+ </sect1>
+
+ <sect1 id="vboxmanage-setproperty">
+ <title>VBoxManage setproperty</title>
+
+ <para>This command is used to change global settings which affect the
+ entire VirtualBox installation. Some of these correspond to the settings
+ in the "Global settings" dialog in the graphical user interface. The
+ following properties are available:<glosslist>
+ <glossentry>
+ <glossterm>machinefolder</glossterm>
+
+ <glossdef>
+ <para>This specifies the default folder in which virtual machine
+ definitions are kept; see <xref linkend="vboxconfigdata" /> for
+ details.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>vrdeauthlibrary</glossterm>
+
+ <glossdef>
+ <para>This specifies which library to use when "external"
+ authentication has been selected for a particular virtual machine;
+ see <xref linkend="vbox-auth" /> for details.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>websrvauthlibrary</glossterm>
+
+ <glossdef>
+ <para>This specifies which library the web service uses to
+ authenticate users. For details about the VirtualBox web service,
+ please refer to the separate VirtualBox SDK reference (see <xref
+ linkend="VirtualBoxAPI" />).</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>vrdelibrary</glossterm>
+
+ <glossdef>
+ <para>This specifies which library implements the VirtualBox
+ Remote Desktop Extension.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>hwvirtexenabled</glossterm>
+
+ <glossdef>
+ <para>This selects whether or not hardware virtualization support
+ is enabled by default.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+ </sect1>
+
+ <sect1>
+ <title>VBoxManage usbfilter add/modify/remove</title>
+
+ <para>The <computeroutput>usbfilter</computeroutput> commands are used for
+ working with USB filters in virtual machines, or global filters which
+ affect the whole VirtualBox setup. Global filters are applied before
+ machine-specific filters, and may be used to prevent devices from being
+ captured by any virtual machine. Global filters are always applied in a
+ particular order, and only the first filter which fits a device is
+ applied. So for example, if the first global filter says to hold (make
+ available) a particular Kingston memory stick device and the second to
+ ignore all Kingston devices, that memory stick will be available to any
+ machine with an appropriate filter, but no other Kingston device
+ will.</para>
+
+ <para>When creating a USB filter using <computeroutput>usbfilter
+ add</computeroutput>, you must supply three or four mandatory parameters.
+ The index specifies the position in the list at which the filter should be
+ placed. If there is already a filter at that position, then it and the
+ following ones will be shifted back one place. Otherwise the new filter
+ will be added onto the end of the list. The
+ <computeroutput>target</computeroutput> parameter selects the virtual
+ machine that the filter should be attached to or use "global" to apply it
+ to all virtual machines. <computeroutput>name</computeroutput> is a name
+ for the new filter and for global filters,
+ <computeroutput>action</computeroutput> says whether to allow machines
+ access to devices that fit the filter description ("hold") or not to give
+ them access ("ignore"). In addition, you should specify parameters to
+ filter by. You can find the parameters for devices attached to your system
+ using <computeroutput>VBoxManage list usbhost</computeroutput>. Finally,
+ you can specify whether the filter should be active, and for local
+ filters, whether they are for local devices, remote (over an RDP
+ connection) or either.</para>
+
+ <para>When you modify a USB filter using <computeroutput>usbfilter
+ modify</computeroutput>, you must specify the filter by index (see the
+ output of <computeroutput>VBoxManage list usbfilters</computeroutput> to
+ find global filter indexes and that of <computeroutput>VBoxManage
+ showvminfo</computeroutput> to find indexes for individual machines) and
+ by target, which is either a virtual machine or "global". The properties
+ which can be changed are the same as for <computeroutput>usbfilter
+ add</computeroutput>. To remove a filter, use <computeroutput>usbfilter
+ remove</computeroutput> and specify the index and the target.</para>
+ </sect1>
+
+ <sect1 id="vboxmanage-sharedfolder">
+ <title>VBoxManage sharedfolder add/remove</title>
+
+ <para>This command allows you to share folders on the host computer with
+ guest operating systems. For this, the guest systems must have a version
+ of the VirtualBox Guest Additions installed which supports this
+ functionality.</para>
+
+ <para>Shared folders are described in detail in <xref
+ linkend="sharedfolders" />.</para>
+ </sect1>
+
+ <sect1 id="vboxmanage-guestproperty">
+ <title>VBoxManage guestproperty</title>
+
+ <para>The "guestproperty" commands allow you to get or set properties of a
+ running virtual machine. Please see <xref linkend="guestadd-guestprops" />
+ for an introduction. As explained there, guest properties are arbitrary
+ key/value string pairs which can be written to and read from by either the
+ guest or the host, so they can be used as a low-volume communication
+ channel for strings, provided that a guest is running and has the Guest
+ Additions installed. In addition, a number of values whose keys begin with
+ "/VirtualBox/" are automatically set and maintained by the Guest
+ Additions.</para>
+
+ <para>The following subcommands are available (where
+ <computeroutput>&lt;vm&gt;</computeroutput>, in each case, can either be a
+ VM name or a VM UUID, as with the other VBoxManage commands):<itemizedlist>
+ <listitem>
+ <para><computeroutput>enumerate &lt;vm&gt; [--patterns
+ &lt;pattern&gt;]</computeroutput>: This lists all the guest
+ properties that are available for the given VM, including the value.
+ This list will be very limited if the guest's service process cannot
+ be contacted, e.g. because the VM is not running or the Guest
+ Additions are not installed.</para>
+
+ <para>If <computeroutput>--patterns &lt;pattern&gt;</computeroutput>
+ is specified, it acts as a filter to only list properties that match
+ the given pattern. The pattern can contain the following wildcard
+ characters:<itemizedlist>
+ <listitem>
+ <para><computeroutput>*</computeroutput> (asterisk):
+ represents any number of characters; for example,
+ "<computeroutput>/VirtualBox*</computeroutput>" would match
+ all properties beginning with "/VirtualBox".</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>?</computeroutput> (question mark):
+ represents a single arbitrary character; for example,
+ "<computeroutput>fo?</computeroutput>" would match both "foo"
+ and "for".</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>|</computeroutput> (pipe symbol): can be
+ used to specify multiple alternative patterns; for example,
+ "<computeroutput>s*|t*</computeroutput>" would match anything
+ starting with either "s" or "t".</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>get &lt;vm&gt;</computeroutput>: This
+ retrieves the value of a single property only. If the property
+ cannot be found (e.g. because the guest is not running), this will
+ print <screen>No value set!</screen></para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>set &lt;vm&gt; &lt;property&gt; [&lt;value&gt;
+ [--flags &lt;flags&gt;]]</computeroutput>: This allows you to set a
+ guest property by specifying the key and value. If
+ <computeroutput>&lt;value&gt;</computeroutput> is omitted, the
+ property is deleted. With <computeroutput>--flags</computeroutput>
+ you can optionally specify additional behavior (you can combine
+ several by separating them with commas):<itemizedlist>
+ <listitem>
+ <para><computeroutput>TRANSIENT</computeroutput>: the value
+ will not be stored with the VM data when the VM exits;</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>TRANSRESET</computeroutput>: the value
+ will be deleted as soon as the VM restarts and/or exits;</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>RDONLYGUEST</computeroutput>: the value
+ can only be changed by the host, but the guest can only read
+ it;</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>RDONLYHOST</computeroutput>: reversely,
+ the value can only be changed by the guest, but the host can
+ only read it;</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>READONLY</computeroutput>: a combination
+ of the two, the value cannot be changed at all.</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>wait &lt;vm&gt; &lt;pattern&gt; --timeout
+ &lt;timeout&gt;</computeroutput>: This waits for a particular value
+ described by "pattern" to change or to be deleted or created. The
+ pattern rules are the same as for the "enumerate" subcommand
+ above.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect1>
+
+ <sect1 id="vboxmanage-guestcontrol">
+ <title>VBoxManage guestcontrol</title>
+
+ <para>The "guestcontrol" commands allow you to control certain things
+ inside a guest from the host. Please see <xref
+ linkend="guestadd-guestcontrol" /> for an introduction.</para>
+
+ <para>Generally, the syntax is as follows:</para>
+
+ <screen>VBoxManage guestcontrol &lt;command&gt;</screen>
+
+ <para>The following subcommands are available (where
+ <computeroutput>&lt;vm&gt;</computeroutput>, in each case, can either be a
+ VM name or a VM UUID, as with the other VBoxManage commands):<itemizedlist>
+ <listitem>
+ <para><computeroutput>execute</computeroutput>, which allows for
+ executing a program/script (process) which already is installed and
+ runnable on the guest. This command only works while a VM is up and
+ running and has the following syntax:</para>
+
+ <screen>VBoxManage guestcontrol &lt;vmname&gt;|&lt;uuid&gt; exec[ute]
+ --image &lt;path to program&gt; --username &lt;name&gt;
+ [--passwordfile &lt;file&gt; | --password &lt;password&gt;]
+ [--environment "&lt;NAME&gt;=&lt;VALUE&gt; [&lt;NAME&gt;=&lt;VALUE&gt;]"]
+ [--verbose] [--timeout &lt;msec&gt;]
+ [--wait-exit] [--wait-stdout] [--wait-stderr]
+ [--dos2unix] [--unix2dos]
+ -- [[&lt;argument1&gt;] ... [&lt;argumentN&gt;]]</screen>
+
+ <para>where the parameters mean: <glosslist>
+ <glossentry>
+ <glossterm>uuid|vmname</glossterm>
+
+ <glossdef>
+ <para>The VM UUID or VM name. Mandatory.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--image "&lt;path to program&gt;"</glossterm>
+
+ <glossdef>
+ <para>Absolute path and process name of process to execute
+ in the guest, e.g.
+ <computeroutput>C:\Windows\System32\calc.exe</computeroutput></para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--username &lt;name&gt;</glossterm>
+
+ <glossdef>
+ <para>Name of the user the process should run under. This
+ user must exist on the guest OS.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--passwordfile &lt;file&gt;</glossterm>
+
+ <glossdef>
+ <para>Password of the user account specified to be read from
+ the given file. If not given, an empty password is
+ assumed.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--password &lt;password&gt;</glossterm>
+
+ <glossdef>
+ <para>Password of the user account specified with
+ <computeroutput>--username</computeroutput>. If not given,
+ an empty password is assumed.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--dos2unix</glossterm>
+
+ <glossdef>
+ Converts output from DOS/Windows guests to UNIX-compatible
+ line endings (CR + LF -> LF). Not implemented yet.
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--environment
+ "&lt;NAME&gt;=&lt;VALUE&gt;"</glossterm>
+
+ <glossdef>
+ <para>One or more environment variables to be set or
+ unset.</para>
+
+ <para>By default, the new process in the guest will be
+ created with the standard environment of the guest OS. This
+ option allows for modifying that environment. To set/modify
+ a variable, a pair of
+ <computeroutput>NAME=VALUE</computeroutput> must be
+ specified; to unset a certain variable, the name with no
+ value must set, e.g.
+ <computeroutput>NAME=</computeroutput>.</para>
+
+ <para>Arguments containing spaces must be enclosed in
+ quotation marks. More than one
+ <computeroutput>--environment</computeroutput> at a time can
+ be specified to keep the command line tidy.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--timeout &lt;msec&gt;</glossterm>
+
+ <glossdef>
+ <para>Value (in milliseconds) that specifies the time how
+ long the started process is allowed to run and how long
+ VBoxManage waits for getting output from that process. If no
+ timeout is specified, VBoxManage will wait forever until the
+ started process ends or an error occured.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--unix2dos</glossterm>
+
+ <glossdef>
+ Converts output from a UNIX/Linux guests to DOS-/Windows-compatible
+ line endings (LF -> CR + LF). Not implemented yet.
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--verbose</glossterm>
+
+ <glossdef>
+ <para>Tells VBoxManage to be more verbose.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--wait-exit</glossterm>
+
+ <glossdef>
+ <para>Waits until the process ends and outputs its
+ exit code along with the exit reason/flags.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--wait-stdout</glossterm>
+
+ <glossdef>
+ <para>Waits until the process ends and outputs its
+ exit code along with the exit reason/flags. While waiting
+ VBoxManage retrieves the process output collected from stdout.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--wait-stderr</glossterm>
+
+ <glossdef>
+ <para>Waits until the process ends and outputs its
+ exit code along with the exit reason/flags. While waiting
+ VBoxManage retrieves the process output collected from stderr.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>[-- [&lt;argument1s&gt;] ... [&lt;argumentNs&gt;]]</glossterm>
+
+ <glossdef>
+ <para>One or more arguments to pass to the process being
+ executed.</para>
+ <para>Arguments containing spaces must be enclosed in
+ quotation marks.</para>
+ </glossdef>
+ </glossentry>
+
+ </glosslist></para>
+
+ <para><note>
+ <para>On Windows there are certain limitations for graphical
+ applications; please see <xref linkend="KnownIssues" /> for more
+ information.</para>
+ </note> Examples: <screen>VBoxManage --nologo guestcontrol "My VM" execute --image "/bin/ls"
+ --username foo --passwordfile bar.txt --wait-exit --wait-stdout -- -l /usr</screen> <screen>VBoxManage --nologo guestcontrol "My VM" execute --image "c:\\windows\\system32\\ipconfig.exe"
+ --username foo --passwordfile bar.txt --wait-exit --wait-stdout</screen> Note that
+ the double backslashes in the second example are only required on
+ Unix hosts.</para>
+
+ <para><note>
+ <para>For certain commands a user name of an existing user account on the guest
+ must be specified; anonymous executions are not supported for security reasons. A
+ user account password, however, is optional and depends on the guest's OS security
+ policy or rules. If no password is specified for a given user name, an empty password
+ will be used. On certain OSes like Windows the security policy may needs to be adjusted
+ in order to allow user accounts with an empty password set. Also, global domain rules might
+ apply and therefore cannot be changed.</para>
+ </note></para>
+
+ <para>Starting at VirtualBox 4.1.2 guest process execution by default is limited
+ to serve up to 5 guest processes at a time. If a new guest process gets started
+ which would exceed this limit, the oldest not running guest process will be discarded
+ in order to be able to run that new process. Also, retrieving output from this
+ old guest process will not be possible anymore then. If all 5 guest processes
+ are still active and running, starting a new guest process will result in an
+ appropriate error message.</para>
+
+ <para>To raise or lower the guest process execution limit, either the guest
+ property <computeroutput>/VirtualBox/GuestAdd/VBoxService/--control-procs-max-kept</computeroutput>
+ or VBoxService' command line by specifying <computeroutput>--control-procs-max-kept</computeroutput>
+ needs to be modified. A restart of the guest OS is required afterwards. To serve unlimited
+ guest processes, a value of <computeroutput>0</computeroutput> needs to be set (not recommended).</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>copyto</computeroutput>, which allows copying
+ files from the host to the guest (only with installed Guest
+ Additions 4.0 and later).</para>
+
+ <screen>VBoxManage guestcontrol &lt;vmname&gt;|&lt;uuid&gt; copyto|cp
+ &lt;guest source&gt; &lt;host dest&gt; --username &lt;name&gt;
+ [--passwordfile &lt;file&gt; | --password &lt;password&gt;]
+ [--dryrun] [--follow] [--recursive] [--verbose]</screen>
+
+ <para>where the parameters mean: <glosslist>
+ <glossentry>
+ <glossterm>uuid|vmname</glossterm>
+
+ <glossdef>
+ <para>The VM UUID or VM name. Mandatory.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>source on host</glossterm>
+
+ <glossdef>
+ <para>Absolute path of source file(s) on host to copy over
+ to the guest, e.g.
+ <computeroutput>C:\Windows\System32\calc.exe</computeroutput>.
+ This also can be a wildcard expression, e.g.
+ <computeroutput>C:\Windows\System32\*.dll</computeroutput></para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>destination on guest</glossterm>
+
+ <glossdef>
+ <para>Absolute destination path on the guest, e.g.
+ <computeroutput>C:\Temp</computeroutput></para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--username &lt;name&gt;</glossterm>
+
+ <glossdef>
+ <para>Name of the user the copy process should run under.
+ This user must exist on the guest OS.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--passwordfile &lt;file&gt;</glossterm>
+
+ <glossdef>
+ <para>Password of the user account specified to be read from
+ the given file. If not given, an empty password is
+ assumed.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--password &lt;password&gt;</glossterm>
+
+ <glossdef>
+ <para>Password of the user account specified with
+ <computeroutput>--username</computeroutput>. If not given,
+ an empty password is assumed.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--dryrun</glossterm>
+
+ <glossdef>
+ <para>Tells VBoxManage to only perform a dry run instead of
+ really copying files to the guest.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--follow</glossterm>
+
+ <glossdef>
+ <para>Enables following symlinks on the host's
+ source.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--recursive</glossterm>
+
+ <glossdef>
+ <para>Recursively copies files/directories of the specified
+ source.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--verbose</glossterm>
+
+ <glossdef>
+ <para>Tells VBoxManage to be more verbose.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--flags &lt;flags&gt;</glossterm>
+
+ <glossdef>
+ <para>Additional flags to set. This is not used at the
+ moment.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>copyfrom</computeroutput>, which allows copying
+ files from the guest to the host (only with installed Guest
+ Additions 4.0 and later). It has the same parameters as
+ <computeroutput>copyto</computeroutput> above.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>createdirectory</computeroutput>, which allows
+ copying files from the host to the guest (only with installed Guest
+ Additions 4.0 and later).</para>
+
+ <screen>VBoxManage guestcontrol &lt;vmname&gt;|&lt;uuid&gt; createdir[ectory]|mkdir|md
+ &lt;guest directory&gt;... --username &lt;name&gt;
+ [--passwordfile &lt;file&gt; | --password &lt;password&gt;]
+ [--parents] [--mode &lt;mode&gt;] [--verbose]</screen>
+
+ <para>where the parameters mean: <glosslist>
+ <glossentry>
+ <glossterm>uuid|vmname</glossterm>
+
+ <glossdef>
+ <para>The VM UUID or VM name. Mandatory.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>directory to create on guest</glossterm>
+
+ <glossdef>
+ <para>Absolute path of directory/directories to create on
+ guest, e.g. <computeroutput>D:\Foo\Bar</computeroutput>.
+ Parent directories need to exist (e.g. in this example
+ <computeroutput>D:\Foo</computeroutput>) when switch
+ <computeroutput>--parents</computeroutput> is omitted. The
+ specified user must have appropriate rights to create the
+ specified directory.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--username &lt;name&gt;</glossterm>
+
+ <glossdef>
+ <para>Name of the user the copy process should run under.
+ This user must exist on the guest OS.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--passwordfile &lt;file&gt;</glossterm>
+
+ <glossdef>
+ <para>Password of the user account specified to be read from
+ the given file. If not given, an empty password is
+ assumed.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--password &lt;password&gt;</glossterm>
+
+ <glossdef>
+ <para>Password of the user account specified with
+ <computeroutput>--username</computeroutput>. If not given,
+ an empty password is assumed.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--parents</glossterm>
+
+ <glossdef>
+ <para>Also creates not yet existing parent directories of
+ the specified directory, e.g. if the directory
+ <computeroutput>D:\Foo</computeroutput> of
+ <computeroutput>D:\Foo\Bar</computeroutput> does not exist
+ yet it will be created. Without specifying
+ <computeroutput>--parent</computeroutput> the action would
+ have failed.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--mode &lt;mode&gt;</glossterm>
+
+ <glossdef>
+ <para>Sets the permission mode of the specified directory.
+ Only octal modes (e.g.
+ <computeroutput>0755</computeroutput>) are supported right
+ now.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--verbose</glossterm>
+
+ <glossdef>
+ <para>Tells VBoxManage to be more verbose.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>stat</computeroutput>, which displays file
+ or file system status on the guest.</para>
+
+ <screen>VBoxManage guestcontrol &lt;vmname&gt;|&lt;uuid&gt; stat
+ &lt;file&gt;... --username &lt;name&gt;
+ [--passwordfile &lt;file&gt; | --password &lt;password&gt;]
+ [--verbose]</screen>
+
+ <para>where the parameters mean: <glosslist>
+ <glossentry>
+ <glossterm>uuid|vmname</glossterm>
+
+ <glossdef>
+ <para>The VM UUID or VM name. Mandatory.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>file element(s) to check on guest</glossterm>
+
+ <glossdef>
+ <para>Absolute path of directory/directories to check on
+ guest, e.g. <computeroutput>/home/foo/a.out</computeroutput>.
+ The specified user must have appropriate rights to access
+ the given file element(s).</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--username &lt;name&gt;</glossterm>
+
+ <glossdef>
+ <para>Name of the user the copy process should run under.
+ This user must exist on the guest OS.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--passwordfile &lt;file&gt;</glossterm>
+
+ <glossdef>
+ <para>Password of the user account specified to be read from
+ the given file. If not given, an empty password is
+ assumed.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--password &lt;password&gt;</glossterm>
+
+ <glossdef>
+ <para>Password of the user account specified with
+ <computeroutput>--username</computeroutput>. If not given,
+ an empty password is assumed.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--verbose</glossterm>
+
+ <glossdef>
+ <para>Tells VBoxManage to be more verbose.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>updateadditions</computeroutput>, which allows
+ for updating an already installed Guest Additions version on the
+ guest (only already installed Guest Additions 4.0 and later).</para>
+
+ <screen>VBoxManage guestcontrol &lt;vmname&gt;|&lt;uuid&gt; updateadditions
+ [--source "&lt;guest additions .ISO file to use&gt;"] [--verbose]
+ [--wait-start]</screen>
+
+ <para>where the parameters mean: <glosslist>
+ <glossentry>
+ <glossterm>uuid|vmname</glossterm>
+
+ <glossdef>
+ <para>The VM UUID or VM name. Mandatory.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--source "&lt;guest additions .ISO file to
+ use&gt;"</glossterm>
+
+ <glossdef>
+ <para>Full path to an alternative VirtualBox Guest Additions
+ .ISO file to use for the Guest Additions update.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--verbose</glossterm>
+
+ <glossdef>
+ <para>Tells VBoxManage to be more verbose.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--wait-start</glossterm>
+ <glossdef>
+ <para>Starts the regular updating process and waits until the
+ actual Guest Additions update inside the guest was started.
+ This can be necessary due to needed interaction with the
+ guest OS during the installation phase.</para>
+ <para>When omitting this flag VBoxManage will wait for the
+ whole Guest Additions update to complete.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+ </listitem>
+ </itemizedlist></para>
+ </sect1>
+
+ <sect1 id="vboxmanage-debugvm">
+ <title>VBoxManage debugvm</title>
+
+ <para>The "debugvm" commands are for experts who want to tinker with the
+ exact details of virtual machine execution. Like the VM debugger described
+ in <xref linkend="ts_debugger" />, these commands are only useful if you are
+ very familiar with the details of the PC architecture and how to debug
+ software.</para>
+
+ <para>The subcommands of "debugvm" all operate on a running virtual
+ machine. The following are available:<itemizedlist>
+ <listitem>
+ <para>With <computeroutput>dumpguestcore --filename
+ &lt;name&gt;</computeroutput>, you can create a system dump of the
+ running VM, which will be written into the given file. This file
+ will have the standard ELF core format (with custom sections); see
+ <xref linkend="ts_guest-core-format" />.</para>
+
+ <para>This corresponds to the
+ <computeroutput>writecore</computeroutput> command in the debugger.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>The <computeroutput>info</computeroutput> command is used to
+ display info items relating to the VMM, device emulations and
+ associated drivers. This command takes one or two arguments: the
+ name of the info item, optionally followed by a string containing
+ arguments specific to the info item.
+ The <computeroutput>help</computeroutput> info item provides a
+ listning of the available items and hints about any optional
+ arguments.</para>
+
+ <para>This corresponds to the <computeroutput>info</computeroutput>
+ command in the debugger.</para>
+ </listitem>
+
+ <listitem>
+ <para>The <computeroutput>injectnmi</computeroutput> command causes
+ a non-maskable interrupt (NMI) in the guest, which might be useful
+ for certain debugging scenarios. What happens exactly is dependent
+ on the guest operating system, but an NMI can crash the whole guest
+ operating system. Do not use unless you know what you're
+ doing.</para>
+ </listitem>
+
+ <listitem>
+ <para>The <computeroutput>osdetect</computeroutput> command makes the
+ VMM's debugger facility (re-)detection the guest operation
+ system.</para>
+
+ <para>This corresponds to the <computeroutput>detect</computeroutput>
+ command in the debugger.</para>
+ </listitem>
+
+ <listitem>
+ <para>The <computeroutput>osinfo</computeroutput> command is used to
+ display info about the operating system (OS) detected by the VMM's
+ debugger facility.</para>
+ </listitem>
+
+ <listitem>
+ <para>The <computeroutput>getregisters</computeroutput> command is
+ used to display CPU and device registers. The command takes a list
+ of registers, each having one of the following forms:
+ <itemizedlist>
+ <listitem><computeroutput>register-set.register-name.sub-field</computeroutput></listitem>
+ <listitem><computeroutput>register-set.register-name</computeroutput></listitem>
+ <listitem><computeroutput>cpu-register-name.sub-field</computeroutput></listitem>
+ <listitem><computeroutput>cpu-register-name</computeroutput></listitem>
+ <listitem><computeroutput>all</computeroutput></listitem>
+ </itemizedlist>
+ The <computeroutput>all</computeroutput> form will cause all
+ registers to be shown (no sub-fields). The registers names are
+ case-insensitive. When requesting a CPU register the register set
+ can be omitted, it will be selected using the value of the
+ <computeroutput>--cpu</computeroutput> option (defaulting to 0).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>The <computeroutput>setregisters</computeroutput> command is
+ used to change CPU and device registers. The command takes a list
+ of register assignments, each having one of the following forms:
+ <itemizedlist>
+ <listitem><computeroutput>register-set.register-name.sub-field=value</computeroutput></listitem>
+ <listitem><computeroutput>register-set.register-name=value</computeroutput></listitem>
+ <listitem><computeroutput>cpu-register-name.sub-field=value</computeroutput></listitem>
+ <listitem><computeroutput>cpu-register-name=value</computeroutput></listitem>
+ </itemizedlist>
+ The value format should be in the same style as what
+ <computeroutput>getregisters</computeroutput> displays, with the
+ exception that both octal and decimal can be used instead of
+ hexadecimal. The register naming and the default CPU register set
+ are handled the same way as with the
+ <computeroutput>getregisters</computeroutput> command.</para>
+ </listitem>
+
+ <listitem>
+ <para>The <computeroutput>statistics</computeroutput> command can be
+ used to display VMM statistics on the command line. The
+ <computeroutput>--reset</computeroutput> option will reset
+ statistics. The affected statistics can be filtered with the
+ <computeroutput>--pattern</computeroutput> option, which accepts
+ DOS/NT-style wildcards (<computeroutput>?</computeroutput> and
+ <computeroutput>*</computeroutput>).</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect1>
+
+ <sect1>
+ <title id="metrics">VBoxManage metrics</title>
+
+ <para>This command supports monitoring the usage of system resources.
+ Resources are represented by various metrics associated with the host
+ system or a particular VM. For example, the host system has a
+ <computeroutput>CPU/Load/User</computeroutput> metric that shows the
+ percentage of time CPUs spend executing in user mode over a specific
+ sampling period.</para>
+
+ <para>Metric data is collected and retained internally; it may be
+ retrieved at any time with the <computeroutput>VBoxManage metrics
+ query</computeroutput> subcommand. The data is available as long as the
+ background <computeroutput>VBoxSVC</computeroutput> process is alive. That
+ process terminates shortly after all VMs and frontends have been
+ closed.</para>
+
+ <para>By default no metrics are collected at all. Metrics collection does
+ not start until <computeroutput>VBoxManage metrics setup</computeroutput>
+ is invoked with a proper sampling interval and the number of metrics to be
+ retained. The interval is measured in seconds. For example, to enable
+ collecting the host processor and memory usage metrics every second and
+ keeping the 5 most current samples, the following command can be
+ used:</para>
+
+ <screen>VBoxManage metrics setup --period 1 --samples 5 host CPU/Load,RAM/Usage</screen>
+
+ <para>Metric collection can only be enabled for started VMs. Collected
+ data and collection settings for a particular VM will disappear as soon as
+ it shuts down. Use <computeroutput>VBoxManage metrics list
+ </computeroutput> subcommand to see which metrics are currently available.
+ You can also use <computeroutput>--list</computeroutput> option with any
+ subcommand that modifies metric settings to find out which metrics were
+ affected.</para>
+
+ <para>Note that the <computeroutput>VBoxManage metrics
+ setup</computeroutput> subcommand discards all samples that may have been
+ previously collected for the specified set of objects and metrics.</para>
+
+ <para>To enable or disable metrics collection without discarding the data
+ <computeroutput>VBoxManage metrics enable</computeroutput> and
+ <computeroutput>VBoxManage metrics disable</computeroutput> subcommands
+ can be used. Note that these subcommands expect metrics, not submetrics,
+ like <code>CPU/Load</code> or <code>RAM/Usage</code> as parameters. In
+ other words enabling <code>CPU/Load/User</code> while disabling
+ <code>CPU/Load/Kernel</code> is not supported.</para>
+
+ <para>The host and VMs have different sets of associated metrics.
+ Available metrics can be listed with <computeroutput>VBoxManage metrics
+ list</computeroutput> subcommand.</para>
+
+ <para>A complete metric name may include an aggregate function. The name
+ has the following form:
+ <computeroutput>Category/Metric[/SubMetric][:aggregate]</computeroutput>.
+ For example, <computeroutput>RAM/Usage/Free:min</computeroutput> stands
+ for the minimum amount of available memory over all retained data if
+ applied to the host object.</para>
+
+ <para>Subcommands may apply to all objects and metrics or can be limited
+ to one object or/and a list of metrics. If no objects or metrics are given
+ in the parameters, the subcommands will apply to all available metrics of
+ all objects. You may use an asterisk
+ ("<computeroutput>*</computeroutput>") to explicitly specify that the
+ command should be applied to all objects or metrics. Use "host" as the
+ object name to limit the scope of the command to host-related metrics. To
+ limit the scope to a subset of metrics, use a metric list with names
+ separated by commas.</para>
+
+ <para>For example, to query metric data on the CPU time spent in user and
+ kernel modes by the virtual machine named "test", you can use the
+ following command:</para>
+
+ <screen>VBoxManage metrics query test CPU/Load/User,CPU/Load/Kernel</screen>
+
+ <para>The following list summarizes the available subcommands:</para>
+
+ <glosslist>
+ <glossentry>
+ <glossterm>list</glossterm>
+
+ <glossdef>
+ <para>This subcommand shows the parameters of the currently existing
+ metrics. Note that VM-specific metrics are only available when a
+ particular VM is running.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>setup</glossterm>
+
+ <glossdef>
+ <para>This subcommand sets the interval between taking two samples
+ of metric data and the number of samples retained internally. The
+ retained data is available for displaying with the
+ <code>query</code> subcommand. The <computeroutput>--list
+ </computeroutput> option shows which metrics have been modified as
+ the result of the command execution.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>enable</glossterm>
+
+ <glossdef>
+ <para>This subcommand "resumes" data collection after it has been
+ stopped with <code>disable</code> subcommand. Note that specifying
+ submetrics as parameters will not enable underlying metrics. Use
+ <computeroutput>--list</computeroutput> to find out if the command
+ did what was expected.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>disable</glossterm>
+
+ <glossdef>
+ <para>This subcommand "suspends" data collection without affecting
+ collection parameters or collected data. Note that specifying
+ submetrics as parameters will not disable underlying metrics. Use
+ <computeroutput>--list</computeroutput> to find out if the command
+ did what was expected.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>query</glossterm>
+
+ <glossdef>
+ <para>This subcommand retrieves and displays the currently retained
+ metric data.<note>
+ <para>The <code>query</code> subcommand does not remove or
+ "flush" retained data. If you query often enough you will see
+ how old samples are gradually being "phased out" by new
+ samples.</para>
+ </note></para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>collect</glossterm>
+
+ <glossdef>
+ <para>This subcommand sets the interval between taking two samples
+ of metric data and the number of samples retained internally. The
+ collected data is displayed periodically until Ctrl-C is pressed
+ unless the <computeroutput>--detach</computeroutput> option is
+ specified. With the <computeroutput>--detach</computeroutput>
+ option, this subcommand operates the same way as <code>setup</code>
+ does. The <computeroutput>--list</computeroutput> option shows which
+ metrics match the specified filter.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist>
+ </sect1>
+
+ <sect1>
+ <title>VBoxManage hostonlyif</title>
+
+ <para>With "hostonlyif" you can change the IP configuration of a host-only
+ network interface. For a description of host-only networking, please
+ refer to <xref linkend="network_hostonly" />. Each host-only interface is
+ identified by a name and can either use the internal DHCP server or a
+ manual IP configuration (both IP4 and IP6).</para>
+ </sect1>
+
+ <sect1 id="vboxmanage-dhcpserver">
+ <title>VBoxManage dhcpserver</title>
+
+ <para>The "dhcpserver" commands allow you to control the DHCP server that
+ is built into VirtualBox. You may find this useful when using internal or
+ host-only networking. (Theoretically, you can enable it for a bridged
+ network as well, but that will likely cause conflicts with other DHCP
+ servers in your physical network.)</para>
+
+ <para>Use the following command line options:<itemizedlist>
+ <listitem>
+ <para>If you use internal networking for a virtual network adapter
+ of a virtual machine, use <computeroutput>VBoxManage dhcpserver add
+ --netname &lt;network_name&gt;</computeroutput>, where
+ <computeroutput>&lt;network_name&gt;</computeroutput> is the same
+ network name you used with <computeroutput>VBoxManage modifyvm
+ &lt;vmname&gt; --intnet&lt;X&gt;
+ &lt;network_name&gt;</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para>If you use host-only networking for a virtual network adapter
+ of a virtual machine, use <computeroutput>VBoxManage dhcpserver add
+ --ifname &lt;hostonly_if_name&gt;</computeroutput> instead, where
+ <computeroutput>&lt;hostonly_if_name&gt;</computeroutput> is the
+ same host-only interface name you used with
+ <computeroutput>VBoxManage modifyvm &lt;vmname&gt;
+ --hostonlyadapter&lt;X&gt;
+ &lt;hostonly_if_name&gt;</computeroutput>.</para>
+
+ <para>Alternatively, you can also use the --netname option as with
+ internal networks if you know the host-only network's name; you can
+ see the names with <computeroutput>VBoxManage list
+ hostonlyifs</computeroutput> (see <xref linkend="vboxmanage-list" />
+ above).</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>The following additional parameters are required when first adding a
+ DHCP server:<itemizedlist>
+ <listitem>
+ <para>With <computeroutput>--ip</computeroutput>, specify the IP
+ address of the DHCP server itself.</para>
+ </listitem>
+
+ <listitem>
+ <para>With <computeroutput>--netmask</computeroutput>, specify the
+ netmask of the network.</para>
+ </listitem>
+
+ <listitem>
+ <para>With <computeroutput>--lowerip</computeroutput> and
+ <computeroutput>--upperip</computeroutput>, you can specify the
+ lowest and highest IP address, respectively, that the DHCP server
+ will hand out to clients.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>Finally, you must specify <computeroutput>--enable</computeroutput>
+ or the DHCP server will be created in the disabled state, doing
+ nothing.</para>
+
+ <para>After this, VirtualBox will automatically start the DHCP server for
+ given internal or host-only network as soon as the first virtual machine
+ which uses that network is started.</para>
+
+ <para>Reversely, use <computeroutput>VBoxManage dhcpserver
+ remove</computeroutput> with the given <computeroutput>--netname
+ &lt;network_name&gt;</computeroutput> or <computeroutput>--ifname
+ &lt;hostonly_if_name&gt;</computeroutput> to remove the DHCP server again
+ for the given internal or host-only network.</para>
+
+ <para>To modify the settings of a DHCP server created earlier with
+ <computeroutput>VBoxManage dhcpserver add</computeroutput>, you can use
+ <computeroutput>VBoxManage dhcpserver modify</computeroutput> for a given
+ network or host-only interface name.</para>
+ </sect1>
+
+ <sect1 id="vboxmanage-extpack">
+ <title>VBoxManage extpack</title>
+
+ <para>The "extpack" command allows you to add or remove VirtualBox
+ extension packs, as described in <xref
+ linkend="intro-installing" />.<itemizedlist>
+ <listitem>
+ <para>To add a new extension pack, use <computeroutput>VBoxManage
+ extpack install &lt;tarball&gt;</computeroutput>. This command
+ will fail if an older version of the same extension pack is already
+ installed. The optional <computeroutput>--replace</computeroutput>
+ parameter can be used to uninstall the old package before the new
+ package is installed.</para>
+ </listitem>
+
+ <listitem>
+ <para>To remove a previously installed extension pack, use
+ <computeroutput>VBoxManage extpack uninstall
+ &lt;name&gt;</computeroutput>. You can use
+ <computeroutput>VBoxManage list extpacks</computeroutput> to show
+ the names of the extension packs which are currently installed;
+ please see <xref linkend="vboxmanage-list" /> also. The optional
+ <computeroutput>--force</computeroutput> parameter can be used to
+ override the refusal of an extension pack to be uninstalled.</para>
+ </listitem>
+
+ <listitem>
+ <para>The <computeroutput>VBoxManage extpack
+ cleanup</computeroutput> command can be used to remove temporary
+ files and directories that may have been left behind if a previous
+ install or uninstall command failed.</para>
+ </listitem>
+ </itemizedlist></para>
+ <para>The following commands show examples how to list extension packs and
+ remove one:<screen>
+$ VBoxManage list extpacks
+Extension Packs: 1
+Pack no. 0: Oracle VM VirtualBox Extension Pack
+Version: 4.1.12
+Revision: 77218
+Edition:
+Description: USB 2.0 Host Controller, VirtualBox RDP, PXE ROM with E1000 support.
+VRDE Module: VBoxVRDP
+Usable: true
+Why unusable:
+$ VBoxManage extpack uninstall "Oracle VM VirtualBox Extension Pack"
+0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
+Successfully uninstalled "Oracle VM VirtualBox Extension Pack".</screen></para>
+ </sect1>
+</chapter>
diff --git a/doc/manual/en_US/user_VirtualBoxAPI.xml b/doc/manual/en_US/user_VirtualBoxAPI.xml
new file mode 100644
index 00000000..f2a61883
--- /dev/null
+++ b/doc/manual/en_US/user_VirtualBoxAPI.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+ "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<chapter id="VirtualBoxAPI">
+ <title>VirtualBox programming interfaces</title>
+
+ <para>VirtualBox comes with comprehensive support for third-party
+ developers. The so-called "Main API" of VirtualBox exposes the entire
+ feature set of the virtualization engine. It is completely documented and
+ available to anyone who wishes to control VirtualBox programmatically.
+ </para>
+
+ <para>The Main API is made available to C++ clients through COM (on Windows
+ hosts) or XPCOM (on other hosts). Bridges also exist for SOAP, Java and
+ Python.</para>
+
+ <para>All programming information (documentation, reference information,
+ header and other interface files as well as samples) have been split out to
+ a separate <emphasis role="bold">Software Development Kit (SDK),</emphasis>
+ which is available for download from <ulink type=""
+ url="http://www.virtualbox.org">http://www.virtualbox.org</ulink>. In
+ particular, the SDK comes with a "Programming Guide and Reference" in PDF
+ format, which contains, among other things, the information that was
+ previously in this chapter of the User Manual.</para>
+</chapter> \ No newline at end of file
diff --git a/doc/manual/fr_FR/Makefile.kup b/doc/manual/fr_FR/Makefile.kup
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/doc/manual/fr_FR/Makefile.kup
diff --git a/doc/manual/fr_FR/SDKRef.xml b/doc/manual/fr_FR/SDKRef.xml
new file mode 100644
index 00000000..699c955d
--- /dev/null
+++ b/doc/manual/fr_FR/SDKRef.xml
@@ -0,0 +1,4183 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
+<book>
+ <bookinfo>
+ <title>$VBOX_PRODUCT<superscript>®</superscript></title>
+
+ <subtitle>Programming Guide and Reference</subtitle>
+
+ <edition>Version $VBOX_VERSION_STRING</edition>
+
+ <corpauthor>$VBOX_VENDOR</corpauthor>
+
+ <address>http://www.virtualbox.org</address>
+
+ <copyright>
+ <year>2004-$VBOX_C_YEAR</year>
+
+ <holder>$VBOX_VENDOR</holder>
+ </copyright>
+ </bookinfo>
+
+ <chapter>
+ <title>Introduction</title>
+
+ <para>VirtualBox comes with comprehensive support for third-party
+ developers. This Software Development Kit (SDK) contains all the
+ documentation and interface files that are needed to write code that
+ interacts with VirtualBox.</para>
+
+ <sect1>
+ <title>Modularity: the building blocks of VirtualBox</title>
+
+ <para>VirtualBox is cleanly separated into several layers, which can be
+ visualized like in the picture below:</para>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" fileref="images/vbox-components.png"
+ width="12cm" />
+ </imageobject>
+ </mediaobject>
+
+ <para>The orange area represents code that runs in kernel mode, the blue
+ area represents userspace code.</para>
+
+ <para>At the bottom of the stack resides the hypervisor -- the core of
+ the virtualization engine, controlling execution of the virtual machines
+ and making sure they do not conflict with each other or whatever the
+ host computer is doing otherwise.</para>
+
+ <para>On top of the hypervisor, additional internal modules provide
+ extra functionality. For example, the RDP server, which can deliver the
+ graphical output of a VM remotely to an RDP client, is a separate module
+ that is only loosely tacked into the virtual graphics device. Live
+ Migration and Resource Monitor are additional modules currently in the
+ process of being added to VirtualBox.</para>
+
+ <para>What is primarily of interest for purposes of the SDK is the API
+ layer block that sits on top of all the previously mentioned blocks.
+ This API, which we call the <emphasis role="bold">"Main API"</emphasis>,
+ exposes the entire feature set of the virtualization engine below. It is
+ completely documented in this SDK Reference -- see <xref
+ linkend="sdkref_classes" /> and <xref linkend="sdkref_enums" /> -- and
+ available to anyone who wishes to control VirtualBox programmatically.
+ We chose the name "Main API" to differentiate it from other programming
+ interfaces of VirtualBox that may be publicly accessible.</para>
+
+ <para>With the Main API, you can create, configure, start, stop and
+ delete virtual machines, retrieve performance statistics about running
+ VMs, configure the VirtualBox installation in general, and more. In
+ fact, internally, the front-end programs
+ <computeroutput>VirtualBox</computeroutput> and
+ <computeroutput>VBoxManage</computeroutput> use nothing but this API as
+ well -- there are no hidden backdoors into the virtualization engine for
+ our own front-ends. This ensures the entire Main API is both
+ well-documented and well-tested. (The same applies to
+ <computeroutput>VBoxHeadless</computeroutput>, which is not shown in the
+ image.)</para>
+ </sect1>
+
+ <sect1 id="webservice-or-com">
+ <title>Two guises of the same "Main API": the web service or
+ COM/XPCOM</title>
+
+ <para>There are several ways in which the Main API can be called by
+ other code:<orderedlist>
+ <listitem>
+ <para>VirtualBox comes with a <emphasis role="bold">web
+ service</emphasis> that maps nearly the entire Main API. The web
+ service ships in a stand-alone executable
+ (<computeroutput>vboxwebsrv</computeroutput>) that, when running,
+ acts as an HTTP server, accepts SOAP connections and processes
+ them.</para>
+
+ <para>Since the entire web service API is publicly described in a
+ web service description file (in WSDL format), you can write
+ client programs that call the web service in any language with a
+ toolkit that understands WSDL. These days, that includes most
+ programming languages that are available: Java, C++, .NET, PHP,
+ Python, Perl and probably many more.</para>
+
+ <para>All of this is explained in detail in subsequent chapters of
+ this book.</para>
+
+ <para>There are two ways in which you can write client code that
+ uses the web service:<orderedlist>
+ <listitem>
+ <para>For Java as well as Python, the SDK contains
+ easy-to-use classes that allow you to use the web service in
+ an object-oriented, straightforward manner. We shall refer
+ to this as the <emphasis role="bold">"object-oriented web
+ service (OOWS)"</emphasis>.</para>
+
+ <para>The OO bindings for Java are described in <xref
+ linkend="javaapi" />, those for Python in <xref lang=""
+ linkend="glue-python-ws" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>Alternatively, you can use the web service directly,
+ without the object-oriented client layer. We shall refer to
+ this as the <emphasis role="bold">"raw web
+ service"</emphasis>.</para>
+
+ <para>You will then have neither native object orientation
+ nor full type safety, since web services are neither
+ object-oriented nor stateful. However, in this way, you can
+ write client code even in languages for which we do not ship
+ object-oriented client code; all you need is a programming
+ language with a toolkit that can parse WSDL and generate
+ client wrapper code from it.</para>
+
+ <para>We describe this further in <xref
+ linkend="raw-webservice" />, with samples for Java and
+ Perl.</para>
+ </listitem>
+ </orderedlist></para>
+ </listitem>
+
+ <listitem>
+ <para>Internally, for portability and easier maintenance, the Main
+ API is implemented using the <emphasis role="bold">Component
+ Object Model (COM),</emphasis> an interprocess mechanism for
+ software components originally introduced by Microsoft for
+ Microsoft Windows. On a Windows host, VirtualBox will use
+ Microsoft COM; on other hosts where COM is not present, it ships
+ with XPCOM, a free software implementation of COM originally
+ created by the Mozilla project for their browsers.</para>
+
+ <para>So, if you are familiar with COM and the C++ programming
+ language (or with any other programming language that can handle
+ COM/XPCOM objects, such as Java, Visual Basic or C#), then you can
+ use the COM/XPCOM API directly. VirtualBox comes with all
+ necessary files and documentation to build fully functional COM
+ applications. For an introduction, please see <xref
+ linkend="api_com" /> below.</para>
+
+ <para>The VirtualBox front-ends (the graphical user interfaces as
+ well as the command line), which are all written in C++, use
+ COM/XPCOM to call the Main API. Technically, the web service is
+ another front-end to this COM API, mapping almost all of it to
+ SOAP clients.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>If you wonder which way to choose, here are a few
+ comparisons:<table>
+ <title>Comparison web service vs. COM/XPCOM</title>
+
+ <tgroup cols="2">
+ <tbody>
+ <row>
+ <entry><emphasis role="bold">Web service</emphasis></entry>
+
+ <entry><emphasis role="bold">COM/XPCOM</emphasis></entry>
+ </row>
+
+ <row>
+ <entry><emphasis role="bold">Pro:</emphasis> Easy to use with
+ Java and Python with the object-oriented web service;
+ extensive support even with other languages (C++, .NET, PHP,
+ Perl and others)</entry>
+
+ <entry><emphasis role="bold">Con:</emphasis> Usable from
+ languages where COM bridge available (most languages on
+ Windows platform, Python and C++ on other hosts)</entry>
+ </row>
+
+ <row>
+ <entry><emphasis role="bold">Pro:</emphasis> Client can be on
+ remote machine</entry>
+
+ <entry><emphasis role="bold">Con: </emphasis>Client must be on
+ the same host where virtual machine is executed</entry>
+ </row>
+
+ <row>
+ <entry><emphasis role="bold">Con: </emphasis>Significant
+ overhead due to XML marshalling over the wire for each method
+ call</entry>
+
+ <entry><emphasis role="bold">Pro: </emphasis>Relatively low
+ invocation overhead</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table></para>
+
+ <para>In the following chapters, we will describe the different ways in
+ which to program VirtualBox, starting with the method that is easiest to
+ use and then increase complexity as we go along.</para>
+ </sect1>
+
+ <sect1 id="api_soap_intro">
+ <title>About web services in general</title>
+
+ <para>Web services are a particular type of programming interface.
+ Whereas, with "normal" programming, a program calls an application
+ programming interface (API) defined by another program or the operating
+ system and both sides of the interface have to agree on the calling
+ convention and, in most cases, use the same programming language, web
+ services use Internet standards such as HTTP and XML to
+ communicate.<footnote>
+ <para>In some ways, web services promise to deliver the same thing
+ as CORBA and DCOM did years ago. However, while these previous
+ technologies relied on specific binary protocols and thus proved to
+ be difficult to use between diverging platforms, web services
+ circumvent these incompatibilities by using text-only standards like
+ HTTP and XML. On the downside (and, one could say, typical of things
+ related to XML), a lot of standards are involved before a web
+ service can be implemented. Many of the standards invented around
+ XML are used one way or another. As a result, web services are slow
+ and verbose, and the details can be incredibly messy. The relevant
+ standards here are called SOAP and WSDL, where SOAP describes the
+ format of the messages that are exchanged (an XML document wrapped
+ in an HTTP header), and WSDL is an XML format that describes a
+ complete API provided by a web service. WSDL in turn uses XML Schema
+ to describe types, which is not exactly terse either. However, as
+ you will see from the samples provided in this chapter, the
+ VirtualBox web service shields you from these details and is easy to
+ use.</para>
+ </footnote></para>
+
+ <para>In order to successfully use a web service, a number of things are
+ required -- primarily, a web service accepting connections; service
+ descriptions; and then a client that connects to that web service. The
+ connections are governed by the SOAP standard, which describes how
+ messages are to be exchanged between a service and its clients; the
+ service descriptions are governed by WSDL.</para>
+
+ <para>In the case of VirtualBox, this translates into the following
+ three components:<orderedlist>
+ <listitem>
+ <para>The VirtualBox web service (the "server"): this is the
+ <computeroutput>vboxwebsrv</computeroutput> executable shipped
+ with VirtualBox. Once you start this executable (which acts as a
+ HTTP server on a specific TCP/IP port), clients can connect to the
+ web service and thus control a VirtualBox installation.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox also comes with WSDL files that describe the
+ services provided by the web service. You can find these files in
+ the <computeroutput>sdk/bindings/webservice/</computeroutput>
+ directory. These files are understood by the web service toolkits
+ that are shipped with most programming languages and enable you to
+ easily access a web service even if you don't use our
+ object-oriented client layers. VirtualBox is shipped with
+ pregenerated web service glue code for several languages (Python,
+ Perl, Java).</para>
+ </listitem>
+
+ <listitem>
+ <para>A client that connects to the web service in order to
+ control the VirtualBox installation.</para>
+
+ <para>Unless you play with some of the samples shipped with
+ VirtualBox, this needs to be written by you.</para>
+ </listitem>
+ </orderedlist></para>
+ </sect1>
+
+ <sect1 id="runvboxwebsrv">
+ <title>Running the web service</title>
+
+ <para>The web service ships in an stand-alone executable,
+ <computeroutput>vboxwebsrv</computeroutput>, that, when running, acts as
+ a HTTP server, accepts SOAP connections and processes them -- remotely
+ or from the same machine.<note>
+ <para>The web service executable is not contained with the
+ VirtualBox SDK, but instead ships with the standard VirtualBox
+ binary package for your specific platform. Since the SDK contains
+ only platform-independent text files and documentation, the binaries
+ are instead shipped with the platform-specific packages.</para>
+ </note></para>
+
+ <para>The <computeroutput>vboxwebsrv</computeroutput> program, which
+ implements the web service, is a text-mode (console) program which,
+ after being started, simply runs until it is interrupted with Ctrl-C or
+ a kill command.</para>
+
+ <para>Once the web service is started, it acts as a front-end to the
+ VirtualBox installation of the user account that it is running under. In
+ other words, if the web service is run under the user account of
+ <computeroutput>user1</computeroutput>, it will see and manipulate the
+ virtual machines and other data represented by the VirtualBox data of
+ that user (e.g., on a Linux machine, under
+ <computeroutput>/home/user1/.VirtualBox</computeroutput>; see the
+ VirtualBox User Manual for details on where this data is stored).</para>
+
+ <sect2 id="vboxwebsrv-ref">
+ <title>Command line options of vboxwebsrv</title>
+
+ <para>The web service supports the following command line
+ options:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><computeroutput>--help</computeroutput> (or
+ <computeroutput>-h</computeroutput>): print a brief summary of
+ command line options.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--background</computeroutput> (or
+ <computeroutput>-b</computeroutput>): run the web service as a
+ background daemon. This option is not supported on Windows
+ hosts.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--host</computeroutput> (or
+ <computeroutput>-H</computeroutput>): This specifies the host to
+ bind to and defaults to "localhost".</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--port</computeroutput> (or
+ <computeroutput>-p</computeroutput>): This specifies which port to
+ bind to on the host and defaults to 18083.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--timeout</computeroutput> (or
+ <computeroutput>-t</computeroutput>): This specifies the session
+ timeout, in seconds, and defaults to 300 (five minutes). A web
+ service client that has logged on but makes no calls to the web
+ service will automatically be disconnected after the number of
+ seconds specified here, as if it had called the
+ <computeroutput>IWebSessionManager::logoff()</computeroutput>
+ method provided by the web service itself.</para>
+
+ <para>It is normally vital that each web service client call this
+ method, as the web service can accumulate large amounts of memory
+ when running, especially if a web service client does not properly
+ release managed object references. As a result, this timeout value
+ should not be set too high, especially on machines with a high
+ load on the web service, or the web service may eventually deny
+ service.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--check-interval</computeroutput> (or
+ <computeroutput>-i</computeroutput>): This specifies the interval
+ in which the web service checks for timed-out clients, in seconds,
+ and defaults to 5. This normally does not need to be
+ changed.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--verbose</computeroutput> (or
+ <computeroutput>-v</computeroutput>): Normally, the webservice
+ outputs only brief messages to the console each time a request is
+ served. With this option, the webservice prints much more detailed
+ data about every request and the COM methods that those requests
+ are mapped to internally, which can be useful for debugging client
+ programs.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--logfile</computeroutput> (or
+ <computeroutput>-F</computeroutput>)
+ <computeroutput>&lt;file&gt;</computeroutput>: If this is
+ specified, the webservice not only prints its output to the
+ console, but also writes it to the specified file. The file is
+ created if it does not exist; if it does exist, new output is
+ appended to it. This is useful if you run the webservice
+ unattended and need to debug problems after they have
+ occurred.</para>
+ </listitem>
+ </itemizedlist>
+ </sect2>
+
+ <sect2 id="websrv_authenticate">
+ <title>Authenticating at web service logon</title>
+
+ <para>As opposed to the COM/XPCOM variant of the Main API, a client
+ that wants to use the web service must first log on by calling the
+ <computeroutput>IWebsessionManager::logon()</computeroutput> API (see
+ <xref linkend="IWebsessionManager__logon" />) that is specific to the
+ web service. Logon is necessary for the web service to be stateful;
+ internally, it maintains a session for each client that connects to
+ it.</para>
+
+ <para>The <computeroutput>IWebsessionManager::logon()</computeroutput>
+ API takes a user name and a password as arguments, which the web
+ service then passes to a customizable authentication plugin that
+ performs the actual authentication.</para>
+
+ <para>For testing purposes, it is recommended that you first disable
+ authentication with this command:<screen>VBoxManage setproperty websrvauthlibrary null</screen></para>
+
+ <para><warning>
+ <para>This will cause all logons to succeed, regardless of user
+ name or password. This should of course not be used in a
+ production environment.</para>
+ </warning>Generally, the mechanism by which clients are
+ authenticated is configurable by way of the
+ <computeroutput>VBoxManage</computeroutput> command:</para>
+
+ <para><screen>VBoxManage setproperty websrvauthlibrary default|null|&lt;library&gt;</screen></para>
+
+ <para>This way you can specify any shared object/dynamic link module
+ that conforms with the specifications for authentication modules as
+ laid out in section 9.3 of the VirtualBox User Manual; the web service
+ uses the same kind of modules as the VirtualBox RDP server.</para>
+
+ <para>By default, after installation, the web service uses the
+ VRDPAuth module that ships with VirtualBox. This module uses PAM on
+ Linux hosts to authenticate users. Any valid username/password
+ combination is accepted, it does not have to be the username and
+ password of the user running the webservice daemon. Unless
+ <computeroutput>vboxwebsrv</computeroutput> runs as root, PAM
+ authentication can fail, because sometimes the file
+ <computeroutput>/etc/shadow</computeroutput>, which is used by PAM, is
+ not readable. On most Linux distribution PAM uses a suid root helper
+ internally, so make sure you test this before deploying it. One can
+ override this behavior by setting the environment variable
+ <computeroutput>VBOX_PAM_ALLOW_INACTIVE</computeroutput> which will
+ suppress failures when unable to read the shadow password file. Please
+ use this variable carefully, and only if you fully understand what
+ you're doing.</para>
+ </sect2>
+
+ <sect2>
+ <title>Solaris host: starting the web service via SMF</title>
+
+ <para>On Solaris hosts, the VirtualBox web service daemon is
+ integrated into the SMF framework. You can change the parameters, but
+ don't have to if the defaults below already match your needs:<screen>svccfg -s svc:/application/virtualbox/webservice:default setprop config/host=localhost
+svccfg -s svc:/application/virtualbox/webservice:default setprop config/port=18083
+svccfg -s svc:/application/virtualbox/webservice:default setprop config/user=root</screen></para>
+
+ <para>If you made any change, don't forget to run the following
+ command to put the changes into effect immediately:<screen>svcadm refresh svc:/application/virtualbox/webservice:default</screen></para>
+
+ <para>If you forget the above command then the previous settings will
+ be used when enabling the service. Check the current property settings
+ with:<screen>svcprop -p config svc:/application/virtualbox/webservice:default</screen></para>
+
+ <para>When everything is configured correctly you can start the
+ VirtualBox webservice with the following command:<screen>svcadm enable svc:/application/virtualbox/webservice:default</screen></para>
+
+ <para>For more information about SMF, please refer to the Solaris
+ documentation.</para>
+ </sect2>
+ </sect1>
+ </chapter>
+
+ <chapter>
+ <title>Environment-specific notes</title>
+
+ <para>The Main API described in <xref linkend="sdkref_classes" /> and
+ <xref linkend="sdkref_enums" /> is mostly identical in all the supported
+ programming environments which have been briefly mentioned in the
+ introduction of this book. As a result, the Main API's general concepts
+ described in <xref linkend="concepts" /> are the same whether you use the
+ object-oriented web service (OOWS) for JAX-WS or a raw web service
+ connection via, say, Perl, or whether you use C++ COM bindings.</para>
+
+ <para>Some things are different depending on your environment, however.
+ These differences are explained in this chapter.</para>
+
+ <sect1 id="glue">
+ <title>Using the object-oriented web service (OOWS)</title>
+
+ <para>As explained in <xref linkend="webservice-or-com" />, VirtualBox
+ ships with client-side libraries for Java, Python and PHP that allow you
+ to use the VirtualBox web service in an intuitive, object-oriented way.
+ These libraries shield you from the client-side complications of managed
+ object references and other implementation details that come with the
+ VirtualBox web service. (If you are interested in these complications,
+ have a look at <xref linkend="raw-webservice" />).</para>
+
+ <para>We recommend that you start your experiments with the VirtualBox
+ web service by using our object-oriented client libraries for JAX-WS, a
+ web service toolkit for Java, which enables you to write code to
+ interact with VirtualBox in the simplest manner possible.</para>
+
+ <para>As "interfaces", "attributes" and "methods" are COM concepts,
+ please read the documentation in <xref linkend="sdkref_classes" /> and
+ <xref linkend="sdkref_enums" /> with the following notes in mind.</para>
+
+ <para>The OOWS bindings attempt to map the Main API as closely as
+ possible to the Java, Python and PHP languages. In other words, objects
+ are objects, interfaces become classes, and you can call methods on
+ objects as you would on local objects.</para>
+
+ <para>The main difference remains with attributes: to read an attribute,
+ call a "getXXX" method, with "XXX" being the attribute name with a
+ capitalized first letter. So when the Main API Reference says that
+ <computeroutput>IMachine</computeroutput> has a "name" attribute (see
+ <xref linkend="IMachine__name" xreflabel="IMachine::name" />), call
+ <computeroutput>getName()</computeroutput> on an IMachine object to
+ obtain a machine's name. Unless the attribute is marked as read-only in
+ the documentation, there will also be a corresponding "set"
+ method.</para>
+
+ <sect2 id="glue-jax-ws">
+ <title>The object-oriented web service for JAX-WS</title>
+
+ <para>JAX-WS is a powerful toolkit by Sun Microsystems to build both
+ server and client code with Java. It is part of Java 6 (JDK 1.6), but
+ can also be obtained separately for Java 5 (JDK 1.5). The VirtualBox
+ SDK comes with precompiled OOWS bindings working with both Java 5 and
+ 6.</para>
+
+ <para>The following sections explain how to get the JAX-WS sample code
+ running and explain a few common practices when using the JAX-WS
+ object-oriented web service.</para>
+
+ <sect3>
+ <title>Preparations</title>
+
+ <para>Since JAX-WS is already integrated into Java 6, no additional
+ preparations are needed for Java 6.</para>
+
+ <para>If you are using Java 5 (JDK 1.5.x), you will first need to
+ download and install an external JAX-WS implementation, as Java 5
+ does not support JAX-WS out of the box; for example, you can
+ download one from here: <ulink
+ url="https://jax-ws.dev.java.net/2.1.4/JAXWS2.1.4-20080502.jar">https://jax-ws.dev.java.net/2.1.4/JAXWS2.1.4-20080502.jar</ulink>.
+ Then perform the installation (<computeroutput>java -jar
+ JAXWS2.1.4-20080502.jar</computeroutput>).</para>
+ </sect3>
+
+ <sect3>
+ <title>Getting started: running the sample code</title>
+
+ <para>To run the OOWS for JAX-WS samples that we ship with the SDK,
+ perform the following steps: <orderedlist>
+ <listitem>
+ <para>Open a terminal and change to the directory where the
+ JAX-WS samples reside.<footnote>
+ <para>In
+ <computeroutput>sdk/bindings/webservice/java/jax-ws/samples/</computeroutput>.</para>
+ </footnote> Examine the header of
+ <computeroutput>Makefile</computeroutput> to see if the
+ supplied variables (Java compiler, Java executable) and a few
+ other details match your system settings.</para>
+ </listitem>
+
+ <listitem>
+ <para>To start the VirtualBox web service, open a second
+ terminal and change to the directory where the VirtualBox
+ executables are located. Then type:<screen>./vboxwebsrv -v</screen></para>
+
+ <para>The web service now waits for connections and will run
+ until you press Ctrl+C in this second terminal. The -v
+ argument causes it to log all connections to the terminal.
+ (See <xref linkend="runvboxwebsrv" os="" /> for details on how
+ to run the web service.)</para>
+ </listitem>
+
+ <listitem>
+ <para>Back in the first terminal and still in the samples
+ directory, to start a simple client example just type:<screen>make run16</screen></para>
+
+ <para>if you're on a Java 6 system; on a Java 5 system, run
+ <computeroutput>make run15</computeroutput> instead.</para>
+
+ <para>This should work on all Unix-like systems such as Linux
+ and Solaris. For Windows systems, use commands similar to what
+ is used in the Makefile.</para>
+
+ <para>This will compile the
+ <computeroutput>clienttest.java</computeroutput> code on the
+ first call and then execute the resulting
+ <computeroutput>clienttest</computeroutput> class to show the
+ locally installed VMs (see below).</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>The <computeroutput>clienttest</computeroutput> sample
+ imitates a few typical command line tasks that
+ <computeroutput>VBoxManage</computeroutput>, VirtualBox's regular
+ command-line front-end, would provide (see the VirtualBox User
+ Manual for details). In particular, you can run:<itemizedlist>
+ <listitem>
+ <para><computeroutput>java clienttest show
+ vms</computeroutput>: show the virtual machines that are
+ registered locally.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>java clienttest list
+ hostinfo</computeroutput>: show various information about the
+ host this VirtualBox installation runs on.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>java clienttest startvm
+ &lt;vmname|uuid&gt;</computeroutput>: start the given virtual
+ machine.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>The <computeroutput>clienttest.java</computeroutput> sample
+ code illustrates common basic practices how to use the VirtualBox
+ OOWS for JAX-WS, which we will explain in more detail in the
+ following chapters.</para>
+ </sect3>
+
+ <sect3>
+ <title>Logging on to the web service</title>
+
+ <para>Before a web service client can do anything useful, two
+ objects need to be created, as can be seen in the
+ <computeroutput>clienttest</computeroutput> constructor:<orderedlist>
+ <listitem>
+ <para>An instance of <xref linkend="IWebsessionManager"
+ xreflabel="IWebsessionManager" />, which is an interface
+ provided by the web service to manage "web sessions" -- that
+ is, stateful connections to the web service with persistent
+ objects upon which methods can be invoked.</para>
+
+ <para>In the OOWS for JAX-WS, the IWebsessionManager class
+ must be constructed explicitly, and a URL must be provided in
+ the constructor that specifies where the web service (the
+ server) awaits connections. The code in
+ <computeroutput>clienttest.java</computeroutput> connects to
+ "http://localhost:18083/", which is the default.</para>
+
+ <para>The port number, by default 18083, must match the port
+ number given to the
+ <computeroutput>vboxwebsrv</computeroutput> command line; see
+ <xref linkend="vboxwebsrv-ref" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>After that, the code calls <xref
+ linkend="IWebsessionManager__logon"
+ xreflabel="IWebsessionManager::logon()" />, which is the first
+ call that actually communicates with the server. This
+ authenticates the client with the web service and returns an
+ instance of <xref linkend="IVirtualBox"
+ xreflabel="IVirtualBox" />, the most fundamental interface of
+ the VirtualBox web service, from which all other functionality
+ can be derived.</para>
+
+ <para>If logon doesn't work, please take another look at <xref
+ linkend="websrv_authenticate" />.</para>
+ </listitem>
+ </orderedlist></para>
+ </sect3>
+
+ <sect3>
+ <title>Object management</title>
+
+ <para>The current OOWS for JAX-WS has certain memory management
+ related limitations. When you no longer need an object, call its
+ <xref linkend="IManagedObjectRef__release"
+ xreflabel="IManagedObjectRef::release()" /> method explicitly, which
+ frees appropriate managed reference, as is required by the raw
+ webservice; see <xref linkend="managed-object-references" /> for
+ details. This limitation may be reconsidered in a future version of
+ the VirtualBox SDK.</para>
+ </sect3>
+ </sect2>
+
+ <sect2 id="glue-python-ws">
+ <title>The object-oriented web service for Python</title>
+
+ <para>VirtualBox comes with two flavors of a Python API: one for web
+ service, discussed here, and one for the COM/XPCOM API discussed in
+ <xref linkend="pycom" />. The client code is mostly similar, except
+ for the initialization part, so it is up to the application developer
+ to choose the appropriate technology. Moreover, a common Python glue
+ layer exists, abstracting out concrete platform access details, see
+ <xref linkend="glue-python" />.</para>
+
+ <para>As indicated in <xref linkend="webservice-or-com" />, the
+ COM/XPCOM API gives better performance without the SOAP overhead, and
+ does not require a web server to be running. On the other hand, the
+ COM/XPCOM Python API requires a suitable Python bridge for your Python
+ installation (VirtualBox ships the most important ones for each
+ platform<footnote>
+ <para>On On Mac OS X only the Python versions bundled with the OS
+ are officially supported. This means Python 2.3 for 10.4, Python
+ 2.5 for 10.5 and Python 2.5 and 2.6 for 10.6.</para>
+ </footnote>), and you cannot connect to VirtualBox remotely. On
+ Windows, you can use the Main API from Python if the Win32 extensions
+ package for Python<footnote>
+ <para>See <ulink
+ url="http://sourceforge.net/project/showfiles.php?group_id=78018">http://sourceforge.net/project/showfiles.php?group_id=78018</ulink>.</para>
+ </footnote> is installed.</para>
+
+ <para>The VirtualBox OOWS for Python relies on the Python ZSI SOAP
+ implementation (see <ulink
+ url="http://pywebsvcs.sourceforge.net/zsi.html">http://pywebsvcs.sourceforge.net/zsi.html</ulink>),
+ which you will need to install locally before trying the examples.
+ Most Linux distributions come with package for ZSI, such as
+ <computeroutput>python-zsi</computeroutput> in Ubuntu.</para>
+
+ <para>To get started, open a terminal and change to the
+ <computeroutput>bindings/glue/python/sample</computeroutput>
+ directory, which contains an example of a simple interactive shell
+ able to control a VirtualBox instance. The shell is written using the
+ API layer, thereby hiding different implementation details, so it is
+ actually an example of code share among XPCOM, MSCOM and web services.
+ If you are interested in how to interact with the webservices layer
+ directly, have a look at
+ <computeroutput>install/vboxapi/__init__.py</computeroutput> which
+ contains the glue layer for all target platforms (i.e. XPCOM, MSCOM
+ and web services).</para>
+
+ <para>To start the shell, perform the following commands: <screen>/opt/VirtualBox/vboxwebsrv -t 0
+ # start webservice with object autocollection disabled
+export VBOX_PROGRAM_PATH=/opt/VirtualBox
+ # your VirtualBox installation directory
+export VBOX_SDK_PATH=/home/youruser/vbox-sdk
+ # where you've extracted the SDK
+./vboxshell.py -w </screen>See <xref linkend="vboxshell" /> for more
+ details on the shell's functionality. For you, as a VirtualBox
+ application developer, the vboxshell sample could be interesting as an
+ example of how to write code targeting both local and remote cases
+ (COM/XPCOM and SOAP). The common part of the shell is the same -- the
+ only difference is how it interacts with the invocation layer. You can
+ use the <computeroutput>connect</computeroutput> shell command to
+ connect to remote VirtualBox servers; in this case you can skip
+ starting the local webserver.</para>
+ </sect2>
+
+ <sect2>
+ <title>The object-oriented web service for PHP</title>
+
+ <para>VirtualBox also comes with object-oriented web service (OOWS)
+ wrappers for PHP5. These wrappers rely on the PHP SOAP
+ Extension<footnote>
+ <para>See <ulink url="???">http://www.php.net/soap</ulink>.</para>
+ </footnote>, which can be installed by configuring PHP with
+ <computeroutput>--enable-soap</computeroutput>.</para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="raw-webservice">
+ <title>Using the raw web service with any language</title>
+
+ <para>The following examples show you how to use the raw web service,
+ without the object-oriented client-side code that was described in the
+ previous chapter.</para>
+
+ <para>Generally, when reading the documentation in <xref
+ linkend="sdkref_classes" /> and <xref linkend="sdkref_enums" />, due to
+ the limitations of SOAP and WSDL lined out in <xref
+ linkend="rawws-conventions" />, please have the following notes in
+ mind:</para>
+
+ <para><orderedlist>
+ <listitem>
+ <para>Any COM method call becomes a <emphasis role="bold">plain
+ function call</emphasis> in the raw web service, with the object
+ as an additional first parameter (before the "real" parameters
+ listed in the documentation). So when the documentation says that
+ the <computeroutput>IVirtualBox</computeroutput> interface
+ supports the <computeroutput>createMachine()</computeroutput>
+ method (see <xref linkend="IVirtualBox__createMachine"
+ xreflabel="IVirtualBox::createMachine()" />), the web service
+ operation is
+ <computeroutput>IVirtualBox_createMachine(...)</computeroutput>,
+ and a managed object reference to an
+ <computeroutput>IVirtualBox</computeroutput> object must be passed
+ as the first argument.</para>
+ </listitem>
+
+ <listitem>
+ <para>For <emphasis role="bold">attributes</emphasis> in
+ interfaces, there will be at least one "get" function; there will
+ also be a "set" function, unless the attribute is "readonly". The
+ attribute name will be appended to the "get" or "set" prefix, with
+ a capitalized first letter. So, the "version" readonly attribute
+ of the <computeroutput>IVirtualBox</computeroutput> interface can
+ be retrieved by calling
+ <computeroutput>IVirtualBox_getVersion(vbox)</computeroutput>,
+ with <computeroutput>vbox</computeroutput> being the VirtualBox
+ object.</para>
+ </listitem>
+
+ <listitem>
+ <para>Whenever the API documentation says that a method (or an
+ attribute getter) returns an <emphasis
+ role="bold">object</emphasis>, it will returned a managed object
+ reference in the web service instead. As said above, managed
+ object references should be released if the web service client
+ does not log off again immediately!</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para></para>
+
+ <sect2 id="webservice-java-sample">
+ <title>Raw web service example for Java with Axis</title>
+
+ <para>Axis is an older web service toolkit created by the Apache
+ foundation. If your distribution does not have it installed, you can
+ get a binary from <ulink
+ url="http://www.apache.org">http://www.apache.org</ulink>. The
+ following examples assume that you have Axis 1.4 installed.</para>
+
+ <para>The VirtualBox SDK ships with an example for Axis that, again,
+ is called <computeroutput>clienttest.java</computeroutput> and that
+ imitates a few of the commands of
+ <computeroutput>VBoxManage</computeroutput> over the wire.</para>
+
+ <para>Then perform the following steps:<orderedlist>
+ <listitem>
+ <para>Create a working directory somewhere. Under your
+ VirtualBox installation directory, find the
+ <computeroutput>sdk/webservice/samples/java/axis/</computeroutput>
+ directory and copy the file
+ <computeroutput>clienttest.java</computeroutput> to your working
+ directory.</para>
+ </listitem>
+
+ <listitem>
+ <para>Open a terminal in your working directory. Execute the
+ following command:<screen> java org.apache.axis.wsdl.WSDL2Java /path/to/vboxwebService.wsdl</screen></para>
+
+ <para>The <computeroutput>vboxwebService.wsdl</computeroutput>
+ file should be located in the
+ <computeroutput>sdk/webservice/</computeroutput>
+ directory.</para>
+
+ <para>If this fails, your Apache Axis may not be located on your
+ system classpath, and you may have to adjust the CLASSPATH
+ environment variable. Something like this:<screen>export CLASSPATH="/path-to-axis-1_4/lib/*":$CLASSPATH</screen></para>
+
+ <para>Use the directory where the Axis JAR files are located.
+ Mind the quotes so that your shell passes the "*" character to
+ the java executable without expanding. Alternatively, add a
+ corresponding <computeroutput>-classpath</computeroutput>
+ argument to the "java" call above.</para>
+
+ <para>If the command executes successfully, you should see an
+ "org" directory with subdirectories containing Java source files
+ in your working directory. These classes represent the
+ interfaces that the VirtualBox web service offers, as described
+ by the WSDL file.</para>
+
+ <para>This is the bit that makes using web services so
+ attractive to client developers: if a language's toolkit
+ understands WSDL, it can generate large amounts of support code
+ automatically. Clients can then easily use this support code and
+ can be done with just a few lines of code.</para>
+ </listitem>
+
+ <listitem>
+ <para>Next, compile the
+ <computeroutput>clienttest.java</computeroutput> source:<screen>javac clienttest.java </screen></para>
+
+ <para>This should yield a "clienttest.class" file.</para>
+ </listitem>
+
+ <listitem>
+ <para>To start the VirtualBox web service, open a second
+ terminal and change to the directory where the VirtualBox
+ executables are located. Then type:<screen>./vboxwebsrv -v</screen></para>
+
+ <para>The web service now waits for connections and will run
+ until you press Ctrl+C in this second terminal. The -v argument
+ causes it to log all connections to the terminal. (See <xref
+ linkend="runvboxwebsrv" os="" /> for details on how to run the
+ web service.)</para>
+ </listitem>
+
+ <listitem>
+ <para>Back in the original terminal where you compiled the Java
+ source, run the resulting binary, which will then connect to the
+ web service:<screen>java clienttest</screen></para>
+
+ <para>The client sample will connect to the web service (on
+ localhost, but the code could be changed to connect remotely if
+ the web service was running on a different machine) and make a
+ number of method calls. It will output the version number of
+ your VirtualBox installation and a list of all virtual machines
+ that are currently registered (with a bit of seemingly random
+ data, which will be explained later).</para>
+ </listitem>
+ </orderedlist></para>
+ </sect2>
+
+ <sect2 id="raw-webservice-perl">
+ <title>Raw web service example for Perl</title>
+
+ <para>We also ship a small sample for Perl. It uses the SOAP::Lite
+ perl module to communicate with the VirtualBox web service.</para>
+
+ <para>The
+ <computeroutput>sdk/bindings/webservice/perl/lib/</computeroutput>
+ directory contains a pre-generated Perl module that allows for
+ communicating with the web service from Perl. You can generate such a
+ module yourself using the "stubmaker" tool that comes with SOAP::Lite,
+ but since that tool is slow as well as sometimes unreliable, we are
+ shipping a working module with the SDK for your convenience.</para>
+
+ <para>Perform the following steps:<orderedlist>
+ <listitem>
+ <para>If SOAP::Lite is not yet installed on your system, you
+ will need to install the package first. On Debian-based systems,
+ the package is called
+ <computeroutput>libsoap-lite-perl</computeroutput>; on Gentoo,
+ it's <computeroutput>dev-perl/SOAP-Lite</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para>Open a terminal in the
+ <computeroutput>sdk/bindings/webservice/perl/samples/</computeroutput>
+ directory.</para>
+ </listitem>
+
+ <listitem>
+ <para>To start the VirtualBox web service, open a second
+ terminal and change to the directory where the VirtualBox
+ executables are located. Then type:<screen>./vboxwebsrv -v</screen></para>
+
+ <para>The web service now waits for connections and will run
+ until you press Ctrl+C in this second terminal. The -v argument
+ causes it to log all connections to the terminal. (See <xref
+ linkend="runvboxwebsrv" os="" /> for details on how to run the
+ web service.)</para>
+ </listitem>
+
+ <listitem>
+ <para>In the first terminal with the Perl sample, run the
+ clienttest.pl script:<screen>perl -I ../lib clienttest.pl</screen></para>
+ </listitem>
+ </orderedlist></para>
+ </sect2>
+
+ <sect2>
+ <title>Programming considerations for the raw web service</title>
+
+ <para>If you use the raw web service, you need to keep a number of
+ things in mind, or you will sooner or later run into issues that are
+ not immediately obvious. By contrast, the object-oriented client-side
+ libraries described in <xref linkend="glue" /> take care of these
+ things automatically and thus greatly simplify using the web
+ service.</para>
+
+ <sect3 id="rawws-conventions">
+ <title>Fundamental conventions</title>
+
+ <para>If you are familiar with other web services, you may find the
+ VirtualBox web service to behave a bit differently to accommodate
+ for the fact that VirtualBox web service more or less maps the
+ VirtualBox Main COM API. The following main differences had to be
+ taken care of:<itemizedlist>
+ <listitem>
+ <para>Web services, as expressed by WSDL, are not
+ object-oriented. Even worse, they are normally stateless (or,
+ in web services terminology, "loosely coupled"). Web service
+ operations are entirely procedural, and one cannot normally
+ make assumptions about the state of a web service between
+ function calls.</para>
+
+ <para>In particular, this normally means that you cannot work
+ on objects in one method call that were created by another
+ call.</para>
+ </listitem>
+
+ <listitem>
+ <para>By contrast, the VirtualBox Main API, being expressed in
+ COM, is object-oriented and works entirely on objects, which
+ are grouped into public interfaces, which in turn have
+ attributes and methods associated with them.</para>
+ </listitem>
+ </itemizedlist> For the VirtualBox web service, this results in
+ three fundamental conventions:<orderedlist>
+ <listitem>
+ <para>All <emphasis role="bold">function names</emphasis> in
+ the VirtualBox web service consist of an interface name and a
+ method name, joined together by an underscore. This is because
+ there are only functions ("operations") in WSDL, but no
+ classes, interfaces, or methods.</para>
+
+ <para>In addition, all calls to the VirtualBox web service
+ (except for logon, see below) take a <emphasis
+ role="bold">managed object reference</emphasis> as the first
+ argument, representing the object upon which the underlying
+ method is invoked. (Managed object references are explained in
+ detail below; see <xref
+ linkend="managed-object-references" />.)</para>
+
+ <para>So, when one would normally code, in the pseudo-code of
+ an object-oriented language, to invoke a method upon an
+ object:<screen>IMachine machine;
+result = machine.getName();</screen></para>
+
+ <para>In the VirtualBox web service, this looks something like
+ this (again, pseudo-code):<screen>IMachineRef machine;
+result = IMachine_getName(machine);</screen></para>
+ </listitem>
+
+ <listitem>
+ <para>To make the web service stateful, and objects persistent
+ between method calls, the VirtualBox web service introduces a
+ <emphasis role="bold">session manager</emphasis> (by way of
+ the <xref linkend="IWebsessionManager"
+ xreflabel="IWebsessionManager" /> interface), which manages
+ object references. Any client wishing to interact with the web
+ service must first log on to the session manager and in turn
+ receives a managed object reference to an object that supports
+ the <xref linkend="IVirtualBox" xreflabel="IVirtualBox" />
+ interface (the basic interface in the Main API).</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>In other words, as opposed to other web services, <emphasis
+ role="bold">the VirtualBox web service is both object-oriented and
+ stateful.</emphasis></para>
+ </sect3>
+
+ <sect3>
+ <title>Example: A typical web service client session</title>
+
+ <para>A typical short web service session to retrieve the version
+ number of the VirtualBox web service (to be precise, the underlying
+ Main API version number) looks like this:<orderedlist>
+ <listitem>
+ <para>A client logs on to the web service by calling <xref
+ linkend="IWebsessionManager__logon"
+ xreflabel="IWebsessionManager::logon()" /> with a valid user
+ name and password. See <xref linkend="websrv_authenticate" />
+ for details about how authentication works.</para>
+ </listitem>
+
+ <listitem>
+ <para>On the server side,
+ <computeroutput>vboxwebsrv</computeroutput> creates a session,
+ which persists until the client calls <xref
+ linkend="IWebsessionManager__logoff"
+ xreflabel="IWebsessionManager::logoff()" /> or the session
+ times out after a configurable period of inactivity (see <xref
+ linkend="vboxwebsrv-ref" />).</para>
+
+ <para>For the new session, the web service creates an instance
+ of <xref linkend="IVirtualBox" xreflabel="IVirtualBox" />.
+ This interface is the most central one in the Main API and
+ allows access to all other interfaces, either through
+ attributes or method calls. For example, IVirtualBox contains
+ a list of all virtual machines that are currently registered
+ (as they would be listed on the left side of the VirtualBox
+ main program).</para>
+
+ <para>The web service then creates a managed object reference
+ for this instance of IVirtualBox and returns it to the calling
+ client, which receives it as the return value of the logon
+ call. Something like this:</para>
+
+ <screen>string oVirtualBox;
+oVirtualBox = webservice.IWebsessionManager_logon("user", "pass");</screen>
+
+ <para>(The managed object reference "oVirtualBox" is just a
+ string consisting of digits and dashes. However, it is a
+ string with a meaning and will be checked by the web service.
+ For details, see below. As hinted above, <xref
+ linkend="IWebsessionManager__logon"
+ xreflabel="IWebsessionManager::logon()" /> is the
+ <emphasis>only</emphasis> operation provided by the web
+ service which does not take a managed object reference as the
+ first argument!)</para>
+ </listitem>
+
+ <listitem>
+ <para>The VirtualBox Main API documentation says that the
+ <computeroutput>IVirtualBox</computeroutput> interface has a
+ <xref linkend="IVirtualBox__version" xreflabel="version" />
+ attribute, which is a string. For each attribute, there is a
+ "get" and a "set" method in COM, which maps to according
+ operations in the web service. So, to retrieve the "version"
+ attribute of this <computeroutput>IVirtualBox</computeroutput>
+ object, the web service client does this:<screen>string version;
+version = webservice.IVirtualBox_getVersion(oVirtualBox);
+
+print version;</screen></para>
+
+ <para>And it will print
+ "$VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILD".</para>
+ </listitem>
+
+ <listitem>
+ <para>The web service client calls <xref
+ linkend="IWebsessionManager__logoff"
+ xreflabel="IWebsessionManager::logoff()" /> with the
+ VirtualBox managed object reference. This will clean up all
+ allocated resources.</para>
+ </listitem>
+ </orderedlist></para>
+ </sect3>
+
+ <sect3 id="managed-object-references">
+ <title>Managed object references</title>
+
+ <para>To a web service client, a managed object reference looks like
+ a string: two 64-bit hex numbers separated by a dash. This string,
+ however, represents a COM object that "lives" in the web service
+ process. The two 64-bit numbers encoded in the managed object
+ reference represent a session ID (which is the same for all objects
+ in the same web service session, i.e. for all objects after one
+ logon) and a unique object ID within that session.</para>
+
+ <para>Managed object references are created in two
+ situations:<orderedlist>
+ <listitem>
+ <para>When a client logs on, by calling <xref
+ linkend="IWebsessionManager__logon"
+ xreflabel="IWebsessionManager::logon()" />.</para>
+
+ <para>Upon logon, the websession manager creates one instance
+ of <xref linkend="IVirtualBox" xreflabel="IVirtualBox" /> and
+ another object of <xref linkend="ISession"
+ xreflabel="ISession" /> representing the web service session.
+ This can be retrieved using <xref
+ linkend="IWebsessionManager__getSessionObject"
+ xreflabel="IWebsessionManager::getSessionObject()" />.</para>
+
+ <para>(Technically, there is always only one <xref
+ linkend="IVirtualBox" xreflabel="IVirtualBox" /> object, which
+ is shared between all sessions and clients, as it is a COM
+ singleton. However, each session receives its own managed
+ object reference to it. The <xref linkend="ISession"
+ xreflabel="ISession" /> object, however, is created and
+ destroyed for each session.)</para>
+ </listitem>
+
+ <listitem>
+ <para>Whenever a web service clients invokes an operation
+ whose COM implementation creates COM objects.</para>
+
+ <para>For example, <xref linkend="IVirtualBox__createMachine"
+ xreflabel="IVirtualBox::createMachine()" /> creates a new
+ instance of <xref linkend="IMachine" xreflabel="IMachine" />;
+ the COM object returned by the COM method call is then wrapped
+ into a managed object reference by the web server, and this
+ reference is returned to the web service client.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>Internally, in the web service process, each managed object
+ reference is simply a small data structure, containing a COM pointer
+ to the "real" COM object, the web session ID and the object ID. This
+ structure is allocated on creation and stored efficiently in hashes,
+ so that the web service can look up the COM object quickly whenever
+ a web service client wishes to make a method call. The random
+ session ID also ensures that one web service client cannot intercept
+ the objects of another.</para>
+
+ <para>Managed object references are not destroyed automatically and
+ must be released by explicitly calling <xref
+ linkend="IManagedObjectRef__release"
+ xreflabel="IManagedObjectRef::release()" />. This is important, as
+ otherwise hundreds or thousands of managed object references (and
+ corresponding COM objects, which can consume much more memory!) can
+ pile up in the web service process and eventually cause it to deny
+ service.</para>
+
+ <para>To reiterate: The underlying COM object, which the reference
+ points to, is only freed if the managed object reference is
+ released. It is therefore vital that web service clients properly
+ clean up after the managed object references that are returned to
+ them.</para>
+
+ <para>When a web service client calls <xref
+ linkend="IWebsessionManager__logoff"
+ xreflabel="IWebsessionManager::logoff()" />, all managed object
+ references created during the session are automatically freed. For
+ short-lived sessions that do not create a lot of objects, logging
+ off may therefore be sufficient, although it is certainly not "best
+ practice".</para>
+ </sect3>
+
+ <sect3>
+ <title>Some more detail about web service operation</title>
+
+ <sect4 id="soap">
+ <title>SOAP messages</title>
+
+ <para>Whenever a client makes a call to a web service, this
+ involves a complicated procedure internally. These calls are
+ remote procedure calls. Each such procedure call typically
+ consists of two "message" being passed, where each message is a
+ plain-text HTTP request with a standard HTTP header and a special
+ XML document following. This XML document encodes the name of the
+ procedure to call and the argument names and values passed to
+ it.</para>
+
+ <para>To give you an idea of what such a message looks like,
+ assuming that a web service provides a procedure called
+ "SayHello", which takes a string "name" as an argument and returns
+ "Hello" with a space and that name appended, the request message
+ could look like this:</para>
+
+ <para><screen>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;SOAP-ENV:Envelope
+ xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
+ xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:test="http://test/"&gt;
+&lt;SOAP-ENV:Body&gt;
+ &lt;test:SayHello&gt;
+ &lt;name&gt;Peter&lt;/name&gt;
+ &lt;/test:SayHello&gt;
+ &lt;/SOAP-ENV:Body&gt;
+&lt;/SOAP-ENV:Envelope&gt;</screen>A similar message -- the "response" message
+ -- would be sent back from the web service to the client,
+ containing the return value "Hello Peter".</para>
+
+ <para>Most programming languages provide automatic support to
+ generate such messages whenever code in that programming language
+ makes such a request. In other words, these programming languages
+ allow for writing something like this (in pseudo-C++ code):</para>
+
+ <para><screen>webServiceClass service("localhost", 18083); // server and port
+string result = service.SayHello("Peter"); // invoke remote procedure</screen>and
+ would, for these two pseudo-lines, automatically perform these
+ steps:</para>
+
+ <para><orderedlist>
+ <listitem>
+ <para>prepare a connection to a web service running on port
+ 18083 of "localhost";</para>
+ </listitem>
+
+ <listitem>
+ <para>for the <computeroutput>SayHello()</computeroutput>
+ function of the web service, generate a SOAP message like in
+ the above example by encoding all arguments of the remote
+ procedure call (which could involve all kinds of type
+ conversions and complex marshalling for arrays and
+ structures);</para>
+ </listitem>
+
+ <listitem>
+ <para>connect to the web service via HTTP and send that
+ message;</para>
+ </listitem>
+
+ <listitem>
+ <para>wait for the web service to send a response
+ message;</para>
+ </listitem>
+
+ <listitem>
+ <para>decode that response message and put the return value
+ of the remote procedure into the "result" variable.</para>
+ </listitem>
+ </orderedlist></para>
+ </sect4>
+
+ <sect4 id="wsdl">
+ <title>Service descriptions in WSDL</title>
+
+ <para>In the above explanations about SOAP, it was left open how
+ the programming language learns about how to translate function
+ calls in its own syntax into proper SOAP messages. In other words,
+ the programming language needs to know what operations the web
+ service supports and what types of arguments are required for the
+ operation's data in order to be able to properly serialize and
+ deserialize the data to and from the web service. For example, if
+ a web service operation expects a number in "double" floating
+ point format for a particular parameter, the programming language
+ cannot send to it a string instead.</para>
+
+ <para>For this, the Web Service Definition Language (WSDL) was
+ invented, another XML substandard that describes exactly what
+ operations the web service supports and, for each operation, which
+ parameters and types are needed with each request and response
+ message. WSDL descriptions can be incredibly verbose, and one of
+ the few good things that can be said about this standard is that
+ it is indeed supported by most programming languages.</para>
+
+ <para>So, if it is said that a programming language "supports" web
+ services, this typically means that a programming language has
+ support for parsing WSDL files and somehow integrating the remote
+ procedure calls into the native language syntax -- for example,
+ like in the Java sample shown in <xref
+ linkend="webservice-java-sample" />.</para>
+
+ <para>For details about how programming languages support web
+ services, please refer to the documentation that comes with the
+ individual languages. Here are a few pointers:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>For <emphasis role="bold">C++,</emphasis> among many
+ others, the gSOAP toolkit is a good option. Parts of gSOAP are
+ also used in VirtualBox to implement the VirtualBox web
+ service.</para>
+ </listitem>
+
+ <listitem>
+ <para>For <emphasis role="bold">Java,</emphasis> there are
+ several implementations already described in this document
+ (see <xref linkend="glue-jax-ws" /> and <xref
+ linkend="webservice-java-sample" />).</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Perl</emphasis> supports WSDL via
+ the SOAP::Lite package. This in turn comes with a tool called
+ <computeroutput>stubmaker.pl</computeroutput> that allows you
+ to turn any WSDL file into a Perl package that you can import.
+ (You can also import any WSDL file "live" by having it parsed
+ every time the script runs, but that can take a while.) You
+ can then code (again, assuming the above example):<screen>my $result = servicename-&gt;sayHello("Peter");</screen></para>
+
+ <para>A sample that uses SOAP::Lite was described in <xref
+ linkend="raw-webservice-perl" />.</para>
+ </listitem>
+ </orderedlist>
+ </sect4>
+ </sect3>
+ </sect2>
+ </sect1>
+
+ <sect1 id="api_com">
+ <title>Using COM/XPCOM directly</title>
+
+ <para>If you do not require <emphasis>remote</emphasis> procedure calls
+ such as those offered by the VirtualBox web service, and if you know
+ Python or C++ as well as COM, you might find it preferable to program
+ VirtualBox's Main API directly via COM.</para>
+
+ <para>COM stands for "Component Object Model" and is a standard
+ originally introduced by Microsoft in the 1990s for Microsoft Windows.
+ It allows for organizing software in an object-oriented way and across
+ processes; code in one process may access objects that live in another
+ process.</para>
+
+ <para>COM has several advantages: it is language-neutral, meaning that
+ even though all of VirtualBox is internally written in C++, programs
+ written in other languages could communicate with it. COM also cleanly
+ separates interface from implementation, so that external programs need
+ not know anything about the messy and complicated details of VirtualBox
+ internals.</para>
+
+ <para>On a Windows host, all parts of VirtualBox will use the COM
+ functionality that is native to Windows. On other hosts (including
+ Linux), VirtualBox comes with a built-in implementation of XPCOM, as
+ originally created by the Mozilla project, which we have enhanced to
+ support interprocess communication on a level comparable to Microsoft
+ COM. Internally, VirtualBox has an abstraction layer that allows the
+ same VirtualBox code to work both with native COM as well as our XPCOM
+ implementation.</para>
+
+ <sect2 id="pycom">
+ <title>Python COM API</title>
+
+ <para>On Windows, Python scripts can use COM and VirtualBox interfaces
+ to control almost all aspects of virtual machine execution. As an
+ example, use the following commands to instantiate the VirtualBox
+ object and start a VM: <screen>
+ vbox = win32com.client.Dispatch("VirtualBox.VirtualBox")
+ session = win32com.client.Dispatch("VirtualBox.Session")
+ mach = vbox.findMachine("uuid or name of machine to start")
+ progress = mach.launchVMProcess(session, "gui", "")
+ progress.waitForCompletion(-1)
+ </screen> Also, see
+ <computeroutput>/bindings/glue/python/samples/vboxshell.py</computeroutput>
+ for more advanced usage scenarious. However, unless you have specific
+ requirements, we strongly recommend to use the generic glue layer
+ described in the next section to access MS COM objects.</para>
+ </sect2>
+
+ <sect2 id="glue-python">
+ <title>Common Python bindings layer</title>
+
+ <para>As different wrappers ultimately provide access to the same
+ underlying API, and to simplify porting and development of Python
+ application using the VirtualBox Main API, we developed a common glue
+ layer that abstracts out most platform-specific details from the
+ application and allows the developer to focus on application logic.
+ The VirtualBox installer automatically sets up this glue layer for the
+ system default Python install. See below for details on how to set up
+ the glue layer if you want to use a different Python
+ installation.</para>
+
+ <para>In this layer, the class
+ <computeroutput>VirtualBoxManager</computeroutput> hides most
+ platform-specific details. It can be used to access both the local
+ (COM) and the webservice-based API. The following code can be used by
+ an application to use the glue layer.</para>
+
+ <screen># This code assumes vboxapi.py from VirtualBox distribution
+# being in PYTHONPATH, or installed system-wide
+from vboxapi import VirtualBoxManager
+
+# This code initializes VirtualBox manager with default style
+# and parameters
+virtualBoxManager = VirtualBoxManager(None, None)
+
+# Alternatively, one can be more verbose, and initialize
+# glue with webservice backend, and provide authentication
+# information
+virtualBoxManager = VirtualBoxManager("WEBSERVICE",
+ {'url':'http://myhost.com::18083/',
+ 'user':'me',
+ 'password':'secret'}) </screen>
+
+ <para>We supply the <computeroutput>VirtualBoxManager</computeroutput>
+ constructor with 2 arguments: style and parameters. Style defines
+ which bindings style to use (could be "MSCOM", "XPCOM" or
+ "WEBSERVICE"), and if set to <computeroutput>None</computeroutput>
+ defaults to usable platform bindings (MS COM on Windows, XPCOM on
+ other platforms). The second argument defines parameters, passed to
+ the platform-specific module, as we do in the second example, where we
+ pass username and password to be used to authenticate against the web
+ service.</para>
+
+ <para>After obtaining the
+ <computeroutput>VirtualBoxManager</computeroutput> instance, one can
+ perform operations on the IVirtualBox class. For example, the
+ following code will a start virtual machine by name or ID:</para>
+
+ <screen>vbox = virtualBoxManager.vbox
+mgr = virtualBoxManager.mgr
+print "Version is",vbox.version
+
+def machById(id):
+ mach = None
+ for m in virtualBoxManager.getArray(vbox, 'machines'):
+ if m.name == id or mach.id == id:
+ mach = m
+ break
+ return mach
+
+name = "Linux"
+mach = machById(name)
+if mach is None:
+ print "cannot find machine",name
+else:
+ session = mgr.getSessionObject(vbox)
+ # one can also start headless session with "vrdp" instead of "gui"
+ progress = vb.openRemoteSession(session, mach.id, "gui", "")
+ progress.waitForCompletion(-1)
+ session.close()
+ </screen>
+
+ <para>This code also shows cross-platform access to array properties
+ (certain limitations prevent one from using
+ <computeroutput>vbox.machines</computeroutput> to access a list of
+ available virtual machines in case of XPCOM), and a mechanism of
+ uniform session creation
+ (<computeroutput>virtualBoxManager.mgr.getSessionObject()</computeroutput>).</para>
+
+ <para>In case you want to use the glue layer with a different Python
+ installation, use these steps in a shell to add the necessary
+ files:</para>
+
+ <screen> # cd VBOX_INSTALL_PATH/sdk/installer
+ # PYTHON vboxapisetup.py install</screen>
+ </sect2>
+
+ <sect2 id="cppcom">
+ <title>C++ COM API</title>
+
+ <para>C++ is the language that VirtualBox itself is written in, so C++
+ is the most direct way to use the Main API -- but it is not
+ necessarily the easiest, as using COM and XPCOM has its own set of
+ complications.</para>
+
+ <para>VirtualBox ships with sample programs that demonstrate how to
+ use the Main API to implement a number of tasks on your host platform.
+ These samples can be found in the
+ <computeroutput>/bindings/xpcom/samples</computeroutput> directory for
+ Linux, Mac OS X and Solaris and
+ <computeroutput>/bindings/mscom/samples</computeroutput> for Windows.
+ The two samples are actually different, because the one for Windows
+ uses native COM, whereas the other uses our XPCOM implementation, as
+ described above.</para>
+
+ <para>Since COM and XPCOM are conceptually very similar but vary in
+ the implementation details, we have created a "glue" layer that
+ shields COM client code from these differences. All VirtualBox uses is
+ this glue layer, so the same code written once works on both Windows
+ hosts (with native COM) as well as on other hosts (with our XPCOM
+ implementation). It is recommended to always use this glue code
+ instead of using the COM and XPCOM APIs directly, as it is very easy
+ to make your code completely independent from the platform it is
+ running on.<!-- A third sample,
+ <computeroutput>tstVBoxAPIGlue.cpp</computeroutput>, illustrates how to
+ use the glue layer.
+--></para>
+
+ <para>In order to encapsulate platform differences between Microsoft
+ COM and XPCOM, the following items should be kept in mind when using
+ the glue layer:</para>
+
+ <para><orderedlist>
+ <listitem>
+ <para><emphasis role="bold">Attribute getters and
+ setters.</emphasis> COM has the notion of "attributes" in
+ interfaces, which roughly compare to C++ member variables in
+ classes. The difference is that for each attribute declared in
+ an interface, COM automatically provides a "get" method to
+ return the attribute's value. Unless the attribute has been
+ marked as "readonly", a "set" attribute is also provided.</para>
+
+ <para>To illustrate, the IVirtualBox interface has a "version"
+ attribute, which is read-only and of the "wstring" type (the
+ standard string type in COM). As a result, you can call the
+ "get" method for this attribute to retrieve the version number
+ of VirtualBox.</para>
+
+ <para>Unfortunately, the implementation differs between COM and
+ XPCOM. Microsoft COM names the "get" method like this:
+ <computeroutput>get_Attribute()</computeroutput>, whereas XPCOM
+ uses this syntax:
+ <computeroutput>GetAttribute()</computeroutput> (and accordingly
+ for "set" methods). To hide these differences, the VirtualBox
+ glue code provides the
+ <computeroutput>COMGETTER(attrib)</computeroutput> and
+ <computeroutput>COMSETTER(attrib)</computeroutput> macros. So,
+ <computeroutput>COMGETTER(version)()</computeroutput> (note, two
+ pairs of brackets) expands to
+ <computeroutput>get_Version()</computeroutput> on Windows and
+ <computeroutput>GetVersion()</computeroutput> on other
+ platforms.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Unicode conversions.</emphasis>
+ While the rest of the modern world has pretty much settled on
+ encoding strings in UTF-8, COM, unfortunately, uses UCS-16
+ encoding. This requires a lot of conversions, in particular
+ between the VirtualBox Main API and the Qt GUI, which, like the
+ rest of Qt, likes to use UTF-8.</para>
+
+ <para>To facilitate these conversions, VirtualBox provides the
+ <computeroutput>com::Bstr</computeroutput> and
+ <computeroutput>com::Utf8Str</computeroutput> classes, which
+ support all kinds of conversions back and forth.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">COM autopointers.</emphasis>
+ Possibly the greatest pain of using COM -- reference counting --
+ is alleviated by the
+ <computeroutput>ComPtr&lt;&gt;</computeroutput> template
+ provided by the <computeroutput>ptr.h</computeroutput> file in
+ the glue layer.</para>
+ </listitem>
+ </orderedlist></para>
+ </sect2>
+
+ <sect2 id="event-queue">
+ <title>Event queue processing</title>
+
+ <para>Both VirtualBox client programs and frontends should
+ periodically perform processing of the main event queue, and do that
+ on the application's main thread. In case of a typical GUI Windows/Mac
+ OS application this happens automatically in the GUI's dispatch loop.
+ However, for CLI only application, the appropriate actions have to be
+ taken. For C++ applications, the VirtualBox SDK provided glue method
+ <screen>
+ int EventQueue::processEventQueue(uint32_t cMsTimeout)
+ </screen> can be used for both blocking and non-blocking operations.
+ For the Python bindings, a common layer provides the method <screen>
+ VirtualBoxManager.waitForEvents(ms)
+ </screen> with similar semantics.</para>
+
+ <para>Things get somewhat more complicated for situations where an
+ application using VirtualBox cannot directly control the main event
+ loop and the main event queue is separated from the event queue of the
+ programming librarly (for example in case of Qt on Unix platforms). In
+ such a case, the application developer is advised to use a
+ platform/toolkit specific event injection mechanism to force event
+ queue checks either based on periodical timer events delivered to the
+ main thread, or by using custom platform messages to notify the main
+ thread when events are available. See the VBoxSDL and Qt (VirtualBox)
+ frontends as examples.</para>
+ </sect2>
+
+ <sect2 id="vbcom">
+ <title>Visual Basic and Visual Basic Script (VBS) on Windows
+ hosts</title>
+
+ <para>On Windows hosts, one can control some of the VirtualBox Main
+ API functionality from VBS scripts, and pretty much everything from
+ Visual Basic programs.<footnote>
+ <para>The difference results from the way VBS treats COM
+ safearrays, which are used to keep lists in the Main API. VBS
+ expects every array element to be a
+ <computeroutput>VARIANT</computeroutput>, which is too strict a
+ limitation for any high performance API. We may lift this
+ restriction for interface APIs in a future version, or
+ alternatively provide conversion APIs.</para>
+ </footnote></para>
+
+ <para>VBS is scripting language available in any recent Windows
+ environment. As an example, the following VBS code will print
+ VirtualBox version: <screen>
+ set vb = CreateObject("VirtualBox.VirtualBox")
+ Wscript.Echo "VirtualBox version " &amp; vb.version
+ </screen> See
+ <computeroutput>bindings/mscom/vbs/sample/vboxinfo.vbs</computeroutput>
+ for the complete sample.</para>
+
+ <para>Visual Basic is a popular high level language capable of
+ accessing COM objects. The following VB code will iterate over all
+ available virtual machines:<screen>
+ Dim vb As VirtualBox.IVirtualBox
+
+ vb = CreateObject("VirtualBox.VirtualBox")
+ machines = ""
+ For Each m In vb.Machines
+ m = m &amp; " " &amp; m.Name
+ Next
+ </screen> See
+ <computeroutput>bindings/mscom/vb/sample/vboxinfo.vb</computeroutput>
+ for the complete sample.</para>
+ </sect2>
+
+ <sect2 id="cbinding">
+ <title>C binding to XPCOM API</title>
+
+ <note>
+ <para>This section currently applies to Linux hosts only.</para>
+ </note>
+
+ <para>Starting with version 2.2, VirtualBox offers a C binding for the
+ XPCOM API.</para>
+
+ <para>The C binding provides a layer enabling object creation, method
+ invocation and attribute access from C.</para>
+
+ <sect3 id="c-gettingstarted">
+ <title>Getting started</title>
+
+ <para>The following sections describe how to use the C binding in a
+ C program.</para>
+
+ <para>For Linux, a sample program is provided which demonstrates use
+ of the C binding to initialize XPCOM, get handles for VirtualBox and
+ Session objects, make calls to list and start virtual machines, and
+ uninitialize resources when done. The program uses the VBoxGlue
+ library to open the C binding layer during runtime.</para>
+
+ <para>The sample program
+ <computeroutput>tstXPCOMCGlue</computeroutput> is located in the bin
+ directory and can be run without arguments. It lists registered
+ machines on the host along with some additional information and ask
+ for a machine to start. The source for this program is available in
+ <computeroutput>sdk/bindings/xpcom/cbinding/samples/</computeroutput>
+ directory. The source for the VBoxGlue library is available in the
+ <computeroutput>sdk/bindings/xpcom/cbinding/</computeroutput>
+ directory.</para>
+ </sect3>
+
+ <sect3 id="c-initialization">
+ <title>XPCOM initialization</title>
+
+ <para>Just like in C++, XPCOM needs to be initialized before it can
+ be used. The <computeroutput>VBoxCAPI_v2_5.h</computeroutput> header
+ provides the interface to the C binding. Here's how to initialize
+ XPCOM:</para>
+
+ <screen>#include "VBoxCAPI_v2_5.h"
+...
+PCVBOXXPCOM g_pVBoxFuncs = NULL;
+IVirtualBox *vbox = NULL;
+ISession *session = NULL;
+
+/*
+ * VBoxGetXPCOMCFunctions() is the only function exported by
+ * VBoxXPCOMC.so and the only one needed to make virtualbox
+ * work with C. This functions gives you the pointer to the
+ * function table (g_pVBoxFuncs).
+ *
+ * Once you get the function table, then how and which functions
+ * to use is explained below.
+ *
+ * g_pVBoxFuncs-&gt;pfnComInitialize does all the necessary startup
+ * action and provides us with pointers to vbox and session handles.
+ * It should be matched by a call to g_pVBoxFuncs-&gt;pfnComUninitialize()
+ * when done.
+ */
+
+g_pVBoxFuncs = VBoxGetXPCOMCFunctions(VBOX_XPCOMC_VERSION);
+g_pVBoxFuncs-&gt;pfnComInitialize(&amp;vbox, &amp;session);</screen>
+
+ <para>If either <computeroutput>vbox</computeroutput> or
+ <computeroutput>session</computeroutput> is still
+ <computeroutput>NULL</computeroutput>, initialization failed and the
+ XPCOM API cannot be used.</para>
+ </sect3>
+
+ <sect3 id="c-invocation">
+ <title>XPCOM method invocation</title>
+
+ <para>Method invocation is straightforward. It looks pretty much
+ like the C++ way, augmented with an extra indirection due to
+ accessing the vtable and passing a pointer to the object as the
+ first argument to serve as the <computeroutput>this</computeroutput>
+ pointer.</para>
+
+ <para>Using the C binding, all method invocations return a numeric
+ result code.</para>
+
+ <para>If an interface is specified as returning an object, a pointer
+ to a pointer to the appropriate object must be passed as the last
+ argument. The method will then store an object pointer in that
+ location.</para>
+
+ <para>In other words, to call an object's method what you need
+ is</para>
+
+ <screen>IObject *object;
+nsresult rc;
+...
+/*
+ * Calling void IObject::method(arg, ...)
+ */
+rc = object-&gt;vtbl-&gt;Method(object, arg, ...);
+
+...
+IFoo *foo;
+/*
+ * Calling IFoo IObject::method(arg, ...)
+ */
+rc = object-&gt;vtbl-&gt;Method(object, args, ..., &amp;foo);</screen>
+
+ <para>As a real-world example of a method invocation, let's call
+ <xref linkend="IVirtualBox__openRemoteSession"
+ xreflabel="IVirtualBox::openRemoteSession" /> which returns an
+ IProgress object. Note again that the method name is
+ capitalized.</para>
+
+ <screen>IProgress *progress;
+...
+rc = vbox-&gt;vtbl-&gt;OpenRemoteSession(
+ vbox, /* this */
+ session, /* arg 1 */
+ id, /* arg 2 */
+ sessionType, /* arg 3 */
+ env, /* arg 4 */
+ &amp;progress /* Out */
+);
+</screen>
+ </sect3>
+
+ <sect3 id="c-attributes">
+ <title>XPCOM attribute access</title>
+
+ <para>A construct similar to calling non-void methods is used to
+ access object attributes. For each attribute there exists a getter
+ method, the name of which is composed of
+ <computeroutput>Get</computeroutput> followed by the capitalized
+ attribute name. Unless the attribute is read-only, an analogous
+ <computeroutput>Set</computeroutput> method exists. Let's apply
+ these rules to read the <xref linkend="IVirtualBox__revision"
+ xreflabel="IVirtualBox::revision" /> attribute.</para>
+
+ <para>Using the <computeroutput>IVirtualBox</computeroutput> handle
+ <computeroutput>vbox</computeroutput> obtained above, calling its
+ <computeroutput>GetRevision</computeroutput> method looks like
+ this:</para>
+
+ <screen>PRUint32 rev;
+
+rc = vbox-&gt;vtbl-&gt;GetRevision(vbox, &amp;rev);
+if (NS_SUCCEEDED(rc))
+{
+ printf("Revision: %u\n", (unsigned)rev);
+}
+</screen>
+
+ <para>All objects with their methods and attributes are documented
+ in <xref linkend="sdkref_classes" />.</para>
+ </sect3>
+
+ <sect3 id="c-string-handling">
+ <title>String handling</title>
+
+ <para>When dealing with strings you have to be aware of a string's
+ encoding and ownership.</para>
+
+ <para>Internally, XPCOM uses UTF-16 encoded strings. A set of
+ conversion functions is provided to convert other encodings to and
+ from UTF-16. The type of a UTF-16 character is
+ <computeroutput>PRUnichar</computeroutput>. Strings of UTF-16
+ characters are arrays of that type. Most string handling functions
+ take pointers to that type. Prototypes for the following conversion
+ functions are declared in
+ <computeroutput>VBoxCAPI_v2_5.h</computeroutput>.</para>
+
+ <sect4>
+ <title>Conversion of UTF-16 to and from UTF-8</title>
+
+ <screen>int (*pfnUtf16ToUtf8)(const PRUnichar *pwszString, char **ppszString);
+int (*pfnUtf8ToUtf16)(const char *pszString, PRUnichar **ppwszString);
+</screen>
+ </sect4>
+
+ <sect4>
+ <title>Ownership</title>
+
+ <para>The ownership of a string determines who is responsible for
+ releasing resources associated with the string. Whenever XPCOM
+ creates a string, ownership is transferred to the caller. To avoid
+ resource leaks, the caller should release resources once the
+ string is no longer needed.</para>
+ </sect4>
+ </sect3>
+
+ <sect3 id="c-uninitialization">
+ <title>XPCOM uninitialization</title>
+
+ <para>Uninitialization is performed by
+ <computeroutput>g_pVBoxFuncs-&gt;pfnComUninitialize().</computeroutput>
+ If your program can exit from more than one place, it is a good idea
+ to install this function as an exit handler with Standard C's
+ <computeroutput>atexit()</computeroutput> just after calling
+ <computeroutput>g_pVBoxFuncs-&gt;pfnComInitialize()</computeroutput>
+ , e.g. <screen>#include &lt;stdlib.h&gt;
+#include &lt;stdio.h&gt;
+
+...
+
+/*
+ * Make sure g_pVBoxFuncs-&gt;pfnComUninitialize() is called at exit, no
+ * matter if we return from the initial call to main or call exit()
+ * somewhere else. Note that atexit registered functions are not
+ * called upon abnormal termination, i.e. when calling abort() or
+ * signal(). Separate provisions must be taken for these cases.
+ */
+
+if (atexit(g_pVBoxFuncs-&gt;pfnComUninitialize()) != 0) {
+ fprintf(stderr, "failed to register g_pVBoxFuncs-&gt;pfnComUninitialize()\n");
+ exit(EXIT_FAILURE);
+}
+</screen></para>
+
+ <para>Another idea would be to write your own <computeroutput>void
+ myexit(int status)</computeroutput> function, calling
+ <computeroutput>g_pVBoxFuncs-&gt;pfnComUninitialize()</computeroutput>
+ followed by the real <computeroutput>exit()</computeroutput>, and
+ use it instead of <computeroutput>exit()</computeroutput> throughout
+ your program and at the end of
+ <computeroutput>main.</computeroutput></para>
+
+ <para>If you expect the program to be terminated by a signal (e.g.
+ user types CTRL-C sending SIGINT) you might want to install a signal
+ handler setting a flag noting that a signal was sent and then
+ calling
+ <computeroutput>g_pVBoxFuncs-&gt;pfnComUninitialize()</computeroutput>
+ later on (usually <emphasis>not</emphasis> from the handler itself
+ .)</para>
+
+ <para>That said, if a client program forgets to call
+ <computeroutput>g_pVBoxFuncs-&gt;pfnComUninitialize()</computeroutput>
+ before it terminates, there is a mechanism in place which will
+ eventually release references held by the client. You should not
+ rely on this, however.</para>
+ </sect3>
+
+ <sect3 id="c-linking">
+ <title>Compiling and linking</title>
+
+ <para>A program using the C binding has to open the library during
+ runtime using the help of glue code provided and as shown in the
+ example <computeroutput>tstXPCOMCGlue.c</computeroutput>.
+ Compilation and linking can be achieved, e.g., with a makefile
+ fragment similar to</para>
+
+ <screen># Where is the XPCOM include directory?
+INCS_XPCOM = -I../../include
+# Where is the glue code directory?
+GLUE_DIR = ..
+GLUE_INC = -I..
+
+#Compile Glue Library
+VBoxXPCOMCGlue.o: $(GLUE_DIR)/VBoxXPCOMCGlue.c
+ $(CC) $(CFLAGS) $(INCS_XPCOM) $(GLUE_INC) -o $@ -c $&lt;
+
+# Compile.
+program.o: program.c VBoxCAPI_v2_5.h
+ $(CC) $(CFLAGS) $(INCS_XPCOM) $(GLUE_INC) -o $@ -c $&lt;
+
+# Link.
+program: program.o VBoxXPCOMCGlue.o
+ $(CC) -o $@ $^ -ldl</screen>
+ </sect3>
+ </sect2>
+ </sect1>
+ </chapter>
+
+ <chapter id="concepts">
+ <title>Basic VirtualBox concepts; some examples</title>
+
+ <para>The following explains some basic VirtualBox concepts such as the
+ VirtualBox object, sessions and how virtual machines are manipulated and
+ launched using the Main API. The coding examples use a pseudo-code style
+ closely related to the object-oriented web service (OOWS) for JAX-WS.
+ Depending on which environment you are using, you will need to adjust the
+ examples.</para>
+
+ <sect1>
+ <title>Obtaining basic machine information. Reading attributes</title>
+
+ <para>Any program using the Main API will first need access to the
+ global VirtualBox object (see <xref linkend="IVirtualBox"
+ xreflabel="IVirtualBox" />), from which all other functionality of the
+ API is derived. With the OOWS for JAX-WS, this is returned from the
+ <xref linkend="???" xreflabel="IWebsessionManager::logon()" />
+ call.</para>
+
+ <para>To enumerate virtual machines, one would look at the "machines"
+ array attribute in the VirtualBox object (see <xref
+ linkend="IVirtualBox__machines" xreflabel="IVirtualBox::machines" />).
+ This array contains all virtual machines currently registered with the
+ host, each of them being an instance of <xref linkend="IMachine"
+ xreflabel="IMachine" />. From each such instance, one can query
+ additional information, such as the UUID, the name, memory, operating
+ system and more by looking at the attributes; see the attributes list in
+ <xref linkend="IMachine" xreflabel="IMachine documentation" />.</para>
+
+ <para>As mentioned in the preceding chapters, depending on your
+ programming environment, attributes are mapped to corresponding "get"
+ and (if the attribute is not read-only) "set" methods. So when the
+ documentation says that IMachine has a "<xref linkend="IMachine__name"
+ xreflabel="name" />" attribute, this means you need to code something
+ like the following to get the machine's name:<screen>IMachine machine = ...;
+String name = machine.getName();</screen>Boolean attribute getters can
+ sometimes be called <computeroutput>isAttribute()</computeroutput> due
+ to JAX-WS naming conventions.</para>
+ </sect1>
+
+ <sect1>
+ <title>Changing machine settings. Sessions</title>
+
+ <para>As said in the previous section, to read a machine's attribute,
+ one invokes the corresponding "get" method. One would think that to
+ change settings of a machine, it would suffice to call the corresponding
+ "set" method -- for example, to set a VM's memory to 1024 MB, one would
+ call <computeroutput>setMemorySize(1024)</computeroutput>. Try that, and
+ you will get an error: "The machine is not mutable."</para>
+
+ <para>So unfortunately, things are not that easy. VirtualBox is a
+ complicated environment in which multiple processes compete for possibly
+ the same resources, especially machine settings. As a result, machines
+ must be "locked" before they can either be modified or started. This is
+ to prevent multiple processes from making conflicting changes to a
+ machine: it should, for example, not be allowed to change the memory
+ size of a virtual machine while it is running. (You can't add more
+ memory to a real computer while it is running either, at least not to an
+ ordinary PC.) Also, two processes must not change settings at the same
+ time, or start a machine at the same time.</para>
+
+ <para>These requirements are implemented in the Main API by way of
+ "sessions", in particular, the <xref linkend="ISession"
+ xreflabel="ISession" /> interface. Each process which talks to
+ VirtualBox needs its own instance of ISession. In the web service, you
+ cannot create such an object, but
+ <computeroutput>vboxwebsrv</computeroutput> creates one for you when you
+ log on, which you can obtain by calling <xref
+ linkend="IWebsessionManager__getSessionObject"
+ xreflabel="IWebsessionManager::getSessionObject()" />.</para>
+
+ <para>This session object must then be used like a mutex semaphore in
+ common programming environments. Before you can change machine settings,
+ you must write-lock the machine by calling <xref
+ linkend="IMachine__lockMachine" xreflabel="IMachine::lockMachine()" />
+ with your process's session object.</para>
+
+ <para>After the machine has been locked, the <xref
+ linkend="ISession__machine" xreflabel="ISession::machine" /> attribute
+ contains a copy of the original IMachine object upon which the session
+ was opened, but this copy is "mutable": you can invoke "set" methods on
+ it.</para>
+
+ <para>When done making the changes to the machine, you must call <xref
+ linkend="IMachine__saveSettings"
+ xreflabel="IMachine::saveSettings()" />, which will copy the changes you
+ have made from your "mutable" machine back to the real machine and write
+ them out to the machine settings XML file. This will make your changes
+ permanent.</para>
+
+ <para>Finally, it is important to always unlock the machine again, by
+ calling <xref linkend="ISession__unlockMachine"
+ xreflabel="ISession::unlockMachine()" />. Otherwise, when the calling
+ process end, the machine will receive the "aborted" state, which can
+ lead to loss of data.</para>
+
+ <para>So, as an example, the sequence to change a machine's memory to
+ 1024 MB is something like this:<screen>IWebsessionManager mgr ...;
+IVirtualBox vbox = mgr.logon(user, pass);
+...
+IMachine machine = ...; // read-only machine
+ISession session = mgr.getSessionObject();
+machine.lockMachine(session, LockType.Write); // machine is now locked for writing
+IMachine mutable = session.getMachine(); // obtain the mutable machine copy
+mutable.setMemorySize(1024);
+mutable.saveSettings(); // write settings to XML
+session.unlockMachine();</screen></para>
+ </sect1>
+
+ <sect1>
+ <title>Launching virtual machines</title>
+
+ <para>To launch a virtual machine, you call <xref
+ linkend="IMachine__launchVMProcess"
+ xreflabel="IMachine::launchVMProcess()" />. In doing so, the caller
+ instructs the VirtualBox engine to start a new process with the virtual
+ machine in it, since to the host, each virtual machine looks like a
+ single process, even if it has hundreds of its own processes inside.
+ (This new VM process in turn obtains a write lock on the machine, as
+ described above, to prevent conflicting changes from other processes;
+ this is why opening another session will fail while the VM is
+ running.)</para>
+
+ <para>Starting a machine looks something like this:<screen>IWebsessionManager mgr ...;
+IVirtualBox vbox = mgr.logon(user, pass);
+...
+IMachine machine = ...; // read-only machine
+ISession session = mgr.getSessionObject();
+IProgress prog = machine.launchVMProcess(session,
+ "gui", // session type
+ ""); // possibly environment setting
+prog.waitForCompletion(10000); // give the process 10 secs
+if (prog.getResultCode() != 0) // check success
+ System.out.println("Cannot launch VM!")</screen></para>
+
+ <para>The caller's session object can then be used as a sort of remote
+ control to the VM process that was launched. It contains a "console"
+ object (see <xref linkend="ISession__console"
+ xreflabel="ISession::console" />) with which the VM can be paused,
+ stopped, snapshotted or other things.</para>
+ </sect1>
+
+ <sect1>
+ <title>VirtualBox events</title>
+
+ <para>In VirtualBox, "events" provide a uniform mechanism to register
+ for and consume specific events. A VirtualBox client can register an
+ "event listener" (represented by the <xref linkend="IEventListener"
+ xreflabel="IEventListener" /> interface), which will then get notified
+ by the server when an event (represented by the <xref linkend="IEvent"
+ xreflabel="IEvent" /> interface) happens.</para>
+
+ <para>The IEvent interface is an abstract parent interface for all
+ events that can occur in VirtualBox. The actual events that the server
+ sends out are then of one of the specific subclasses, for example <xref
+ linkend="IMachineStateChangedEvent"
+ xreflabel="IMachineStateChangedEvent" /> or <xref
+ linkend="IMediumChangedEvent" xreflabel="IMediumChangedEvent" />.</para>
+
+ <para>As an example, the VirtualBox GUI waits for machine events and can
+ thus update its display when the machine state changes or machine
+ settings are modified, even if this happens in another client. This is
+ how the GUI can automatically refresh its display even if you manipulate
+ a machine from another client, for example, from VBoxManage.</para>
+
+ <para>To register an event listener to listen to events, use code like
+ this:<screen>EventSource es = console.getEventSource();
+IEventListener listener = es.createListener();
+VBoxEventType aTypes[] = (VBoxEventType.OnMachineStateChanged);
+ // list of event types to listen for
+es.registerListener(listener, aTypes, false /* active */);
+ // register passive listener
+IEvent ev = es.getEvent(listener, 1000);
+ // wait up to one second for event to happen
+if (ev != null)
+{
+ // downcast to specific event interface (in this case we have only registered
+ // for one type, otherwise IEvent::type would tell us)
+ IMachineStateChangedEvent mcse = IMachineStateChangedEvent.queryInterface(ev);
+ ... // inspect and do something
+ es.eventProcessed(listener, ev);
+}
+...
+es.unregisterListener(listener); </screen></para>
+
+ <para>A graphical user interface would probably best start its own
+ thread to wait for events and then process these in a loop.</para>
+
+ <para>The events mechanism was introduced with VirtualBox 3.3 and
+ replaces various callback interfaces which were called for each event in
+ the interface. The callback mechanism was not compatible with scripting
+ languages, local Java bindings and remote web services as they do not
+ support callbacks. The new mechanism with events and event listeners
+ works with all of these.</para>
+ <para>To simplify developement of application using events,
+ concept of event aggregator was introduced. Essentially it's
+ mechanism to aggregate multiple event sources into single one,
+ and then work with this single aggregated event source instead of
+ original sources. As an example, one can evaluate demo recorder
+ in VirtualBox Python shell, shipped with SDK - it records mouse
+ and keyboard events, represented as separate event sources.
+ Code is essentially like this:<screen>
+ listener = console.eventSource.createListener()
+ agg = console.eventSource.createAggregator([console.keyboard.eventSource, console.mouse.eventSource])
+ agg.registerListener(listener, [ctx['global'].constants.VBoxEventType_Any], False)
+ registered = True
+ end = time.time() + dur
+ while time.time() < end:
+ ev = agg.getEvent(listener, 1000)
+ processEent(ev)
+ agg.unregisterListener(listener)</screen>
+ Without using aggregators consumer have to poll on both
+ sources, or start multiple threads to block on those sources.
+ </para>
+ </sect1>
+ </chapter>
+
+ <chapter id="vboxshell">
+ <title>The VirtualBox shell</title>
+
+ <para>VirtualBox comes with an extensible shell, which allows you to
+ control your virtual machines from the command line. It is also a
+ nontrivial example of how to use the VirtualBox APIs from Python, for all
+ three COM/XPCOM/WS styles of the API.</para>
+
+ <para>You can easily extend this shell with your own commands. Create a
+ subdirectory named <computeroutput>.VirtualBox/shexts</computeroutput>
+ below your home directory and put a Python file implementing your shell
+ extension commands in this directory. This file must contain an array
+ named <computeroutput>commands</computeroutput> containing your command
+ definitions: <screen>
+ commands = {
+ 'cmd1': ['Command cmd1 help', cmd1],
+ 'cmd2': ['Command cmd2 help', cmd2]
+ }
+ </screen> For example, to create a command for creating hard drive
+ images, the following code can be used: <screen>
+ def createHdd(ctx,args):
+ # Show some meaningful error message on wrong input
+ if (len(args) &lt; 3):
+ print "usage: createHdd sizeM location type"
+ return 0
+
+ # Get arguments
+ size = int(args[1])
+ loc = args[2]
+ if len(args) &gt; 3:
+ format = args[3]
+ else:
+ # And provide some meaningful defaults
+ format = "vdi"
+
+ # Call VirtualBox API, using context's fields
+ hdd = ctx['vb'].createHardDisk(format, loc)
+ # Access constants using ctx['global'].constants
+ progress = hdd.createBaseStorage(size, ctx['global'].constants.HardDiskVariant_Standard)
+ # use standard progress bar mechanism
+ ctx['progressBar'](progress)
+
+
+ # Report errors
+ if not hdd.id:
+ print "cannot create disk (file %s exist?)" %(loc)
+ return 0
+
+ # Give user some feedback on success too
+ print "created HDD with id: %s" %(hdd.id)
+
+ # 0 means continue execution, other values mean exit from the interpreter
+ return 0
+
+ commands = {
+ 'myCreateHDD': ['Create virtual HDD, createHdd size location type', createHdd]
+ }
+ </screen> Just store the above text in the file
+ <computeroutput>createHdd</computeroutput> (or any other meaningful name)
+ in <computeroutput>.VirtualBox/shexts/</computeroutput>. Start the
+ VirtualBox shell, or just issue the
+ <computeroutput>reloadExts</computeroutput> command, if the shell is
+ already running. Your new command will now be available.</para>
+ </chapter>
+
+ <!--$VIRTUALBOX_MAIN_API_REFERENCE-->
+
+ <chapter id="hgcm">
+ <title>Host-Guest Communication Manager</title>
+
+ <para>The VirtualBox Host-Guest Communication Manager (HGCM) allows a
+ guest application or a guest driver to call a host shared library. The
+ following features of VirtualBox are implemented using HGCM: <itemizedlist>
+ <listitem>
+ <para>Shared Folders</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared Clipboard</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest configuration interface</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>The shared library contains a so called HGCM service. The guest HGCM
+ clients establish connections to the service to call it. When calling a
+ HGCM service the client supplies a function code and a number of
+ parameters for the function.</para>
+
+ <sect1>
+ <title>Virtual hardware implementation</title>
+
+ <para>HGCM uses the VMM virtual PCI device to exchange data between the
+ guest and the host. The guest always acts as an initiator of requests. A
+ request is constructed in the guest physical memory, which must be
+ locked by the guest. The physical address is passed to the VMM device
+ using a 32 bit <computeroutput>out edx, eax</computeroutput>
+ instruction. The physical memory must be allocated below 4GB by 64 bit
+ guests.</para>
+
+ <para>The host parses the request header and data and queues the request
+ for a host HGCM service. The guest continues execution and usually waits
+ on a HGCM event semaphore.</para>
+
+ <para>When the request has been processed by the HGCM service, the VMM
+ device sets the completion flag in the request header, sets the HGCM
+ event and raises an IRQ for the guest. The IRQ handler signals the HGCM
+ event semaphore and all HGCM callers check the completion flag in the
+ corresponding request header. If the flag is set, the request is
+ considered completed.</para>
+ </sect1>
+
+ <sect1>
+ <title>Protocol specification</title>
+
+ <para>The HGCM protocol definitions are contained in the
+ <computeroutput>VBox/VBoxGuest.h</computeroutput></para>
+
+ <sect2>
+ <title>Request header</title>
+
+ <para>HGCM request structures contains a generic header
+ (VMMDevHGCMRequestHeader): <table>
+ <title>HGCM Request Generic Header</title>
+
+ <tgroup cols="2">
+ <tbody>
+ <row>
+ <entry><emphasis role="bold">Name</emphasis></entry>
+
+ <entry><emphasis role="bold">Description</emphasis></entry>
+ </row>
+
+ <row>
+ <entry>size</entry>
+
+ <entry>Size of the entire request.</entry>
+ </row>
+
+ <row>
+ <entry>version</entry>
+
+ <entry>Version of the header, must be set to
+ <computeroutput>0x10001</computeroutput>.</entry>
+ </row>
+
+ <row>
+ <entry>type</entry>
+
+ <entry>Type of the request.</entry>
+ </row>
+
+ <row>
+ <entry>rc</entry>
+
+ <entry>HGCM return code, which will be set by the VMM
+ device.</entry>
+ </row>
+
+ <row>
+ <entry>reserved1</entry>
+
+ <entry>A reserved field 1.</entry>
+ </row>
+
+ <row>
+ <entry>reserved2</entry>
+
+ <entry>A reserved field 2.</entry>
+ </row>
+
+ <row>
+ <entry>flags</entry>
+
+ <entry>HGCM flags, set by the VMM device.</entry>
+ </row>
+
+ <row>
+ <entry>result</entry>
+
+ <entry>The HGCM result code, set by the VMM device.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table> <note>
+ <itemizedlist>
+ <listitem>
+ <para>All fields are 32 bit.</para>
+ </listitem>
+
+ <listitem>
+ <para>Fields from <computeroutput>size</computeroutput> to
+ <computeroutput>reserved2</computeroutput> are a standard VMM
+ device request header, which is used for other interfaces as
+ well.</para>
+ </listitem>
+ </itemizedlist>
+ </note></para>
+
+ <para>The <emphasis role="bold">type</emphasis> field indicates the
+ type of the HGCM request: <table>
+ <title>Request Types</title>
+
+ <tgroup cols="2">
+ <tbody>
+ <row>
+ <entry><emphasis role="bold">Name (decimal
+ value)</emphasis></entry>
+
+ <entry><emphasis role="bold">Description</emphasis></entry>
+ </row>
+
+ <row>
+ <entry>VMMDevReq_HGCMConnect
+ (<computeroutput>60</computeroutput>)</entry>
+
+ <entry>Connect to a HGCM service.</entry>
+ </row>
+
+ <row>
+ <entry>VMMDevReq_HGCMDisconnect
+ (<computeroutput>61</computeroutput>)</entry>
+
+ <entry>Disconnect from the service.</entry>
+ </row>
+
+ <row>
+ <entry>VMMDevReq_HGCMCall32
+ (<computeroutput>62</computeroutput>)</entry>
+
+ <entry>Call a HGCM function using the 32 bit
+ interface.</entry>
+ </row>
+
+ <row>
+ <entry>VMMDevReq_HGCMCall64
+ (<computeroutput>63</computeroutput>)</entry>
+
+ <entry>Call a HGCM function using the 64 bit
+ interface.</entry>
+ </row>
+
+ <row>
+ <entry>VMMDevReq_HGCMCancel
+ (<computeroutput>64</computeroutput>)</entry>
+
+ <entry>Cancel a HGCM request currently being processed by a
+ host HGCM service.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table></para>
+
+ <para>The <emphasis role="bold">flags</emphasis> field may contain:
+ <table>
+ <title>Flags</title>
+
+ <tgroup cols="2">
+ <tbody>
+ <row>
+ <entry><emphasis role="bold">Name (hexadecimal
+ value)</emphasis></entry>
+
+ <entry><emphasis role="bold">Description</emphasis></entry>
+ </row>
+
+ <row>
+ <entry>VBOX_HGCM_REQ_DONE
+ (<computeroutput>0x00000001</computeroutput>)</entry>
+
+ <entry>The request has been processed by the host
+ service.</entry>
+ </row>
+
+ <row>
+ <entry>VBOX_HGCM_REQ_CANCELLED
+ (<computeroutput>0x00000002</computeroutput>)</entry>
+
+ <entry>This request was cancelled.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table></para>
+ </sect2>
+
+ <sect2>
+ <title>Connect</title>
+
+ <para>The connection request must be issued by the guest HGCM client
+ before it can call the HGCM service (VMMDevHGCMConnect): <table>
+ <title>Connect request</title>
+
+ <tgroup cols="2">
+ <tbody>
+ <row>
+ <entry><emphasis role="bold">Name</emphasis></entry>
+
+ <entry><emphasis role="bold">Description</emphasis></entry>
+ </row>
+
+ <row>
+ <entry>header</entry>
+
+ <entry>The generic HGCM request header with type equal to
+ VMMDevReq_HGCMConnect
+ (<computeroutput>60</computeroutput>).</entry>
+ </row>
+
+ <row>
+ <entry>type</entry>
+
+ <entry>The type of the service location information (32
+ bit).</entry>
+ </row>
+
+ <row>
+ <entry>location</entry>
+
+ <entry>The service location information (128 bytes).</entry>
+ </row>
+
+ <row>
+ <entry>clientId</entry>
+
+ <entry>The client identifier assigned to the connecting
+ client by the HGCM subsystem (32 bit).</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table> The <emphasis role="bold">type</emphasis> field tells the
+ HGCM how to look for the requested service: <table>
+ <title>Location Information Types</title>
+
+ <tgroup cols="2">
+ <tbody>
+ <row>
+ <entry><emphasis role="bold">Name (hexadecimal
+ value)</emphasis></entry>
+
+ <entry><emphasis role="bold">Description</emphasis></entry>
+ </row>
+
+ <row>
+ <entry>VMMDevHGCMLoc_LocalHost
+ (<computeroutput>0x1</computeroutput>)</entry>
+
+ <entry>The requested service is a shared library located on
+ the host and the location information contains the library
+ name.</entry>
+ </row>
+
+ <row>
+ <entry>VMMDevHGCMLoc_LocalHost_Existing
+ (<computeroutput>0x2</computeroutput>)</entry>
+
+ <entry>The requested service is a preloaded one and the
+ location information contains the service name.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table> <note>
+ <para>Currently preloaded HGCM services are hard-coded in
+ VirtualBox: <itemizedlist>
+ <listitem>
+ <para>VBoxSharedFolders</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxSharedClipboard</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxGuestPropSvc</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxSharedOpenGL</para>
+ </listitem>
+ </itemizedlist></para>
+ </note> There is no difference between both types of HGCM services,
+ only the location mechanism is different.</para>
+
+ <para>The client identifier is returned by the host and must be used
+ in all subsequent requests by the client.</para>
+ </sect2>
+
+ <sect2>
+ <title>Disconnect</title>
+
+ <para>This request disconnects the client and makes the client
+ identifier invalid (VMMDevHGCMDisconnect): <table>
+ <title>Disconnect request</title>
+
+ <tgroup cols="2">
+ <tbody>
+ <row>
+ <entry><emphasis role="bold">Name</emphasis></entry>
+
+ <entry><emphasis role="bold">Description</emphasis></entry>
+ </row>
+
+ <row>
+ <entry>header</entry>
+
+ <entry>The generic HGCM request header with type equal to
+ VMMDevReq_HGCMDisconnect
+ (<computeroutput>61</computeroutput>).</entry>
+ </row>
+
+ <row>
+ <entry>clientId</entry>
+
+ <entry>The client identifier previously returned by the
+ connect request (32 bit).</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table></para>
+ </sect2>
+
+ <sect2>
+ <title>Call32 and Call64</title>
+
+ <para>Calls the HGCM service entry point (VMMDevHGCMCall) using 32 bit
+ or 64 bit addresses: <table>
+ <title>Call request</title>
+
+ <tgroup cols="2">
+ <tbody>
+ <row>
+ <entry><emphasis role="bold">Name</emphasis></entry>
+
+ <entry><emphasis role="bold">Description</emphasis></entry>
+ </row>
+
+ <row>
+ <entry>header</entry>
+
+ <entry>The generic HGCM request header with type equal to
+ either VMMDevReq_HGCMCall32
+ (<computeroutput>62</computeroutput>) or
+ VMMDevReq_HGCMCall64
+ (<computeroutput>63</computeroutput>).</entry>
+ </row>
+
+ <row>
+ <entry>clientId</entry>
+
+ <entry>The client identifier previously returned by the
+ connect request (32 bit).</entry>
+ </row>
+
+ <row>
+ <entry>function</entry>
+
+ <entry>The function code to be processed by the service (32
+ bit).</entry>
+ </row>
+
+ <row>
+ <entry>cParms</entry>
+
+ <entry>The number of following parameters (32 bit). This
+ value is 0 if the function requires no parameters.</entry>
+ </row>
+
+ <row>
+ <entry>parms</entry>
+
+ <entry>An array of parameter description structures
+ (HGCMFunctionParameter32 or
+ HGCMFunctionParameter64).</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table></para>
+
+ <para>The 32 bit parameter description (HGCMFunctionParameter32)
+ consists of 32 bit type field and 8 bytes of an opaque value, so 12
+ bytes in total. The 64 bit variant (HGCMFunctionParameter64) consists
+ of the type and 12 bytes of a value, so 16 bytes in total.</para>
+
+ <para><table>
+ <title>Parameter types</title>
+
+ <tgroup cols="2">
+ <tbody>
+ <row>
+ <entry><emphasis role="bold">Type</emphasis></entry>
+
+ <entry><emphasis role="bold">Format of the
+ value</emphasis></entry>
+ </row>
+
+ <row>
+ <entry>VMMDevHGCMParmType_32bit (1)</entry>
+
+ <entry>A 32 bit value.</entry>
+ </row>
+
+ <row>
+ <entry>VMMDevHGCMParmType_64bit (2)</entry>
+
+ <entry>A 64 bit value.</entry>
+ </row>
+
+ <row>
+ <entry>VMMDevHGCMParmType_PhysAddr (3)</entry>
+
+ <entry>A 32 bit size followed by a 32 bit or 64 bit guest
+ physical address.</entry>
+ </row>
+
+ <row>
+ <entry>VMMDevHGCMParmType_LinAddr (4)</entry>
+
+ <entry>A 32 bit size followed by a 32 bit or 64 bit guest
+ linear address. The buffer is used both for guest to host
+ and for host to guest data.</entry>
+ </row>
+
+ <row>
+ <entry>VMMDevHGCMParmType_LinAddr_In (5)</entry>
+
+ <entry>Same as VMMDevHGCMParmType_LinAddr but the buffer is
+ used only for host to guest data.</entry>
+ </row>
+
+ <row>
+ <entry>VMMDevHGCMParmType_LinAddr_Out (6)</entry>
+
+ <entry>Same as VMMDevHGCMParmType_LinAddr but the buffer is
+ used only for guest to host data.</entry>
+ </row>
+
+ <row>
+ <entry>VMMDevHGCMParmType_LinAddr_Locked (7)</entry>
+
+ <entry>Same as VMMDevHGCMParmType_LinAddr but the buffer is
+ already locked by the guest.</entry>
+ </row>
+
+ <row>
+ <entry>VMMDevHGCMParmType_LinAddr_Locked_In (1)</entry>
+
+ <entry>Same as VMMDevHGCMParmType_LinAddr_In but the buffer
+ is already locked by the guest.</entry>
+ </row>
+
+ <row>
+ <entry>VMMDevHGCMParmType_LinAddr_Locked_Out (1)</entry>
+
+ <entry>Same as VMMDevHGCMParmType_LinAddr_Out but the buffer
+ is already locked by the guest.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table></para>
+
+ <para>The</para>
+ </sect2>
+
+ <sect2>
+ <title>Cancel</title>
+
+ <para>This request cancels a call request (VMMDevHGCMCancel): <table>
+ <title>Cancel request</title>
+
+ <tgroup cols="2">
+ <tbody>
+ <row>
+ <entry><emphasis role="bold">Name</emphasis></entry>
+
+ <entry><emphasis role="bold">Description</emphasis></entry>
+ </row>
+
+ <row>
+ <entry>header</entry>
+
+ <entry>The generic HGCM request header with type equal to
+ VMMDevReq_HGCMCancel
+ (<computeroutput>64</computeroutput>).</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table></para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Guest software interface</title>
+
+ <para>The guest HGCM clients can call HGCM services from both drivers
+ and applications.</para>
+
+ <sect2>
+ <title>The guest driver interface</title>
+
+ <para>The driver interface is implemented in the VirtualBox guest
+ additions driver (VBoxGuest), which works with the VMM virtual device.
+ Drivers must use the VBox Guest Library (VBGL), which provides an API
+ for HGCM clients (<computeroutput>VBox/VBoxGuestLib.h</computeroutput>
+ and <computeroutput>VBox/VBoxGuest.h</computeroutput>).</para>
+
+ <para><screen>
+DECLVBGL(int) VbglHGCMConnect (VBGLHGCMHANDLE *pHandle, VBoxGuestHGCMConnectInfo *pData);
+ </screen> Connects to the service: <screen>
+ VBoxGuestHGCMConnectInfo data;
+
+ memset (&amp;data, sizeof (VBoxGuestHGCMConnectInfo));
+
+ data.result = VINF_SUCCESS;
+ data.Loc.type = VMMDevHGCMLoc_LocalHost_Existing;
+ strcpy (data.Loc.u.host.achName, "VBoxSharedFolders");
+
+ rc = VbglHGCMConnect (&amp;handle, &amp;data);
+
+ if (RT_SUCCESS (rc))
+ {
+ rc = data.result;
+ }
+
+ if (RT_SUCCESS (rc))
+ {
+ /* Get the assigned client identifier. */
+ ulClientID = data.u32ClientID;
+ }
+ </screen></para>
+
+ <para><screen>
+DECLVBGL(int) VbglHGCMDisconnect (VBGLHGCMHANDLE handle, VBoxGuestHGCMDisconnectInfo *pData);
+ </screen> Disconnects from the service. <screen>
+ VBoxGuestHGCMDisconnectInfo data;
+
+ RtlZeroMemory (&amp;data, sizeof (VBoxGuestHGCMDisconnectInfo));
+
+ data.result = VINF_SUCCESS;
+ data.u32ClientID = ulClientID;
+
+ rc = VbglHGCMDisconnect (handle, &amp;data);
+ </screen></para>
+
+ <para><screen>
+DECLVBGL(int) VbglHGCMCall (VBGLHGCMHANDLE handle, VBoxGuestHGCMCallInfo *pData, uint32_t cbData);
+ </screen> Calls a function in the service. <screen>
+typedef struct _VBoxSFRead
+{
+ VBoxGuestHGCMCallInfo callInfo;
+
+ /** pointer, in: SHFLROOT
+ * Root handle of the mapping which name is queried.
+ */
+ HGCMFunctionParameter root;
+
+ /** value64, in:
+ * SHFLHANDLE of object to read from.
+ */
+ HGCMFunctionParameter handle;
+
+ /** value64, in:
+ * Offset to read from.
+ */
+ HGCMFunctionParameter offset;
+
+ /** value64, in/out:
+ * Bytes to read/How many were read.
+ */
+ HGCMFunctionParameter cb;
+
+ /** pointer, out:
+ * Buffer to place data to.
+ */
+ HGCMFunctionParameter buffer;
+
+} VBoxSFRead;
+
+/** Number of parameters */
+#define SHFL_CPARMS_READ (5)
+
+...
+
+ VBoxSFRead data;
+
+ /* The call information. */
+ data.callInfo.result = VINF_SUCCESS; /* Will be returned by HGCM. */
+ data.callInfo.u32ClientID = ulClientID; /* Client identifier. */
+ data.callInfo.u32Function = SHFL_FN_READ; /* The function code. */
+ data.callInfo.cParms = SHFL_CPARMS_READ; /* Number of parameters. */
+
+ /* Initialize parameters. */
+ data.root.type = VMMDevHGCMParmType_32bit;
+ data.root.u.value32 = pMap-&gt;root;
+
+ data.handle.type = VMMDevHGCMParmType_64bit;
+ data.handle.u.value64 = hFile;
+
+ data.offset.type = VMMDevHGCMParmType_64bit;
+ data.offset.u.value64 = offset;
+
+ data.cb.type = VMMDevHGCMParmType_32bit;
+ data.cb.u.value32 = *pcbBuffer;
+
+ data.buffer.type = VMMDevHGCMParmType_LinAddr_Out;
+ data.buffer.u.Pointer.size = *pcbBuffer;
+ data.buffer.u.Pointer.u.linearAddr = (uintptr_t)pBuffer;
+
+ rc = VbglHGCMCall (handle, &amp;data.callInfo, sizeof (data));
+
+ if (RT_SUCCESS (rc))
+ {
+ rc = data.callInfo.result;
+ *pcbBuffer = data.cb.u.value32; /* This is returned by the HGCM service. */
+ }
+ </screen></para>
+ </sect2>
+
+ <sect2>
+ <title>Guest application interface</title>
+
+ <para>Applications call the VirtualBox Guest Additions driver to
+ utilize the HGCM interface. There are IOCTL's which correspond to the
+ <computeroutput>Vbgl*</computeroutput> functions: <itemizedlist>
+ <listitem>
+ <para><computeroutput>VBOXGUEST_IOCTL_HGCM_CONNECT</computeroutput></para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>VBOXGUEST_IOCTL_HGCM_DISCONNECT</computeroutput></para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>VBOXGUEST_IOCTL_HGCM_CALL</computeroutput></para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>These IOCTL's get the same input buffer as
+ <computeroutput>VbglHGCM*</computeroutput> functions and the output
+ buffer has the same format as the input buffer. The same address can
+ be used as the input and output buffers.</para>
+
+ <para>For example see the guest part of shared clipboard, which runs
+ as an application and uses the HGCM interface.</para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>HGCM Service Implementation</title>
+
+ <para>The HGCM service is a shared library with a specific set of entry
+ points. The library must export the
+ <computeroutput>VBoxHGCMSvcLoad</computeroutput> entry point: <screen>
+extern "C" DECLCALLBACK(DECLEXPORT(int)) VBoxHGCMSvcLoad (VBOXHGCMSVCFNTABLE *ptable)
+ </screen></para>
+
+ <para>The service must check the
+ <computeroutput>ptable-&gt;cbSize</computeroutput> and
+ <computeroutput>ptable-&gt;u32Version</computeroutput> fields of the
+ input structure and fill the remaining fields with function pointers of
+ entry points and the size of the required client buffer size.</para>
+
+ <para>The HGCM service gets a dedicated thread, which calls service
+ entry points synchronously, that is the service will be called again
+ only when a previous call has returned. However, the guest calls can be
+ processed asynchronously. The service must call a completion callback
+ when the operation is actually completed. The callback can be issued
+ from another thread as well.</para>
+
+ <para>Service entry points are listed in the
+ <computeroutput>VBox/hgcmsvc.h</computeroutput> in the
+ <computeroutput>VBOXHGCMSVCFNTABLE</computeroutput> structure. <table>
+ <title>Service entry points</title>
+
+ <tgroup cols="2">
+ <tbody>
+ <row>
+ <entry><emphasis role="bold">Entry</emphasis></entry>
+
+ <entry><emphasis role="bold">Description</emphasis></entry>
+ </row>
+
+ <row>
+ <entry>pfnUnload</entry>
+
+ <entry>The service is being unloaded.</entry>
+ </row>
+
+ <row>
+ <entry>pfnConnect</entry>
+
+ <entry>A client <computeroutput>u32ClientID</computeroutput>
+ is connected to the service. The
+ <computeroutput>pvClient</computeroutput> parameter points to
+ an allocated memory buffer which can be used by the service to
+ store the client information.</entry>
+ </row>
+
+ <row>
+ <entry>pfnDisconnect</entry>
+
+ <entry>A client is being disconnected.</entry>
+ </row>
+
+ <row>
+ <entry>pfnCall</entry>
+
+ <entry>A guest client calls a service function. The
+ <computeroutput>callHandle</computeroutput> must be used in
+ the VBOXHGCMSVCHELPERS::pfnCallComplete callback when the call
+ has been processed.</entry>
+ </row>
+
+ <row>
+ <entry>pfnHostCall</entry>
+
+ <entry>Called by the VirtualBox host components to perform
+ functions which should be not accessible by the guest. Usually
+ this entry point is used by VirtualBox to configure the
+ service.</entry>
+ </row>
+
+ <row>
+ <entry>pfnSaveState</entry>
+
+ <entry>The VM state is being saved and the service must save
+ relevant information using the SSM API
+ (<computeroutput>VBox/ssm.h</computeroutput>).</entry>
+ </row>
+
+ <row>
+ <entry>pfnLoadState</entry>
+
+ <entry>The VM is being restored from the saved state and the
+ service must load the saved information and be able to
+ continue operations from the saved state.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table></para>
+ </sect1>
+ </chapter>
+
+ <chapter id="rdpweb">
+ <title>RDP Web Control</title>
+
+ <para>The VirtualBox <emphasis>RDP Web Control</emphasis> (RDPWeb)
+ provides remote access to a running VM. RDPWeb is a RDP (Remote Desktop
+ Protocol) client based on Flash technology and can be used from a Web
+ browser with a Flash plugin.</para>
+
+ <sect1>
+ <title>RDPWeb features</title>
+
+ <para>RDPWeb is embedded into a Web page and can connect to VRDP server
+ in order to displays the VM screen and pass keyboard and mouse events to
+ the VM.</para>
+ </sect1>
+
+ <sect1>
+ <title>RDPWeb reference</title>
+
+ <para>RDPWeb consists of two required components:<itemizedlist>
+ <listitem>
+ <para>Flash movie
+ <computeroutput>RDPClientUI.swf</computeroutput></para>
+ </listitem>
+
+ <listitem>
+ <para>JavaScript helpers
+ <computeroutput>webclient.js</computeroutput></para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>The VirtualBox SDK contains sample HTML code
+ including:<itemizedlist>
+ <listitem>
+ <para>JavaScript library for embedding Flash content
+ <computeroutput>SWFObject.js</computeroutput></para>
+ </listitem>
+
+ <listitem>
+ <para>Sample HTML page
+ <computeroutput>webclient3.html</computeroutput></para>
+ </listitem>
+ </itemizedlist></para>
+
+ <sect2>
+ <title>RDPWeb functions</title>
+
+ <para><computeroutput>RDPClientUI.swf</computeroutput> and
+ <computeroutput>webclient.js</computeroutput> work with each other.
+ JavaScript code is responsible for a proper SWF initialization,
+ delivering mouse events to the SWF and processing resize requests from
+ the SWF. On the other hand, the SWF contains a few JavaScript callable
+ methods, which are used both from
+ <computeroutput>webclient.js</computeroutput> and the user HTML
+ page.</para>
+
+ <sect3>
+ <title>JavaScript functions</title>
+
+ <para><computeroutput>webclient.js</computeroutput> contains helper
+ functions. In the following table ElementId refers to an HTML
+ element name or attribute, and Element to the HTML element itself.
+ HTML code<programlisting>
+ &lt;div id="FlashRDP"&gt;
+ &lt;/div&gt;
+</programlisting> would have ElementId equal to FlashRDP and Element equal to
+ the div element.</para>
+
+ <para><itemizedlist>
+ <listitem>
+ <programlisting>RDPWebClient.embedSWF(SWFFileName, ElementId)</programlisting>
+
+ <para>Uses SWFObject library to replace the HTML element with
+ the Flash movie.</para>
+ </listitem>
+
+ <listitem>
+ RDPWebClient.isRDPWebControlById(ElementId)
+
+ <para>Returns true if the given id refers to a RDPWeb Flash
+ element.</para>
+
+
+ </listitem>
+
+ <listitem>
+ RDPWebClient.isRDPWebControlByElement(Element)
+
+ <para>Returns true if the given element is a RDPWeb Flash
+ element.</para>
+
+
+ </listitem>
+
+ <listitem>
+ RDPWebClient.getFlashById(ElementId)
+
+ <para>Returns an element, which is referenced by the given id.
+ This function will try to resolve any element, event if it is
+ not a Flash movie.</para>
+
+
+ </listitem>
+ </itemizedlist></para>
+ </sect3>
+
+ <sect3>
+ <title>Flash methods callable from JavaScript</title>
+
+ <para><computeroutput>RDPWebClienUI.swf</computeroutput> methods can
+ be called directly from JavaScript code on a HTML page.</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>getProperty(Name)</para>
+ </listitem>
+
+ <listitem>
+ <para>setProperty(Name)</para>
+ </listitem>
+
+ <listitem>
+ <para>connect()</para>
+ </listitem>
+
+ <listitem>
+ <para>disconnect()</para>
+ </listitem>
+
+ <listitem>
+ <para>keyboardSendCAD()</para>
+ </listitem>
+ </itemizedlist>
+ </sect3>
+
+ <sect3>
+ <title>Flash JavaScript callbacks</title>
+
+ <para><computeroutput>RDPWebClienUI.swf</computeroutput> calls
+ JavaScript functions provided by the HTML page.</para>
+ </sect3>
+ </sect2>
+
+ <sect2>
+ <title>Embedding RDPWeb in an HTML page</title>
+
+ <para>It is necessary to include
+ <computeroutput>webclient.js</computeroutput> helper script. If
+ SWFObject library is used, the
+ <computeroutput>swfobject.js</computeroutput> must be also included
+ and RDPWeb flash content can be embedded to a Web page using dynamic
+ HTML. The HTML must include a "placeholder", which consists of 2
+ <computeroutput>div</computeroutput> elements.</para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>RDPWeb change log</title>
+
+ <sect2>
+ <title>Version 1.2.28</title>
+
+ <itemizedlist>
+ <listitem>
+ <para><computeroutput>keyboardLayout</computeroutput>,
+ <computeroutput>keyboardLayouts</computeroutput>,
+ <computeroutput>UUID</computeroutput> properties.</para>
+ </listitem>
+
+ <listitem>
+ <para>Support for German keyboard layout on the client.</para>
+ </listitem>
+
+ <listitem>
+ <para>Rebranding to Oracle.</para>
+ </listitem>
+ </itemizedlist>
+ </sect2>
+
+ <sect2>
+ <title>Version 1.1.26</title>
+
+ <itemizedlist>
+ <listitem>
+ <para><computeroutput>webclient.js</computeroutput> is a part of
+ the distribution package.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>lastError</computeroutput> property.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>keyboardSendScancodes</computeroutput> and
+ <computeroutput>keyboardSendCAD</computeroutput> methods.</para>
+ </listitem>
+ </itemizedlist>
+ </sect2>
+
+ <sect2>
+ <title>Version 1.0.24</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>Initial release.</para>
+ </listitem>
+ </itemizedlist>
+ </sect2>
+ </sect1>
+ </chapter>
+
+ <chapter id="javaapi">
+ <title>Using Java API</title>
+
+ <sect1>
+ <title>Introduction</title>
+
+ <para>VirtualBox can be controlled by a Java API, both locally
+ (COM/XPCOM) and from remote (SOAP) clients. As with the Python bindings,
+ a generic glue layer tries to hide all platform differences, allowing
+ for source and binary compatibility on different platforms.</para>
+ </sect1>
+
+ <sect1>
+ <title>Requirements</title>
+
+ <para>To use the Java bindings, there are certain requirements depending
+ on the platform. First of all, you need JDK 1.5 (Java 5) or later. Also
+ please make sure that the version of the VirtualBox API .jar file
+ exactly matches the version of VirtualBox you use. To avoid confusion,
+ the VirtualBox API provides versioning in the Java package name, e.g.
+ the package is named <computeroutput>org.virtualbox_3_2</computeroutput>
+ for VirtualBox version 3.2. <itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">XPCOM:</emphasis> - for all platforms,
+ but Microsoft Windows. A Java bridge based on JavaXPCOM is shipped
+ with VirtualBox. The classpath must contain
+ <computeroutput>vboxjxpcom.jar</computeroutput> and the
+ <computeroutput>vbox.home</computeroutput> property must be set to
+ location where the VirtualBox binaries are. Please make sure that
+ the JVM bitness matches bitness of VirtualBox you use as the XPCOM
+ bridge relies on native libraries.</para>
+
+ <para>Start your application like this: <programlisting>
+ java -cp vboxjxpcom.jar -Dvbox.home=/opt/virtualbox MyProgram
+ </programlisting></para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">COM:</emphasis> - for Microsoft
+ Windows. We rely on <computeroutput>Jacob</computeroutput> - a
+ generic Java to COM bridge - which has to be installed seperately.
+ See <ulink
+ url="http://sourceforge.net/projects/jacob-project/">http://sourceforge.net/projects/jacob-project/</ulink>
+ for installation instructions. Also, the VirtualBox provided
+ <computeroutput>vboxjmscom.jar</computeroutput> must be in the
+ class path.</para>
+
+ <para>Start your application like this: <programlisting>
+ java -cp vboxjmscom.jar;c:\jacob\jacob.jar -Djava.library.path=c:\jacob MyProgram
+ </programlisting></para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">SOAP</emphasis> - all platforms. Java
+ 6 is required, as it comes with builtin support for SOAP via the
+ JAX-WS library. Also, the VirtualBox provided
+ <computeroutput>vbojws.jar</computeroutput> must be in the class
+ path. In the SOAP case it's possible to create several
+ VirtualBoxManager instances to communicate with multiple
+ VirtualBox hosts.</para>
+
+ <para>Start your application like this: <programlisting>
+ java -cp vboxjws.jar MyProgram
+ </programlisting></para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>Exception handling is also generalized by the generic glue layer,
+ so that all methods could throw
+ <computeroutput>VBoxException</computeroutput> containing human-readable
+ text message (see <computeroutput>getMessage()</computeroutput> method)
+ along with wrapped original exception (see
+ <computeroutput>getWrapped()</computeroutput> method).</para>
+ </sect1>
+
+ <sect1>
+ <title>Example</title>
+
+ <para>This example shows a simple use case of the Java API. Differences
+ for SOAP vs. local version are minimal, and limited to the connection
+ setup phase (see <computeroutput>ws</computeroutput> variable). In the
+ SOAP case it's possible to create several VirtualBoxManager instances to
+ communicate with multiple VirtualBox hosts. <programlisting>
+ import org.virtualbox_3_3.*;
+ ....
+ VirtualBoxManager mgr = VirtualBoxManager.createInstance(null);
+ boolean ws = false; // or true, if we need the SOAP version
+ if (ws)
+ {
+ String url = "http://myhost:18034";
+ String user = "test";
+ String passwd = "test";
+ mgr.connect(url, user, passwd);
+ }
+ IVirtualBox vbox = mgr.getVBox();
+ System.out.println("VirtualBox version: " + vbox.getVersion() + "\n");
+ // get first VM name
+ String m = vbox.getMachines().get(0).getName();
+ System.out.println("\nAttempting to start VM '" + m + "'");
+ // start it
+ mgr.startVm(m, null, 7000);
+
+ if (ws)
+ mgr.disconnect();
+
+ mgr.cleanup();
+ </programlisting> For more a complete example, see
+ <computeroutput>TestVBox.java</computeroutput>, shipped with the
+ SDK.</para>
+ </sect1>
+ </chapter>
+
+ <chapter>
+ <title>License information</title>
+
+ <para>The sample code files shipped with the SDK are generally licensed
+ liberally to make it easy for anyone to use this code for their own
+ application code.</para>
+
+ <para>The Java files under
+ <computeroutput>bindings/webservice/java/jax-ws/</computeroutput> (library
+ files for the object-oriented web service) are, by contrast, licensed
+ under the GNU Lesser General Public License (LGPL) V2.1.</para>
+
+ <para>See
+ <computeroutput>sdk/bindings/webservice/java/jax-ws/src/COPYING.LIB</computeroutput>
+ for the full text of the LGPL 2.1.</para>
+
+ <para>When in doubt, please refer to the individual source code files
+ shipped with this SDK.</para>
+ </chapter>
+
+ <chapter>
+ <title>Main API change log</title>
+
+ <para>Generally, VirtualBox will maintain API compatibility within a major
+ release; a major release occurs when the first or the second of the three
+ version components of VirtualBox change (that is, in the x.y.z scheme, a
+ major release is one where x or y change, but not when only z
+ changes).</para>
+
+ <para>In other words, updates like those from 2.0.0 to 2.0.2 will not come
+ with API breakages.</para>
+
+ <para>Migration between major releases most likely will lead to API
+ breakage, so please make sure you updated code accordingly. The OOWS Java
+ wrappers enforce that mechanism by putting VirtualBox classes into
+ version-specific packages such as
+ <computeroutput>org.virtualbox_2_2</computeroutput>. This approach allows
+ for connecting to multiple VirtualBox versions simultaneously from the
+ same Java application.</para>
+
+ <para>The following sections list incompatible changes that the Main API
+ underwent since the original release of this SDK Reference with VirtualBox
+ 2.0. A change is deemed "incompatible" only if it breaks existing client
+ code (e.g. changes in method parameter lists, renamed or removed
+ interfaces and similar). In other words, the list does not contain new
+ interfaces, methods or attributes or other changes that do not affect
+ existing client code.</para>
+
+ <sect1>
+ <title>Incompatible API changes with version 4.0</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>The confusingly named and impractical session APIs were
+ changed. In existing client code, the following changes need to be
+ made:<itemizedlist>
+ <listitem>
+ <para>Replace any
+ <computeroutput>IVirtualBox::openSession(uuidMachine,
+ ...)</computeroutput> API call with the machine's <xref
+ linkend="IMachine__lockMachine"
+ xreflabel="IMachine::lockMachine()" /> call and a
+ <computeroutput>LockType.Write</computeroutput> argument. The
+ functionality is unchanged, but instead of "opening a direct
+ session on a machine" all documentation now refers to
+ "obtaining a write lock on a machine for the client
+ session".</para>
+ </listitem>
+
+ <listitem>
+ <para>Similarly, replace any
+ <computeroutput>IVirtualBox::openExistingSession(uuidMachine,
+ ...)</computeroutput> call with the machine's <xref
+ linkend="IMachine__lockMachine"
+ xreflabel="IMachine::lockMachine()" /> call and a
+ <computeroutput>LockType.Shared</computeroutput> argument.
+ Whereas it was previously impossible to connect a client
+ session to a running VM process in a race-free manner, the new
+ API will atomically either write-lock the machine for the
+ current session or establish a remote link to an existing
+ session. Existing client code which tried calling both
+ <computeroutput>openSession()</computeroutput> and
+ <computeroutput>openExistingSession()</computeroutput> can now
+ use this one call instead.</para>
+ </listitem>
+
+ <listitem>
+ <para>Third, replace any
+ <computeroutput>IVirtualBox::openRemoteSession(uuidMachine,
+ ...)</computeroutput> call with the machine's <xref
+ linkend="IMachine__launchVMProcess"
+ xreflabel="IMachine::launchVMProcess()" /> call. The
+ functionality is unchanged.</para>
+ </listitem>
+
+ <listitem>
+ <para>The <xref linkend="SessionState"
+ xreflabel="SessionState" /> enum was adjusted accordingly:
+ "Open" is now "Locked", "Closed" is now "Unlocked", "Closing"
+ is now "Unlocking".</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para>Virtual machines created with VirtualBox 4.0 or later no
+ longer register their media in the global media registry in the
+ <computeroutput>VirtualBox.xml</computeroutput> file. Instead, such
+ machines list all their media in their own machine XML files. As a
+ result, a number of media-related APIs had to be modified again.
+ <itemizedlist>
+ <listitem>
+ <para>Neither <xref linkend="IVirtualBox__createHardDisk"
+ xreflabel="IVirtualBox::createHardDisk()" /> nor <xref
+ linkend="IVirtualBox__openMedium"
+ xreflabel="IVirtualBox::openMedium()" /> register media
+ automatically any more.</para>
+ </listitem>
+
+ <listitem>
+ <para><xref linkend="IMachine__attachDevice"
+ xreflabel="IMachine::attachDevice()" /> and <xref
+ linkend="IMachine__mountMedium"
+ xreflabel="IMachine::mountMedium()" /> now take an IMedium
+ object instead of a UUID as an argument. It is these two calls
+ which add media to a registry now (either a machine registry
+ for machines created with VirtualBox 4.0 or later or the
+ global registry otherwise). As a consequence, if a medium is
+ opened but never attached to a machine, it is no longer added
+ to any registry any more.</para>
+ </listitem>
+
+ <listitem>
+ <para>To reduce code duplication, the APIs
+ IVirtualBox::findHardDisk(), getHardDisk(), findDVDImage(),
+ getDVDImage(), findFloppyImage() and getFloppyImage() have all
+ been merged into <xref linkend="IVirtualBox__findMedium"
+ xreflabel="IVirtualBox::findMedium()" />, and
+ IVirtualBox::openHardDisk(), openDVDImage() and
+ openFloppyImage() have all been merged into <xref
+ linkend="IVirtualBox__openMedium"
+ xreflabel="IVirtualBox::openMedium()" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>The rare use case of changing the UUID and parent UUID
+ of a medium previously handled by openHardDisk() is now in a
+ separate <xref linkend="IMedium__setIDs"
+ xreflabel="IMedium::setIDs" /> method.</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para>To reduce code duplication and for consistency with the
+ aforementioned changes, IVirtualBox::getMachine() has been merged
+ with <xref linkend="IVirtualBox__findMachine"
+ xreflabel="IVirtualBox::findMachine()" />, and
+ IMachine::getSnapshot() has been merged with <xref
+ linkend="IMachine__findSnapshot"
+ xreflabel="IMachine::findSnapshot()" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>IVirtualBox::unregisterMachine() was replaced with <xref
+ linkend="IMachine__unregister" xreflabel="IMachine::unregister()" />
+ with additional functionality.</para>
+ </listitem>
+
+ <listitem>
+ <para><xref linkend="IVirtualBox__createMachine"
+ xreflabel="IVirtualBox::createMachine()" /> is no longer restricted
+ to creating machines in the default "Machines" folder, but can now
+ create machines at arbitrary locations. For this to work, the
+ parameter list had to be changed.</para>
+ </listitem>
+
+ <listitem>
+ <para>IConsole::forgetSavedState has been renamed to <xref
+ linkend="IConsole__discardSavedState"
+ xreflabel="IConsole::discardSavedState()" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>All event callbacks APIs were replaced with a new, generic
+ event mechanism that can be used both locally (COM, XPCOM) and
+ remotely (web services). Also, the new mechanism is usable from
+ scripting languages and a local Java. See <xref linkend="IEvent"
+ xreflabel="events" /> for details. The new concept will require
+ changes to all clients that used event callbacks.</para>
+ </listitem>
+
+ <listitem>
+ <para><xref linkend="IGuest__additionsVersion"
+ xreflabel="IGuest::additionsVersion()" /> no longer returns the
+ Guest Additions interface version but the installed Guest Additions
+ version and revision in form of
+ <computeroutput>3.3.0r12345</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para>additionsActive() was replaced with <xref
+ linkend="IGuest__additionsRunLevel"
+ xreflabel="additionsRunLevel()" /> and <xref
+ linkend="IGuest__getAdditionsStatus"
+ xreflabel="getAdditionsStatus()" /> in order to support a more
+ detailed status of the current Guest Additions loading/readiness
+ state.</para>
+ </listitem>
+
+ <listitem>
+ <para>To address shared folders auto-mounting support, the following
+ APIs were extended to require an additional
+ <computeroutput>automount</computeroutput> parameter: <itemizedlist>
+ <listitem>
+ <para><xref linkend="IVirtualBox__createSharedFolder"
+ xreflabel="IVirtualBox::createSharedFolder()" /></para>
+ </listitem>
+
+ <listitem>
+ <para><xref linkend="IMachine__createSharedFolder"
+ xreflabel="IMachine::createSharedFolder()" /></para>
+ </listitem>
+
+ <listitem>
+ <para><xref linkend="IConsole__createSharedFolder"
+ xreflabel="IConsole::createSharedFolder()" /></para>
+ </listitem>
+ </itemizedlist> Also, a new property named
+ <computeroutput>autoMount</computeroutput> was added to the <xref
+ linkend="ISharedFolder" xreflabel="ISharedFolder" />
+ interface.</para>
+ </listitem>
+
+ <listitem>
+ <para><xref linkend="IMachine__export"
+ xreflabel="IMachine::export()" /> received an extra parameter
+ <computeroutput>location</computeroutput>, which is used to decide
+ for the disk naming.</para>
+ </listitem>
+
+ <listitem>
+ <para><xref linkend="IAppliance__write"
+ xreflabel="IAppliance::write()" /> received an extra parameter
+ <computeroutput>manifest</computeroutput>, which can suppress
+ creating the manifest file on export.</para>
+ </listitem>
+
+ <listitem>
+ <para><xref linkend="IVFSExplorer__entryList"
+ xreflabel="IVFSExplorer::entryList()" /> received two extra
+ parameters <computeroutput>sizes</computeroutput> and
+ <computeroutput>modes</computeroutput>, which contains the sizes (in
+ bytes) and the file access modes (in octal form) of the returned
+ files.</para>
+ </listitem>
+
+ <listitem>
+ <para>The long-deprecated IVirtualBox::createLegacyMachine() API has
+ been removed.</para>
+ </listitem>
+
+ <listitem>
+ <para>ISystemProperties::get/setDefaultHardDiskFolder() have been
+ removed.</para>
+ </listitem>
+
+ <listitem>
+ <para>ISystemProperties::getMaxVDISize() is now <xref
+ linkend="ISystemProperties__getMaxVDSize"
+ xreflabel="ISystemProperties::getMaxVDSize()" /> and the returned
+ unit has changed from megabytes to bytes.</para>
+ </listitem>
+
+ <listitem>
+ <para>A new Java glue layer replacing the previous OOWS JAX-WS
+ bindings was introduced. The new library allows for uniform code
+ targeting both local (COM/XPCOM) and remote (SOAP) transports. Now,
+ instead of <computeroutput>IWebsessionManager</computeroutput>, the
+ new class <computeroutput>VirtualBoxManager</computeroutput> must be
+ used. See <xref linkend="javaapi" xreflabel="Java API chapter" />
+ for details.</para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Incompatible API changes with version 3.2</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>The following interfaces were renamed for consistency:
+ <itemizedlist>
+ <listitem>
+ <para>IMachine::getCpuProperty() is now <xref
+ linkend="IMachine__getCPUProperty"
+ xreflabel="IMachine::getCPUProperty()" />;</para>
+ </listitem>
+
+ <listitem>
+ <para>IMachine::setCpuProperty() is now <xref
+ linkend="IMachine__setCPUProperty"
+ xreflabel="IMachine::setCPUProperty()" />;</para>
+ </listitem>
+
+ <listitem>
+ <para>IMachine::getCpuIdLeaf() is now <xref
+ linkend="IMachine__getCPUIDLeaf"
+ xreflabel="IMachine::getCPUIDLeaf()" />;</para>
+ </listitem>
+
+ <listitem>
+ <para>IMachine::setCpuIdLeaf() is now <xref
+ linkend="IMachine__setCPUIDLeaf"
+ xreflabel="IMachine::setCPUIDLeaf()" />;</para>
+ </listitem>
+
+ <listitem>
+ <para>IMachine::removeCpuIdLeaf() is now <xref
+ linkend="IMachine__removeCPUIDLeaf"
+ xreflabel="IMachine::removeCPUIDLeaf()" />;</para>
+ </listitem>
+
+ <listitem>
+ <para>IMachine::removeAllCpuIdLeafs() is now <xref
+ linkend="IMachine__removeAllCPUIDLeaves"
+ xreflabel="IMachine::removeAllCPUIDLeaves()" />;</para>
+ </listitem>
+
+ <listitem>
+ <para>the CpuPropertyType enum is now <xref
+ linkend="CPUPropertyType"
+ xreflabel="CPUPropertyType" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>IVirtualBoxCallback::onSnapshotDiscarded() is now
+ IVirtualBoxCallback::onSnapshotDeleted.</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para>When creating a VM configuration with <xref
+ linkend="IVirtualBox__createMachine"
+ xreflabel="IVirtualBox::createMachine" />) it is now possible to
+ ignore existing configuration files which would previously have
+ caused a failure. For this the
+ <computeroutput>override</computeroutput> parameter was
+ added.</para>
+ </listitem>
+
+ <listitem>
+ <para>Deleting snapshots via <xref
+ linkend="IConsole__deleteSnapshot"
+ xreflabel="IConsole::deleteSnapshot()" /> is now possible while the
+ associated VM is running in almost all cases. The API is unchanged,
+ but client code that verifies machine states to determine whether
+ snapshots can be deleted may need to be adjusted.</para>
+ </listitem>
+
+ <listitem>
+ <para>The IoBackendType enumeration was replaced with a boolean flag
+ (see <xref linkend="IStorageController__useHostIOCache"
+ xreflabel="IStorageController::useHostIOCache" />).</para>
+ </listitem>
+
+ <listitem>
+ <para>To address multi-monitor support, the following APIs were
+ extended to require an additional
+ <computeroutput>screenId</computeroutput> parameter: <itemizedlist>
+ <listitem>
+ <para><xref linkend="IMachine__querySavedThumbnailSize"
+ xreflabel="IMachine::querySavedThumbnailSize()" /></para>
+ </listitem>
+
+ <listitem>
+ <para><xref linkend="IMachine__readSavedThumbnailToArray"
+ xreflabel="IMachine::readSavedThumbnailToArray()" /></para>
+ </listitem>
+
+ <listitem>
+ <para><xref linkend="IMachine__querySavedScreenshotPNGSize"
+ xreflabel="IMachine::querySavedScreenshotPNGSize()" /></para>
+ </listitem>
+
+ <listitem>
+ <para><xref linkend="IMachine__readSavedScreenshotPNGToArray"
+ xreflabel="IMachine::readSavedScreenshotPNGToArray()" /></para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para>The <computeroutput>shape</computeroutput> parameter of
+ IConsoleCallback::onMousePointerShapeChange was changed from a
+ implementation-specific pointer to a safearray, enabling scripting
+ languages to process pointer shapes.</para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Incompatible API changes with version 3.1</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>Due to the new flexibility in medium attachments that was
+ introduced with version 3.1 (in particular, full flexibility with
+ attaching CD/DVD drives to arbitrary controllers), we seized the
+ opportunity to rework all interfaces dealing with storage media to
+ make the API more flexible as well as logical. The <xref
+ linkend="IStorageController" xreflabel="IStorageController" />,
+ <xref linkend="IMedium" xreflabel="IMedium" />, <xref
+ linkend="IMediumAttachment" xreflabel="IMediumAttachment" /> and,
+ <xref linkend="IMachine" xreflabel="IMachine" /> interfaces were
+ affected the most. Existing code using them to configure storage and
+ media needs to be carefully checked.</para>
+
+ <para>All media (hard disks, floppies and CDs/DVDs) are now
+ uniformly handled through the <xref linkend="IMedium"
+ xreflabel="IMedium" /> interface. The device-specific interfaces
+ (<code>IHardDisk</code>, <code>IDVDImage</code>,
+ <code>IHostDVDDrive</code>, <code>IFloppyImage</code> and
+ <code>IHostFloppyDrive</code>) have been merged into IMedium; CD/DVD
+ and floppy media no longer need special treatment. The device type
+ of a medium determines in which context it can be used. Some
+ functionality was moved to the other storage-related
+ interfaces.</para>
+
+ <para><code>IMachine::attachHardDisk</code> and similar methods have
+ been renamed and generalized to deal with any type of drive and
+ medium. <xref linkend="IMachine__attachDevice"
+ xreflabel="IMachine::attachDevice()" /> is the API method for adding
+ any drive to a storage controller. The floppy and DVD/CD drives are
+ no longer handled specially, and that means you can have more than
+ one of them. As before, drives can only be changed while the VM is
+ powered off. Mounting (or unmounting) removable media at runtime is
+ possible with <xref linkend="IMachine__mountMedium"
+ xreflabel="IMachine::mountMedium()" />.</para>
+
+ <para>Newly created virtual machines have no storage controllers
+ associated with them. Even the IDE Controller needs to be created
+ explicitly. The floppy controller is now visible as a separate
+ controller, with a new storage bus type. For each storage bus type
+ you can query the device types which can be attached, so that it is
+ not necessary to hardcode any attachment rules.</para>
+
+ <para>This required matching changes e.g. in the callback interfaces
+ (the medium specific change notification was replaced by a generic
+ medium change notification) and removing associated enums (e.g.
+ <code>DriveState</code>). In many places the incorrect use of the
+ plural form "media" was replaced by "medium", to improve
+ consistency.</para>
+ </listitem>
+
+ <listitem>
+ <para>Reading the <xref linkend="IMedium__state"
+ xreflabel="IMedium::state" xrefstyle="" /> attribute no longer
+ automatically performs an accessibility check; a new method <xref
+ linkend="IMedium__refreshState"
+ xreflabel="IMedium::refreshState()" /> does this. The attribute only
+ returns the state any more.</para>
+ </listitem>
+
+ <listitem>
+ <para>There were substantial changes related to snapshots, triggered
+ by the "branched snapshots" functionality introduced with version
+ 3.1. IConsole::discardSnapshot was renamed to <xref
+ linkend="IConsole__deleteSnapshot"
+ xreflabel="IConsole::deleteSnapshot()" />.
+ IConsole::discardCurrentState and
+ IConsole::discardCurrentSnapshotAndState were removed; corresponding
+ new functionality is in <xref linkend="IConsole__restoreSnapshot"
+ xreflabel="IConsole::restoreSnapshot()" />. Also, when <xref
+ linkend="IConsole__takeSnapshot"
+ xreflabel="IConsole::takeSnapshot()" /> is called on a running
+ virtual machine, a live snapshot will be created. The old behavior
+ was to temporarily pause the virtual machine while creating an
+ online snapshot.</para>
+ </listitem>
+
+ <listitem>
+ <para>The <xref linkend="IVRDPServer" xreflabel="IVRDPServer" />,
+ <xref linkend="IRemoteDisplayInfo" xreflabel="IRemoteDisplayInfo" />
+ and IConsoleCallback interfaces were changed to reflect VRDP server
+ ability to bind to one of available ports from a list of
+ ports.</para>
+
+ <para>The <computeroutput>IVRDPServer::port</computeroutput>
+ attribute has been replaced with <xref linkend="IVRDPServer__ports"
+ xreflabel="IVRDPServer::ports" />, which is a comma-separated list
+ of ports or ranges of ports.</para>
+
+ <para>An <xref linkend="IRemoteDisplayInfo__port"
+ xreflabel="IRemoteDisplayInfo::port" /> attribute has been added for
+ querying the actual port VRDP server listens on.</para>
+
+ <para>An IConsoleCallback::onRemoteDisplayInfoChange() notification
+ callback has been added.</para>
+ </listitem>
+
+ <listitem>
+ <para>The parameter lists for the following functions were
+ modified:<itemizedlist>
+ <listitem>
+ <para><xref linkend="IHost__removeHostOnlyNetworkInterface"
+ xreflabel="IHost::removeHostOnlyNetworkInterface()" /></para>
+ </listitem>
+
+ <listitem>
+ <para><xref linkend="IHost__removeUSBDeviceFilter"
+ xreflabel="IHost::removeUSBDeviceFilter()" /></para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para>In the OOWS bindings for JAX-WS, the behavior of structures
+ changed: for one, we implemented natural structures field access so
+ you can just call a "get" method to obtain a field. Secondly,
+ setters in structures were disabled as they have no expected effect
+ and were at best misleading.</para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Incompatible API changes with version 3.0</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>In the object-oriented web service bindings for JAX-WS, proper
+ inheritance has been introduced for some classes, so explicit
+ casting is no longer needed to call methods from a parent class. In
+ particular, IHardDisk and other classes now properly derive from
+ <xref linkend="IMedium" xreflabel="IMedium" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>All object identifiers (machines, snapshots, disks, etc)
+ switched from GUIDs to strings (now still having string
+ representation of GUIDs inside). As a result, no particular internal
+ structure can be assumed for object identifiers; instead, they
+ should be treated as opaque unique handles. This change mostly
+ affects Java and C++ programs; for other languages, GUIDs are
+ transparently converted to strings.</para>
+ </listitem>
+
+ <listitem>
+ <para>The uses of NULL strings have been changed greatly. All out
+ parameters now use empty strings to signal a null value. For in
+ parameters both the old NULL and empty string is allowed. This
+ change was necessary to support more client bindings, especially
+ using the webservice API. Many of them either have no special NULL
+ value or have trouble dealing with it correctly in the respective
+ library code.</para>
+ </listitem>
+
+ <listitem>
+ <para>Accidentally, the <code>TSBool</code> interface still appeared
+ in 3.0.0, and was removed in 3.0.2. This is an SDK bug, do not use
+ the SDK for VirtualBox 3.0.0 for developing clients.</para>
+ </listitem>
+
+ <listitem>
+ <para>The type of <xref linkend="IVirtualBoxErrorInfo__resultCode"
+ xreflabel="IVirtualBoxErrorInfo::resultCode" /> changed from
+ <computeroutput>result</computeroutput> to
+ <computeroutput>long</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para>The parameter list of IVirtualBox::openHardDisk was
+ changed.</para>
+ </listitem>
+
+ <listitem>
+ <para>The method IConsole::discardSavedState was renamed to
+ IConsole::forgetSavedState, and a parameter was added.</para>
+ </listitem>
+
+ <listitem>
+ <para>The method IConsole::powerDownAsync was renamed to <xref
+ linkend="IConsole__powerDown" xreflabel="IConsole::powerDown" />,
+ and the previous method with that name was deleted. So effectively a
+ parameter was added.</para>
+ </listitem>
+
+ <listitem>
+ <para>In the <xref linkend="IFramebuffer"
+ xreflabel="IFramebuffer" /> interface, the following were
+ removed:<itemizedlist>
+ <listitem>
+ <para>the <computeroutput>operationSupported</computeroutput>
+ attribute;</para>
+
+ <para>(as a result, the
+ <computeroutput>FramebufferAccelerationOperation</computeroutput>
+ enum was no longer needed and removed as well);</para>
+ </listitem>
+
+ <listitem>
+ <para>the <computeroutput>solidFill()</computeroutput>
+ method;</para>
+ </listitem>
+
+ <listitem>
+ <para>the <computeroutput>copyScreenBits()</computeroutput>
+ method.</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para>In the <xref linkend="IDisplay" xreflabel="IDisplay" />
+ interface, the following were removed:<itemizedlist>
+ <listitem>
+ <para>the
+ <computeroutput>setupInternalFramebuffer()</computeroutput>
+ method;</para>
+ </listitem>
+
+ <listitem>
+ <para>the <computeroutput>lockFramebuffer()</computeroutput>
+ method;</para>
+ </listitem>
+
+ <listitem>
+ <para>the <computeroutput>unlockFramebuffer()</computeroutput>
+ method;</para>
+ </listitem>
+
+ <listitem>
+ <para>the
+ <computeroutput>registerExternalFramebuffer()</computeroutput>
+ method.</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Incompatible API changes with version 2.2</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>Added explicit version number into JAX-WS Java package names,
+ such as <computeroutput>org.virtualbox_2_2</computeroutput>,
+ allowing connect to multiple VirtualBox clients from single Java
+ application.</para>
+ </listitem>
+
+ <listitem>
+ <para>The interfaces having a "2" suffix attached to them with
+ version 2.1 were renamed again to have that suffix removed. This
+ time around, this change involves only the name, there are no
+ functional differences.</para>
+
+ <para>As a result, IDVDImage2 is now IDVDImage; IHardDisk2 is now
+ IHardDisk; IHardDisk2Attachment is now IHardDiskAttachment.</para>
+
+ <para>Consequentially, all related methods and attributes that had a
+ "2" suffix have been renamed; for example, IMachine::attachHardDisk2
+ now becomes IMachine::attachHardDisk().</para>
+ </listitem>
+
+ <listitem>
+ <para>IVirtualBox::openHardDisk has an extra parameter for opening a
+ disk read/write or read-only.</para>
+ </listitem>
+
+ <listitem>
+ <para>The remaining collections were replaced by more performant
+ safe-arrays. This affects the following collections:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>IGuestOSTypeCollection</para>
+ </listitem>
+
+ <listitem>
+ <para>IHostDVDDriveCollection</para>
+ </listitem>
+
+ <listitem>
+ <para>IHostFloppyDriveCollection</para>
+ </listitem>
+
+ <listitem>
+ <para>IHostUSBDeviceCollection</para>
+ </listitem>
+
+ <listitem>
+ <para>IHostUSBDeviceFilterCollection</para>
+ </listitem>
+
+ <listitem>
+ <para>IProgressCollection</para>
+ </listitem>
+
+ <listitem>
+ <para>ISharedFolderCollection</para>
+ </listitem>
+
+ <listitem>
+ <para>ISnapshotCollection</para>
+ </listitem>
+
+ <listitem>
+ <para>IUSBDeviceCollection</para>
+ </listitem>
+
+ <listitem>
+ <para>IUSBDeviceFilterCollection</para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+
+ <listitem>
+ <para>Since "Host Interface Networking" was renamed to "bridged
+ networking" and host-only networking was introduced, all associated
+ interfaces needed renaming as well. In detail:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>The HostNetworkInterfaceType enum has been renamed to
+ <xref linkend="HostNetworkInterfaceMediumType"
+ xreflabel="HostNetworkInterfaceMediumType" /></para>
+ </listitem>
+
+ <listitem>
+ <para>The IHostNetworkInterface::type attribute has been renamed
+ to <xref linkend="IHostNetworkInterface__mediumType"
+ xreflabel="IHostNetworkInterface::mediumType" /></para>
+ </listitem>
+
+ <listitem>
+ <para>INetworkAdapter::attachToHostInterface() has been renamed
+ to <xref linkend="INetworkAdapter__attachToBridgedInterface"
+ xreflabel="INetworkAdapter::attachToBridgedInterface()" /></para>
+ </listitem>
+
+ <listitem>
+ <para>In the IHost interface, createHostNetworkInterface() has
+ been renamed to <xref
+ linkend="IHost__createHostOnlyNetworkInterface"
+ xreflabel="createHostOnlyNetworkInterface()" /></para>
+ </listitem>
+
+ <listitem>
+ <para>Similarly, removeHostNetworkInterface() has been renamed
+ to <xref linkend="IHost__removeHostOnlyNetworkInterface"
+ xreflabel="removeHostOnlyNetworkInterface()" /></para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Incompatible API changes with version 2.1</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>With VirtualBox 2.1, error codes were added to many error
+ infos that give the caller a machine-readable (numeric) feedback in
+ addition to the error string that has always been available. This is
+ an ongoing process, and future versions of this SDK reference will
+ document the error codes for each method call.</para>
+ </listitem>
+
+ <listitem>
+ <para>The hard disk and other media interfaces were completely
+ redesigned. This was necessary to account for the support of VMDK,
+ VHD and other image types; since backwards compatibility had to be
+ broken anyway, we seized the moment to redesign the interfaces in a
+ more logical way.</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Previously, the old IHardDisk interface had several
+ derivatives called IVirtualDiskImage, IVMDKImage, IVHDImage,
+ IISCSIHardDisk and ICustomHardDisk for the various disk formats
+ supported by VirtualBox. The new IHardDisk2 interface that comes
+ with version 2.1 now supports all hard disk image formats
+ itself.</para>
+ </listitem>
+
+ <listitem>
+ <para>IHardDiskFormat is a new interface to describe the
+ available back-ends for hard disk images (e.g. VDI, VMDK, VHD or
+ iSCSI). The IHardDisk2::format attribute can be used to find out
+ the back-end that is in use for a particular hard disk image.
+ ISystemProperties::hardDiskFormats[] contains a list of all
+ back-ends supported by the system. <xref
+ linkend="ISystemProperties__defaultHardDiskFormat"
+ xreflabel="ISystemProperties::defaultHardDiskFormat" /> contains
+ the default system format.</para>
+ </listitem>
+
+ <listitem>
+ <para>In addition, the new <xref linkend="IMedium"
+ xreflabel="IMedium" /> interface is a generic interface for hard
+ disk, DVD and floppy images that contains the attributes and
+ methods shared between them. It can be considered a parent class
+ of the more specific interfaces for those images, which are now
+ IHardDisk2, IDVDImage2 and IFloppyImage2.</para>
+
+ <para>In each case, the "2" versions of these interfaces replace
+ the earlier versions that did not have the "2" suffix.
+ Previously, the IDVDImage and IFloppyImage interfaces were
+ entirely unrelated to IHardDisk.</para>
+ </listitem>
+
+ <listitem>
+ <para>As a result, all parts of the API that previously
+ referenced IHardDisk, IDVDImage or IFloppyImage or any of the
+ old subclasses are gone and will have replacements that use
+ IHardDisk2, IDVDImage2 and IFloppyImage2; see, for example,
+ IMachine::attachHardDisk2.</para>
+ </listitem>
+
+ <listitem>
+ <para>In particular, the IVirtualBox::hardDisks2 array replaces
+ the earlier IVirtualBox::hardDisks collection.</para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+
+ <listitem>
+ <para><xref linkend="IGuestOSType" xreflabel="IGuestOSType" /> was
+ extended to group operating systems into families and for 64-bit
+ support.</para>
+ </listitem>
+
+ <listitem>
+ <para>The <xref linkend="IHostNetworkInterface"
+ xreflabel="IHostNetworkInterface" /> interface was completely
+ rewritten to account for the changes in how Host Interface
+ Networking is now implemented in VirtualBox 2.1.</para>
+ </listitem>
+
+ <listitem>
+ <para>The IVirtualBox::machines2[] array replaces the former
+ IVirtualBox::machines collection.</para>
+ </listitem>
+
+ <listitem>
+ <para>Added <xref linkend="IHost__getProcessorFeature"
+ xreflabel="IHost::getProcessorFeature()" /> and <xref
+ linkend="ProcessorFeature" xreflabel="ProcessorFeature" />
+ enumeration.</para>
+ </listitem>
+
+ <listitem>
+ <para>The parameter list for <xref
+ linkend="IVirtualBox__createMachine"
+ xreflabel="IVirtualBox::createMachine()" /> was modified.</para>
+ </listitem>
+
+ <listitem>
+ <para>Added IMachine::pushGuestProperty.</para>
+ </listitem>
+
+ <listitem>
+ <para>New attributes in IMachine: <xref
+ linkend="IMachine__accelerate3DEnabled"
+ xreflabel="accelerate3DEnabled" />, HWVirtExVPIDEnabled, <xref
+ linkend="IMachine__guestPropertyNotificationPatterns"
+ xreflabel="guestPropertyNotificationPatterns" />, <xref
+ linkend="IMachine__CPUCount" xreflabel="CPUCount" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>Added <xref linkend="IConsole__powerUpPaused"
+ xreflabel="IConsole::powerUpPaused()" /> and <xref
+ linkend="IConsole__getGuestEnteredACPIMode"
+ xreflabel="IConsole::getGuestEnteredACPIMode()" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>Removed ResourceUsage enumeration.</para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+ </chapter>
+</book>
+<!-- vim: set shiftwidth=2 tabstop=2 expandtab: -->
diff --git a/doc/manual/fr_FR/UserManual.xml b/doc/manual/fr_FR/UserManual.xml
new file mode 100644
index 00000000..bfe4df03
--- /dev/null
+++ b/doc/manual/fr_FR/UserManual.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+ "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<book>
+ <bookinfo>
+ <title>$VBOX_PRODUCT<superscript>®</superscript></title>
+
+ <subtitle>Manuel de l'utilisateur</subtitle>
+
+ <edition>Version
+ $VBOX_VERSION_STRING</edition>
+
+ <corpauthor>$VBOX_VENDOR</corpauthor>
+
+ <address>http://www.virtualbox.org</address>
+
+ <copyright>
+ <year>2004-$VBOX_C_YEAR</year>
+
+ <holder>$VBOX_VENDOR</holder>
+ </copyright>
+ </bookinfo>
+
+ <xi:include href="user_Introduction.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="user_Installation.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="user_BasicConcepts.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="user_GuestAdditions.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="user_Storage.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="user_Networking.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="user_Frontends.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="user_VBoxManage.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="user_AdvancedTopics.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="user_Technical.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="user_VirtualBoxAPI.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="user_Troubleshooting.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="user_Security.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="user_KnownIssues.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="user_ChangeLog.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="user_ThirdParty.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="user_PrivacyPolicy.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+ <xi:include href="user_Glossary.xml" xpointer="element(/1)"
+ xmlns:xi="http://www.w3.org/2001/XInclude" />
+</book>
diff --git a/doc/manual/fr_FR/images/clone-vm.png b/doc/manual/fr_FR/images/clone-vm.png
new file mode 100644
index 00000000..5b0b8274
--- /dev/null
+++ b/doc/manual/fr_FR/images/clone-vm.png
Binary files differ
diff --git a/doc/manual/fr_FR/images/create-vdi-1.png b/doc/manual/fr_FR/images/create-vdi-1.png
new file mode 100644
index 00000000..a289c204
--- /dev/null
+++ b/doc/manual/fr_FR/images/create-vdi-1.png
Binary files differ
diff --git a/doc/manual/fr_FR/images/create-vm-1.png b/doc/manual/fr_FR/images/create-vm-1.png
new file mode 100644
index 00000000..e4ad6900
--- /dev/null
+++ b/doc/manual/fr_FR/images/create-vm-1.png
Binary files differ
diff --git a/doc/manual/fr_FR/images/create-vm-2.png b/doc/manual/fr_FR/images/create-vm-2.png
new file mode 100644
index 00000000..6d11b24a
--- /dev/null
+++ b/doc/manual/fr_FR/images/create-vm-2.png
Binary files differ
diff --git a/doc/manual/fr_FR/images/ovf-import.png b/doc/manual/fr_FR/images/ovf-import.png
new file mode 100644
index 00000000..d63ed5a5
--- /dev/null
+++ b/doc/manual/fr_FR/images/ovf-import.png
Binary files differ
diff --git a/doc/manual/fr_FR/images/seamless.png b/doc/manual/fr_FR/images/seamless.png
new file mode 100644
index 00000000..a8515207
--- /dev/null
+++ b/doc/manual/fr_FR/images/seamless.png
Binary files differ
diff --git a/doc/manual/fr_FR/images/snapshots-1.png b/doc/manual/fr_FR/images/snapshots-1.png
new file mode 100644
index 00000000..a4ccc8be
--- /dev/null
+++ b/doc/manual/fr_FR/images/snapshots-1.png
Binary files differ
diff --git a/doc/manual/fr_FR/images/vbox-components.png b/doc/manual/fr_FR/images/vbox-components.png
new file mode 100644
index 00000000..441192cd
--- /dev/null
+++ b/doc/manual/fr_FR/images/vbox-components.png
Binary files differ
diff --git a/doc/manual/fr_FR/images/vbox-sdl.png b/doc/manual/fr_FR/images/vbox-sdl.png
new file mode 100644
index 00000000..bae1f9f5
--- /dev/null
+++ b/doc/manual/fr_FR/images/vbox-sdl.png
Binary files differ
diff --git a/doc/manual/fr_FR/images/vboxlogo.png b/doc/manual/fr_FR/images/vboxlogo.png
new file mode 100644
index 00000000..1fcdd79c
--- /dev/null
+++ b/doc/manual/fr_FR/images/vboxlogo.png
Binary files differ
diff --git a/doc/manual/fr_FR/images/virtual-disk-manager.png b/doc/manual/fr_FR/images/virtual-disk-manager.png
new file mode 100644
index 00000000..9d4c3e01
--- /dev/null
+++ b/doc/manual/fr_FR/images/virtual-disk-manager.png
Binary files differ
diff --git a/doc/manual/fr_FR/images/virtual-disk-manager2.png b/doc/manual/fr_FR/images/virtual-disk-manager2.png
new file mode 100644
index 00000000..a8becaff
--- /dev/null
+++ b/doc/manual/fr_FR/images/virtual-disk-manager2.png
Binary files differ
diff --git a/doc/manual/fr_FR/images/virtualbox-main-empty.png b/doc/manual/fr_FR/images/virtualbox-main-empty.png
new file mode 100644
index 00000000..609cdef2
--- /dev/null
+++ b/doc/manual/fr_FR/images/virtualbox-main-empty.png
Binary files differ
diff --git a/doc/manual/fr_FR/images/virtualbox-main.png b/doc/manual/fr_FR/images/virtualbox-main.png
new file mode 100644
index 00000000..06ba1e51
--- /dev/null
+++ b/doc/manual/fr_FR/images/virtualbox-main.png
Binary files differ
diff --git a/doc/manual/fr_FR/images/vm-close.png b/doc/manual/fr_FR/images/vm-close.png
new file mode 100644
index 00000000..701fcbc2
--- /dev/null
+++ b/doc/manual/fr_FR/images/vm-close.png
Binary files differ
diff --git a/doc/manual/fr_FR/images/vm-hostkey.png b/doc/manual/fr_FR/images/vm-hostkey.png
new file mode 100644
index 00000000..fb5b9408
--- /dev/null
+++ b/doc/manual/fr_FR/images/vm-hostkey.png
Binary files differ
diff --git a/doc/manual/fr_FR/images/vm-settings-harddisk.png b/doc/manual/fr_FR/images/vm-settings-harddisk.png
new file mode 100644
index 00000000..80de91c8
--- /dev/null
+++ b/doc/manual/fr_FR/images/vm-settings-harddisk.png
Binary files differ
diff --git a/doc/manual/fr_FR/images/vm-vista-running.png b/doc/manual/fr_FR/images/vm-vista-running.png
new file mode 100644
index 00000000..4a9048f6
--- /dev/null
+++ b/doc/manual/fr_FR/images/vm-vista-running.png
Binary files differ
diff --git a/doc/manual/fr_FR/user_AdvancedTopics.xml b/doc/manual/fr_FR/user_AdvancedTopics.xml
new file mode 100644
index 00000000..99254aac
--- /dev/null
+++ b/doc/manual/fr_FR/user_AdvancedTopics.xml
@@ -0,0 +1,1761 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<chapter id="AdvancedTopics">
+ <title>Advanced topics</title>
+
+ <sect1 id="vboxsdl">
+ <title>VBoxSDL, the simplified VM displayer</title>
+
+ <sect2>
+ <title>Introduction</title>
+
+ <para>VBoxSDL is a simple graphical user interface (GUI) that lacks the
+ nice point-and-click support which VirtualBox, our main GUI, provides.
+ VBoxSDL is currently primarily used internally for debugging VirtualBox
+ and therefore not officially supported. Still, you may find it useful
+ for environments where the virtual machines are not necessarily
+ controlled by the same person that uses the virtual machine.<note>
+ <para>VBoxSDL is not available on the Mac OS X host platform.</para>
+ </note></para>
+
+ <para>As you can see in the following screenshot, VBoxSDL does indeed
+ only provide a simple window that contains only the "pure" virtual
+ machine, without menus or other controls to click upon and no additional
+ indicators of virtual machine activity:</para>
+
+ <para><mediaobject>
+ <imageobject>
+ <imagedata align="center" fileref="images/vbox-sdl.png"
+ width="10cm" />
+ </imageobject>
+ </mediaobject></para>
+
+ <para>To start a virtual machine with VBoxSDL instead of the VirtualBox
+ GUI, enter the following on a command line:<screen>VBoxSDL --startvm &lt;vm&gt;</screen></para>
+
+ <para>where <computeroutput>&lt;vm&gt;</computeroutput> is, as usual
+ with VirtualBox command line parameters, the name or UUID of an existing
+ virtual machine.</para>
+ </sect2>
+
+ <sect2>
+ <title>Secure labeling with VBoxSDL</title>
+
+ <para>When running guest operating systems in fullscreen mode, the guest
+ operating system usually has control over the whole screen. This could
+ present a security risk as the guest operating system might fool the
+ user into thinking that it is either a different system (which might
+ have a higher security level) or it might present messages on the screen
+ that appear to stem from the host operating system.</para>
+
+ <para>In order to protect the user against the above mentioned security
+ risks, the secure labeling feature has been developed. Secure labeling
+ is currently available only for VBoxSDL. When enabled, a portion of the
+ display area is reserved for a label in which a user defined message is
+ displayed. The label height in set to 20 pixels in VBoxSDL. The label
+ font color and background color can be optionally set as hexadecimal RGB
+ color values. The following syntax is used to enable secure
+ labeling:</para>
+
+ <screen>VBoxSDL --startvm "VM name"
+ --securelabel --seclabelfnt ~/fonts/arial.ttf
+ --seclabelsiz 14 --seclabelfgcol 00FF00 --seclabelbgcol 00FFFF</screen>
+
+ <para>In addition to enabling secure labeling, a TrueType font has to be
+ supplied. To use another font size than 12 point use the parameter
+ <computeroutput>--seclabelsiz</computeroutput>.</para>
+
+ <para>The label text can be set with <screen>VBoxManage setextradata "VM name" "VBoxSDL/SecureLabel" "The Label"</screen>
+ Changing this label will take effect immediately.</para>
+
+ <para>Typically, full screen resolutions are limited to certain
+ "standard" geometries such as 1024 x 768. Increasing this by twenty
+ lines is not usually feasible, so in most cases, VBoxSDL will chose the
+ next higher resolution, e.g. 1280 x 1024 and the guest's screen will not
+ cover the whole display surface. If VBoxSDL is unable to choose a higher
+ resolution, the secure label will be painted on top of the guest's
+ screen surface. In order to address the problem of the bottom part of
+ the guest screen being hidden, VBoxSDL can provide custom video modes to
+ the guest that are reduced by the height of the label. For Windows
+ guests and recent Solaris and Linux guests, the VirtualBox Guest
+ Additions automatically provide the reduced video modes. Additionally,
+ the VESA BIOS has been adjusted to duplicate its standard mode table
+ with adjusted resolutions. The adjusted mode IDs can be calculated using
+ the following formula:</para>
+
+ <screen>reduced_modeid = modeid + 0x30</screen>
+
+ <para>For example, in order to start Linux with 1024 x 748 x 16, the
+ standard mode 0x117 (1024 x 768 x 16) is used as a base. The Linux video
+ mode kernel parameter can then be calculated using:</para>
+
+ <screen>vga = 0x200 | 0x117 + 0x30
+vga = 839</screen>
+
+ <para>The reason for duplicating the standard modes instead of only
+ supplying the adjusted modes is that most guest operating systems
+ require the standard VESA modes to be fixed and refuse to start with
+ different modes.</para>
+
+ <para>When using the X.org VESA driver, custom modelines have to be
+ calculated and added to the configuration (usually in
+ <literal>/etc/X11/xorg.conf</literal>. A handy tool to determine
+ modeline entries can be found at <literal><ulink
+ url="http://www.tkk.fi/Misc/Electronics/faq/vga2rgb/calc.html">http://www.tkk.fi/Misc/Electronics/faq/vga2rgb/calc.html</ulink></literal>.)</para>
+ </sect2>
+
+ <sect2>
+ <title>Releasing modifiers with VBoxSDL on Linux</title>
+
+ <para>When switching from a X virtual terminal (VT) to another VT using
+ Ctrl-Alt-Fx while the VBoxSDL window has the input focus, the guest will
+ receive Ctrl and Alt keypress events without receiving the corresponding
+ key release events. This is an architectural limitation of Linux. In
+ order to reset the modifier keys, it is possible to send
+ <computeroutput>SIGUSR1</computeroutput> to the VBoxSDL main thread
+ (first entry in the <computeroutput>ps</computeroutput> list). For
+ example, when switching away to another VT and saving the virtual
+ machine from this terminal, the following sequence can be used to make
+ sure the VM is not saved with stuck modifiers:</para>
+
+ <para><screen>kill -usr1 &lt;pid&gt;
+VBoxManage controlvm "Windows 2000" savestate</screen></para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title id="autologon">Automated guest logons</title>
+
+ <para>VirtualBox provides Guest Addition modules for Windows, Linux and
+ Solaris to enable automated logons on the guest.</para>
+
+ <para>When a guest operating system is running in a virtual machine, it
+ might be desirable to perform coordinated and automated logons using
+ credentials from a master logon system. (With "credentials", we are
+ referring to logon information consisting of user name, password and
+ domain name, where each value might be empty.)</para>
+
+ <sect2 id="autologon_win">
+ <title>Automated Windows guest logons</title>
+
+ <para>Since Windows NT, Windows has provided a modular system logon
+ subsystem ("Winlogon") which can be customized and extended by means of
+ so-called GINA modules (Graphical Identification and Authentication).
+ With Windows Vista and Windows 7, the GINA modules were replaced with a
+ new mechanism called "credential providers". The VirtualBox Guest
+ Additions for Windows come with both, a GINA and a credential provider
+ module, and therefore enable any Windows guest to perform automated
+ logons.</para>
+
+ <para>To activate the VirtualBox GINA or credential provider module,
+ install the Guest Additions with using the command line switch
+ <computeroutput>/with_autologon</computeroutput>. All the following
+ manual steps required for installing these modules will be then done by
+ the installer.</para>
+
+ <para>To manually install the VirtualBox GINA module, extract the Guest
+ Additions (see <xref linkend="windows-guest-file-extraction" />) and
+ copy the file <computeroutput>VBoxGINA.dll</computeroutput> to the
+ Windows <computeroutput>SYSTEM32</computeroutput> directory. Then, in
+ the registry, create the following key: <screen>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\GinaDLL</screen>
+ with a value of <computeroutput>VBoxGINA.dll</computeroutput>.</para>
+
+ <note>
+ <para>The VirtualBox GINA module is implemented as a wrapper around
+ the standard Windows GINA module
+ (<computeroutput>MSGINA.DLL</computeroutput>). As a result, it will
+ most likely not work correctly with 3rd party GINA modules.</para>
+ </note>
+
+ <para>To manually install the VirtualBox credential provider module, extract the
+ Guest Additions (see <xref linkend="windows-guest-file-extraction" />)
+ and copy the file <computeroutput>VBoxCredProv.dll</computeroutput> to
+ the Windows <computeroutput>SYSTEM32</computeroutput> directory. Then,
+ in the registry, create the following keys:<screen>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\
+ Authentication\Credential Providers\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}
+
+HKEY_CLASSES_ROOT\CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}
+
+HKEY_CLASSES_ROOT\CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}\InprocServer32</screen></para>
+
+ <para>with all default values (the key named
+ <computeroutput>(Default)</computeroutput> in each key) set to
+ <computeroutput>VBoxCredProv</computeroutput>. After that a new string
+ named <screen>HKEY_CLASSES_ROOT\CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}\InprocServer32\ThreadingModel</screen>
+ with a value of <computeroutput>Apartment</computeroutput> has to be
+ created.</para>
+
+ <para>To set credentials, use the following command on a
+ <emphasis>running</emphasis> VM:</para>
+
+ <screen>VBoxManage controlvm "Windows XP" setcredentials "John Doe" "secretpassword" "DOMTEST"</screen>
+
+ <para>While the VM is running, the credentials can be queried by the
+ VirtualBox logon modules (GINA or credential provider) using the
+ VirtualBox Guest Additions device driver. When Windows is in "logged
+ out" mode, the logon modules will constantly poll for credentials and if
+ they are present, a logon will be attempted. After retrieving the
+ credentials, the logon modules will erase them so that the above command
+ will have to be repeated for subsequent logons.</para>
+
+ <para>For security reasons, credentials are not stored in any persistent
+ manner and will be lost when the VM is reset. Also, the credentials are
+ "write-only", i.e. there is no way to retrieve the credentials from the
+ host side. Credentials can be reset from the host side by setting empty
+ values.</para>
+
+ <para>Depending on the particular variant of the Windows guest, the
+ following restrictions apply: <orderedlist>
+ <listitem>
+ <para>For <emphasis role="bold">Windows XP guests,</emphasis> the
+ logon subsystem needs to be configured to use the classic logon
+ dialog as the VirtualBox GINA module does not support the XP-style
+ welcome dialog.</para>
+ </listitem>
+
+ <listitem>
+ <para>For <emphasis role="bold">Windows Vista and Windows 7
+ guests,</emphasis> the logon subsystem does not support the
+ so-called Secure Attention Sequence
+ (<computeroutput>CTRL+ALT+DEL</computeroutput>). As a result, the
+ guest's group policy settings need to be changed to not use the
+ Secure Attention Sequence. Also, the user name given is only
+ compared to the true user name, not the user friendly name. This
+ means that when you rename a user, you still have to supply the
+ original user name (internally, Windows never renames user
+ accounts).</para>
+ </listitem>
+
+ <listitem>
+ <para>Auto-logon handling of the built-in Windows Remote Desktop Service
+ (formerly known as Terminal Services) is disabled by default. To enable
+ it, create the registry key
+ <screen>HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\VirtualBox Guest Additions\AutoLogon</screen>
+ with a <computeroutput>DWORD</computeroutput> value of <computeroutput>1</computeroutput>.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>The following command forces VirtualBox to keep the credentials
+ after they were read by the guest and on VM reset: <screen>VBoxManage setextradata "Windows XP" VBoxInternal/Devices/VMMDev/0/Config/KeepCredentials 1</screen>Note
+ that this is a potential security risk as a malicious application
+ running on the guest could request this information using the proper
+ interface.</para>
+ </sect2>
+
+ <sect2 id="autologon_unix">
+ <title>Automated Linux/Unix guest logons</title>
+
+ <para>Starting with version 3.2, VirtualBox provides a custom PAM module
+ (Pluggable Authentication Module) which can be used to perform automated
+ guest logons on platforms which support this framework. Virtually all
+ modern Linux/Unix distributions rely on PAM.</para>
+
+ <para>The <computeroutput>pam_vbox.so</computeroutput> module itself
+ <emphasis role="bold">does not</emphasis> do an actual verification of
+ the credentials passed to the guest OS; instead it relies on other
+ modules such as <computeroutput>pam_unix.so</computeroutput> or
+ <computeroutput>pam_unix2.so</computeroutput> down in the PAM stack to
+ do the actual validation using the credentials retrieved by
+ <computeroutput>pam_vbox.so</computeroutput>. Therefore
+ <computeroutput>pam_vbox.so</computeroutput> has to be on top of the
+ authentication PAM service list.</para>
+
+ <note>
+ <para>The <computeroutput>pam_vbox.so</computeroutput> only supports
+ the <computeroutput>auth</computeroutput> primitive. Other primitives
+ such as <computeroutput>account</computeroutput>,
+ <computeroutput>session</computeroutput> or
+ <computeroutput>password</computeroutput> are not supported.</para>
+ </note>
+
+ <para>The <computeroutput>pam_vbox.so</computeroutput> module is shipped
+ as part of the Guest Additions but it is not installed and/or activated
+ on the guest OS by default. In order to install it, it has to be copied
+ from
+ <computeroutput>/opt/VBoxGuestAdditions-&lt;version&gt;/lib/VBoxGuestAdditions/</computeroutput>
+ to the security modules directory, usually
+ <computeroutput>/lib/security/</computeroutput> on 32-bit guest Linuxes or
+ <computeroutput>/lib64/security/</computeroutput> on 64-bit ones. Please refer to your
+ guest OS documentation for the correct PAM module directory.</para>
+
+ <para>For example, to use <computeroutput>pam_vbox.so</computeroutput>
+ with a Ubuntu Linux guest OS and GDM (the GNOME Desktop Manager) to
+ logon users automatically with the credentials passed by the host, the
+ guest OS has to be configured like the following:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>The <computeroutput>pam_vbox.so</computeroutput> module has to
+ be copied to the security modules directory, in this case it is
+ <computeroutput>/lib/security</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para>Edit the PAM configuration file for GDM found at
+ <computeroutput>/etc/pam.d/gdm</computeroutput>, adding the line
+ <computeroutput>auth requisite pam_vbox.so</computeroutput> at the
+ top. Additionaly, in most Linux distributions there is a file called
+ <computeroutput>/etc/pam.d/common-auth</computeroutput>. This file
+ is included in many other services (like the GDM file mentioned
+ above). There you also have to add the line <computeroutput>auth
+ requisite pam_vbox.so</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para>If authentication against the shadow database using
+ <computeroutput>pam_unix.so</computeroutput> or
+ <computeroutput>pam_unix2.so</computeroutput> is desired, the
+ argument <computeroutput>try_first_pass</computeroutput> for
+ <computeroutput>pam_unix.so</computeroutput> or
+ <computeroutput>use_first_pass</computeroutput> for
+ <computeroutput>pam_unix2.so</computeroutput> is needed
+ in order to pass the credentials from the VirtualBox module to the
+ shadow database authentication module. For Ubuntu, this needs to be
+ added to <computeroutput>/etc/pam.d/common-auth</computeroutput>, to
+ the end of the line referencing
+ <computeroutput>pam_unix.so</computeroutput>. This argument tells
+ the PAM module to use credentials already present in the stack, i.e.
+ the ones provided by the VirtualBox PAM module.</para>
+ </listitem>
+ </orderedlist>
+
+ <para><warning>
+ <para>An incorrectly configured PAM stack can effectively prevent
+ you from logging into your guest system!</para>
+ </warning></para>
+
+ <para>To make deployment easier, you can pass the argument
+ <computeroutput>debug</computeroutput> right after the
+ <computeroutput>pam_vbox.so</computeroutput> statement. Debug log output
+ will then be recorded using syslog.</para>
+
+ <para><warning>
+ <para>At present, the GDM display manager only retrieves credentials
+ at startup so unless the credentials have been supplied to the guest
+ before GDM starts, automatic logon will not work. This limitation
+ needs to be addressed by the GDM developers or another display
+ manager must be used.</para>
+ </warning></para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Advanced configuration for Windows guests</title>
+
+ <sect2 id="sysprep">
+ <title>Automated Windows system preparation</title>
+
+ <para>Beginning with Windows NT 4.0, Microsoft offers a "system
+ preparation" tool (in short: Sysprep) to prepare a Windows system for
+ deployment or redistribution. Whereas Windows 2000 and XP ship with
+ Sysprep on the installation medium, the tool also is available for
+ download on the Microsoft web site. In a standard installation of
+ Windows Vista and 7, Sysprep is already included. Sysprep mainly
+ consists of an executable called
+ <computeroutput>sysprep.exe</computeroutput> which is invoked by the
+ user to put the Windows installation into preparation mode.</para>
+
+ <para>Starting with VirtualBox 3.2.2, the Guest Additions offer a way to
+ launch a system preparation on the guest operating system in an
+ automated way, controlled from the host system. To achieve that, see
+ <xref linkend="guestadd-guestcontrol" /> for using the feature with the
+ special identifier <computeroutput>sysprep</computeroutput> as the
+ program to execute, along with the user name
+ <computeroutput>sysprep</computeroutput> and password
+ <computeroutput>sysprep</computeroutput> for the credentials. Sysprep
+ then gets launched with the required system rights.</para>
+
+ <note>
+ <para>Specifying the location of "sysprep.exe" is <emphasis
+ role="bold">not possible</emphasis> -- instead the following paths are
+ used (based on the operating system): <itemizedlist>
+ <listitem>
+ <para><computeroutput>C:\sysprep\sysprep.exe</computeroutput>
+ for Windows NT 4.0, 2000 and XP</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>%WINDIR%\System32\Sysprep\sysprep.exe</computeroutput>
+ for Windows Vista, 2008 Server and 7</para>
+ </listitem>
+ </itemizedlist> The Guest Additions will automatically use the
+ appropriate path to execute the system preparation tool.</para>
+ </note>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Advanced configuration for Linux and Solaris guests</title>
+
+ <sect2>
+ <title>Manual setup of selected guest services on Linux</title>
+
+ <para>The VirtualBox Guest Additions contain several different
+ drivers. If for any reason you do not wish to set them all up, you can
+ install the Guest Additions using the following command:</para>
+
+ <screen> sh ./VBoxLinuxAdditions.run no_setup</screen>
+
+ <para>After this, you will need to at least compile the kernel modules
+ by running the command <screen> /usr/lib/VBoxGuestAdditions/vboxadd setup</screen>
+ as root (you will need to replace <emphasis>lib</emphasis> by
+ <emphasis>lib64</emphasis> on some 64bit guests), and on older guests
+ without the udev service you will need to add the
+ <emphasis>vboxadd</emphasis> service to the default runlevel to ensure
+ that the modules get loaded.</para>
+
+ <para>To setup the time synchronization service, run the command
+ <screen> /usr/lib/VBoxGuestAdditions/vboxadd-service setup</screen>
+ and add the service vboxadd-service to the default runlevel. To set up
+ the X11 and OpenGL part of the Guest Additions, run the command
+ <screen> /usr/lib/VBoxGuestAdditions/vboxadd-x11 setup</screen> (you
+ do not need to enable any services for this).</para>
+
+ <para>To recompile the guest kernel modules, use this command:
+ <screen> /usr/lib/VBoxGuestAdditions/vboxadd setup</screen> After
+ compilation you should reboot your guest to ensure that the new
+ modules are actually used.</para>
+ </sect2>
+
+ <sect2 id="guestxorgsetup">
+ <title>Guest graphics and mouse driver setup in depth</title>
+
+ <para>This section assumes that you are familiar with configuring
+ the X.Org server using xorg.conf and optionally the newer mechanisms
+ using hal or udev and xorg.conf.d. If not you can learn about
+ them by studying the documentation which comes with X.Org.</para>
+
+ <para>The VirtualBox Guest Additions come with drivers for X.Org
+ versions
+ <itemizedlist>
+ <listitem>X11R6.8/X11R6.9 and XFree86 version 4.3
+ (vboxvideo_drv_68.o and vboxmouse_drv_68.o)</listitem>
+ <listitem>X11R7.0 (vboxvideo_drv_70.so and vboxmouse_drv_70.so)
+ </listitem>
+ <listitem>X11R7.1 (vboxvideo_drv_71.so and vboxmouse_drv_71.so)
+ </listitem>
+ <listitem>X.Org Server versions 1.3 and later (vboxvideo_drv_13.so
+ and vboxmouse_drv_13.so and so on).</listitem>
+ </itemizedlist>
+ By default these drivers can be found in the directory</para>
+ <para>
+ <computeroutput>/opt/VBoxGuestAdditions-&lt;version&gt;/lib/VBoxGuestAdditions</computeroutput>
+ </para>
+ <para>and the correct versions for the X server are symbolically linked
+ into the X.Org driver directories.</para>
+
+ <para>For graphics integration to work correctly, the X server must
+ load the vboxvideo driver (many recent X server versions look for it
+ automatically if they see that they are running in VirtualBox) and for
+ an optimal user experience the guest kernel drivers must be loaded and
+ the Guest Additions tool VBoxClient must be running as a client in the
+ X session. For mouse integration to work correctly, the guest kernel
+ drivers must be loaded and in addition, in X servers from X.Org X11R6.8
+ to X11R7.1 and in XFree86 version 4.3 the right vboxmouse driver must
+ be loaded and associated with /dev/mouse or /dev/psaux; in X.Org server
+ 1.3 or later a driver for a PS/2 mouse must be loaded and the right
+ vboxmouse driver must be associated with /dev/vboxguest.</para>
+
+ <para>The VirtualBox guest graphics driver can use any graphics
+ configuration for which the virtual resolution fits into the virtual
+ video memory allocated to the virtual machine (minus a small amount
+ used by the guest driver) as described in
+ <xref linkend="settings-display" />. The driver will offer a range of
+ standard modes at least up to the default guest resolution for all
+ active guest monitors. In X.Org Server 1.3 and later the default mode
+ can be changed by setting the output property VBOX_MODE to
+ "&lt;width&gt;x&lt;height&gt;" for any guest monitor. When VBoxClient
+ and the kernel drivers are active this is done automatically when the
+ host requests a mode change. The driver for older versions can only
+ receive new modes by querying the host for requests at regular
+ intervals.</para>
+
+ <para>With pre-1.3 X Servers you can also add your own modes to the X
+ server configuration file. You simply need to add them to the "Modes"
+ list in the "Display" subsection of the "Screen" section. For example,
+ the section shown here has a custom 2048x800 resolution mode added:
+ </para>
+
+ <screen>Section "Screen"
+ Identifier "Default Screen"
+ Device "VirtualBox graphics card"
+ Monitor "Generic Monitor"
+ DefaultDepth 24
+ SubSection "Display"
+ Depth 24
+ Modes "2048x800" "800x600" "640x480"
+ EndSubSection
+EndSection</screen>
+ </sect2>
+ </sect1>
+
+ <sect1 id="cpuhotplug">
+ <title>CPU hot-plugging</title>
+
+ <para>With virtual machines running modern server operating systems,
+ VirtualBox supports CPU hot-plugging.<footnote>
+ <para>Support for CPU hot-plugging was introduced with VirtualBox
+ 3.2.</para>
+ </footnote> Whereas on a physical computer this would mean that a CPU
+ can be added or removed while the machine is running, VirtualBox supports
+ adding and removing virtual CPUs while a virtual machine is
+ running.</para>
+
+ <para>CPU hot-plugging works only with guest operating systems that
+ support it. So far this applies only to Linux and Windows Server 2008 x64
+ Data Center Edition. Windows supports only hot-add while Linux supports
+ hot-add and hot-remove but to use this feature with more than 8 CPUs a
+ 64bit Linux guest is required.</para>
+
+ <para>At this time, CPU hot-plugging requires using the VBoxManage
+ command-line interface. First, hot-plugging needs to be enabled for a
+ virtual machine:<screen>VBoxManage modifyvm "VM name" --cpuhotplug on</screen></para>
+
+ <para>After that, the --cpus option specifies the maximum number of CPUs
+ that the virtual machine can have:<screen>VBoxManage modifyvm "VM name" --cpus 8</screen>When
+ the VM is off, you can then add and remove virtual CPUs with the modifyvm
+ --plugcpu and --unplugcpu subcommands, which take the number of the
+ virtual CPU as a parameter, like this:<screen>VBoxManage modifyvm "VM name" --plugcpu 3
+VBoxManage modifyvm "VM name" --unplugcpu 3</screen>Note that CPU 0 can never
+ be removed.</para>
+
+ <para>While the VM is running, CPUs can be added with the
+ <computeroutput>controlvm plugcpu/unplugcpu</computeroutput> commands
+ instead:<screen>VBoxManage controlvm "VM name" plugcpu 3
+VBoxManage controlvm "VM name" unplugcpu 3</screen></para>
+
+ <para>See <xref linkend="vboxmanage-modifyvm" /> and <xref
+ linkend="vboxmanage-controlvm" /> for details.</para>
+
+ <para>With Linux guests, the following applies: To prevent ejection while
+ the CPU is still used it has to be ejected from within the guest before.
+ The Linux Guest Additions contain a service which receives hot-remove
+ events and ejects the CPU. Also, after a CPU is added to the VM it is not
+ automatically used by Linux. The Linux Guest Additions service will take
+ care of that if installed. If not a CPU can be started with the following
+ command:<screen>echo 1 &gt; /sys/devices/system/cpu/cpu&lt;id&gt;/online</screen></para>
+ </sect1>
+
+ <sect1 id="pcipassthrough">
+ <title>PCI passthrough</title>
+
+ <para>When running on Linux hosts, with a recent enough kernel (at least version
+ <computeroutput>2.6.31</computeroutput>) experimental host PCI devices
+ passthrough is available.<footnote>
+ <para>Experimental support for PCI passthrough was introduced with VirtualBox
+ 4.1.</para>
+ </footnote></para>
+
+ <note><para>The PCI passthrough module is shipped as a VirtualBox extension
+ package, which must be installed separately. See <xref
+ linkend="intro-installing" /> for more information.</para>
+ </note>
+
+ <para>Essentially this feature allows to directly use physical PCI
+ devices on the host by the guest even if host doesn't have drivers for this
+ particular device. Both, regular PCI and some PCI Express cards, are
+ supported. AGP and certain PCI Express cards are not supported at the
+ moment if they rely on GART (Graphics Address Remapping Table) unit
+ programming for texture management as it does rather nontrivial
+ operations with pages remapping interfering with IOMMU.
+ This limitation may be lifted in future releases.</para>
+
+ <para>To be fully functional, PCI passthrough support in VirtualBox depends upon
+ an IOMMU hardware unit which is not yet too widely available. If the device uses
+ bus mastering (i.e. it performs DMA to the OS memory on its
+ own), then an IOMMU is required, otherwise such DMA transactions may write to
+ the wrong physical memory address as the device DMA engine is programmed using
+ a device-specific protocol to perform memory transactions. The IOMMU functions
+ as translation unit mapping physical memory access requests from the device
+ using knowledge of the guest physical address to host physical addresses translation
+ rules.</para>
+
+ <para>Intel's solution for IOMMU is marketed as "Intel Virtualization Technology for
+ Directed I/O" (VT-d), and AMD's one is called AMD-Vi. So please check if your
+ motherboard datasheet has appropriate technology.
+ Even if your hardware doesn't have a IOMMU, certain PCI cards may work
+ (such as serial PCI adapters), but the guest will show a warning on boot and
+ the VM execution will terminate if the guest driver will attempt to enable card
+ bus mastering.</para>
+
+ <para>
+ It is very common that the BIOS or the host OS disables the IOMMU by default.
+ So before any attempt to use it please make sure that
+ <orderedlist>
+ <listitem>
+ <para>Your motherboard has an IOMMU unit.</para>
+ </listitem>
+ <listitem>
+ <para>Your CPU supports the IOMMU.</para>
+ </listitem>
+ <listitem>
+ <para>The IOMMU is enabled in the BIOS.</para>
+ </listitem>
+ <listitem>
+ <para>The VM must run with VT-x/AMD-V and nested paging enabled.</para>
+ </listitem>
+ <listitem>
+ <para>Your Linux kernel was compiled with IOMMU support (including DMA
+ remapping, see <computeroutput>CONFIG_DMAR</computeroutput> kernel
+ compilation option). The PCI stub driver
+ (<computeroutput>CONFIG_PCI_STUB</computeroutput>) is required
+ as well.</para>
+ </listitem>
+ <listitem>
+ <para>Your Linux kernel recognizes and uses the IOMMU unit
+ (<computeroutput>intel_iommu=on</computeroutput>
+ boot option could be needed). Search for DMAR and PCI-DMA in kernel boot
+ log.</para>
+ </listitem>
+ </orderedlist>
+ </para>
+
+ <para>Once you made sure that the host kernel supports the IOMMU, the next step is
+ to select the PCI card and attach it to the guest. To figure out the list of
+ available PCI devices, use the <computeroutput>lspci</computeroutput> command.
+ The output will look like this
+ <screen>
+ 01:00.0 VGA compatible controller: ATI Technologies Inc Cedar PRO [Radeon HD 5450]
+ 01:00.1 Audio device: ATI Technologies Inc Manhattan HDMI Audio [Mobility Radeon HD 5000 Series]
+ 02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 03)
+ 03:00.0 SATA controller: JMicron Technology Corp. JMB362/JMB363 Serial ATA Controller (rev 03)
+ 03:00.1 IDE interface: JMicron Technology Corp. JMB362/JMB363 Serial ATA Controller (rev 03)
+ 06:00.0 VGA compatible controller: nVidia Corporation G86 [GeForce 8500 GT] (rev a1)
+ </screen>
+ The first column is a PCI address (in format <computeroutput>bus:device.function</computeroutput>).
+ This address could be used to identify the device for further operations.
+ For example, to attach a PCI network controller on the system listed above
+ to the second PCI bus in the guest, as device 5, function 0, use the following command:
+ <screen>VBoxManage modifyvm "VM name" --pciattach 02:00.0@01:05.0</screen>
+ To detach same device, use
+ <screen>VBoxManage modifyvm "VM name" --pcidetach 02:00.0</screen>
+ Please note that both host and guest could freely assign a different PCI address to
+ the card attached during runtime, so those addresses only apply to the address of
+ the card at the moment of attachment (host), and during BIOS PCI init (guest).
+ </para>
+
+ <para>If the virtual machine has a PCI device attached, certain limitations apply:
+ <orderedlist>
+ <listitem>
+ Only PCI cards with non-shared interrupts (such as using MSI on host) are
+ supported at the moment.
+ </listitem>
+ <listitem>
+ No guest state can be reliably saved/restored (as the internal state of the PCI
+ card could not be retrieved).
+ </listitem>
+ <listitem>
+ Teleportation (live migration) doesn't work (for the same reason).
+ </listitem>
+ <listitem>
+ No lazy physical memory allocation. The host will preallocate the whole RAM
+ required for the VM on startup (as we cannot catch physical hardware accesses
+ to the physical memory).
+ </listitem>
+ </orderedlist>
+ </para>
+
+ </sect1>
+
+
+ <sect1>
+ <title>Advanced display configuration</title>
+
+ <sect2>
+ <title>Custom VESA resolutions</title>
+
+ <para>Apart from the standard VESA resolutions, the VirtualBox VESA BIOS
+ allows you to add up to 16 custom video modes which will be reported to
+ the guest operating system. When using Windows guests with the
+ VirtualBox Guest Additions, a custom graphics driver will be used
+ instead of the fallback VESA solution so this information does not
+ apply.</para>
+
+ <para>Additional video modes can be configured for each VM using the
+ extra data facility. The extra data key is called
+ <literal>CustomVideoMode&lt;x&gt;</literal> with <literal>x</literal>
+ being a number from 1 to 16. Please note that modes will be read from 1
+ until either the following number is not defined or 16 is reached. The
+ following example adds a video mode that corresponds to the native
+ display resolution of many notebook computers:</para>
+
+ <screen>VBoxManage setextradata "VM name" "CustomVideoMode1" "1400x1050x16"</screen>
+
+ <para>The VESA mode IDs for custom video modes start at
+ <literal>0x160</literal>. In order to use the above defined custom video
+ mode, the following command line has be supplied to Linux:</para>
+
+ <screen>vga = 0x200 | 0x160
+vga = 864</screen>
+
+ <para>For guest operating systems with VirtualBox Guest Additions, a
+ custom video mode can be set using the video mode hint feature.</para>
+ </sect2>
+
+ <sect2>
+ <title>Configuring the maximum resolution of guests when using the
+ graphical frontend</title>
+
+ <para>When guest systems with the Guest Additions installed are started
+ using the graphical frontend (the normal VirtualBox application), they
+ will not be allowed to use screen resolutions greater than the host's
+ screen size unless the user manually resizes them by dragging the
+ window, switching to fullscreen or seamless mode or sending a video mode
+ hint using VBoxManage. This behavior is what most users will want, but
+ if you have different needs, it is possible to change it by issuing one
+ of the following commands from the command line:</para>
+
+ <screen>VBoxManage setextradata global GUI/MaxGuestResolution any</screen>
+
+ <para>will remove all limits on guest resolutions.</para>
+
+ <screen>VBoxManage setextradata global GUI/MaxGuestResolution &gt;width,height&lt;</screen>
+
+ <para>manually specifies a maximum resolution.</para>
+
+ <screen>VBoxManage setextradata global GUI/MaxGuestResolution auto</screen>
+
+ <para>restores the default settings. Note that these settings apply
+ globally to all guest systems, not just to a single machine.</para>
+ </sect2>
+
+ </sect1>
+
+ <sect1>
+ <title>Advanced storage configuration</title>
+
+ <sect2 id="rawdisk">
+ <title>Using a raw host hard disk from a guest</title>
+
+ <para>Starting with version 1.4, as an alternative to using virtual disk
+ images (as described in detail in <xref linkend="storage" />),
+ VirtualBox can also present either entire physical hard disks or
+ selected partitions thereof as virtual disks to virtual machines.</para>
+
+ <para>With VirtualBox, this type of access is called "raw hard disk
+ access"; it allows a guest operating system to access its virtual hard
+ disk without going through the host OS file system. The actual
+ performance difference for image files vs. raw disk varies greatly
+ depending on the overhead of the host file system, whether dynamically
+ growing images are used and on host OS caching strategies. The caching
+ indirectly also affects other aspects such as failure behavior, i.e.
+ whether the virtual disk contains all data written before a host OS
+ crash. Consult your host OS documentation for details on this.</para>
+
+ <para><warning>
+ <para>Raw hard disk access is for expert users only. Incorrect use
+ or use of an outdated configuration can lead to <emphasis
+ role="bold">total loss of data </emphasis>on the physical disk. Most
+ importantly, <emphasis>do not</emphasis> attempt to boot the
+ partition with the currently running host operating system in a
+ guest. This will lead to severe data corruption.</para>
+ </warning></para>
+
+ <para>Raw hard disk access -- both for entire disks and individual
+ partitions -- is implemented as part of the VMDK image format support.
+ As a result, you will need to create a special VMDK image file which
+ defines where the data will be stored. After creating such a special
+ VMDK image, you can use it like a regular virtual disk image. For
+ example, you can use the Virtual Media Manager (<xref linkend="vdis" />)
+ or <computeroutput>VBoxManage</computeroutput> to assign the image to a
+ virtual machine.</para>
+
+ <sect3>
+ <title>Access to entire physical hard disk</title>
+
+ <para>While this variant is the simplest to set up, you must be aware
+ that this will give a guest operating system direct and full access to
+ an <emphasis>entire physical disk</emphasis>. If your
+ <emphasis>host</emphasis> operating system is also booted from this
+ disk, please take special care to not access the partition from the
+ guest at all. On the positive side, the physical disk can be
+ repartitioned in arbitrary ways without having to recreate the image
+ file that gives access to the raw disk.</para>
+
+ <para>To create an image that represents an entire physical hard disk
+ (which will not contain any actual data, as this will all be stored on
+ the physical disk), on a Linux host, use the command<screen>VBoxManage internalcommands createrawvmdk -filename /path/to/file.vmdk
+ -rawdisk /dev/sda</screen>This creates the image
+ <code>/path/to/file.vmdk</code> (must be absolute), and all data will
+ be read and written from <code>/dev/sda</code>.</para>
+
+ <para>On a Windows host, instead of the above device specification,
+ use e.g. <code>\\.\PhysicalDrive0</code>. On a Mac OS X host, instead
+ of the above device specification use e.g. <code>/dev/disk1</code>.
+ Note that on OS X you can only get access to an entire disk if no
+ volume is mounted from it.</para>
+
+ <para>Creating the image requires read/write access for the given
+ device. Read/write access is also later needed when using the image
+ from a virtual machine.</para>
+
+ <para>Just like with regular disk images, this does not automatically
+ attach the newly created image to a virtual machine. This can be done
+ with e.g. <screen>VBoxManage storageattach WindowsXP --storagectl "IDE Controller"
+ --port 0 --device 0 --type hdd --medium /path/to/file.vmdk</screen>When
+ this is done the selected virtual machine will boot from the specified
+ physical disk.</para>
+ </sect3>
+
+ <sect3>
+ <title>Access to individual physical hard disk partitions</title>
+
+ <para>This "raw partition support" is quite similar to the "full hard
+ disk" access described above. However, in this case, any partitioning
+ information will be stored inside the VMDK image, so you can e.g.
+ install a different boot loader in the virtual hard disk without
+ affecting the host's partitioning information. While the guest will be
+ able to <emphasis>see</emphasis> all partitions that exist on the
+ physical disk, access will be filtered in that reading from partitions
+ for which no access is allowed the partitions will only yield zeroes,
+ and all writes to them are ignored.</para>
+
+ <para>To create a special image for raw partition support (which will
+ contain a small amount of data, as already mentioned), on a Linux
+ host, use the command<screen>VBoxManage internalcommands createrawvmdk -filename /path/to/file.vmdk
+ -rawdisk /dev/sda -partitions 1,5</screen></para>
+
+ <para>As you can see, the command is identical to the one for "full
+ hard disk" access, except for the additional
+ <computeroutput>-partitions</computeroutput> parameter. This example
+ would create the image <code>/path/to/file.vmdk</code> (which, again,
+ must be absolute), and partitions 1 and 5 of <code>/dev/sda</code>
+ would be made accessible to the guest.</para>
+
+ <para>VirtualBox uses the same partition numbering as your Linux host.
+ As a result, the numbers given in the above example would refer to the
+ first primary partition and the first logical drive in the extended
+ partition, respectively.</para>
+
+ <para>On a Windows host, instead of the above device specification,
+ use e.g. <code>\\.\PhysicalDrive0</code>. On a Mac OS X host, instead
+ of the above device specification use e.g. <code>/dev/disk1</code>.
+ Note that on OS X you can only use partitions which are not mounted
+ (eject the respective volume first). Partition numbers are the same on
+ Linux, Windows and Mac OS X hosts.</para>
+
+ <para>The numbers for the list of partitions can be taken from the
+ output of<screen>VBoxManage internalcommands listpartitions -rawdisk /dev/sda</screen>The
+ output lists the partition types and sizes to give the user enough
+ information to identify the partitions necessary for the guest.</para>
+
+ <para>Images which give access to individual partitions are specific
+ to a particular host disk setup. You cannot transfer these images to
+ another host; also, whenever the host partitioning changes, the image
+ <emphasis>must be recreated</emphasis>.</para>
+
+ <para>Creating the image requires read/write access for the given
+ device. Read/write access is also later needed when using the image
+ from a virtual machine. If this is not feasible, there is a special
+ variant for raw partition access (currently only available on Linux
+ hosts) that avoids having to give the current user access to the
+ entire disk. To set up such an image, use<screen>VBoxManage internalcommands createrawvmdk -filename /path/to/file.vmdk
+ -rawdisk /dev/sda -partitions 1,5 -relative</screen>When used from a
+ virtual machine, the image will then refer not to the entire disk, but
+ only to the individual partitions (in the example
+ <code>/dev/sda1</code> and <code>/dev/sda5</code>). As a consequence,
+ read/write access is only required for the affected partitions, not
+ for the entire disk. During creation however, read-only access to the
+ entire disk is required to obtain the partitioning information.</para>
+
+ <para>In some configurations it may be necessary to change the MBR
+ code of the created image, e.g. to replace the Linux boot loader that
+ is used on the host by another boot loader. This allows e.g. the guest
+ to boot directly to Windows, while the host boots Linux from the
+ "same" disk. For this purpose the
+ <computeroutput>-mbr</computeroutput> parameter is provided. It
+ specifies a file name from which to take the MBR code. The partition
+ table is not modified at all, so a MBR file from a system with totally
+ different partitioning can be used. An example of this is<screen>VBoxManage internalcommands createrawvmdk -filename /path/to/file.vmdk
+ -rawdisk /dev/sda -partitions 1,5 -mbr winxp.mbr</screen>The modified
+ MBR will be stored inside the image, not on the host disk.</para>
+
+ <para>The created image can be attached to a storage controller in
+ a VM configuration as usual.</para>
+ </sect3>
+ </sect2>
+
+ <sect2 id="changevpd">
+ <title>Configuring the hard disk vendor product data (VPD)</title>
+
+ <para>VirtualBox reports vendor product data for its virtual hard disks
+ which consist of hard disk serial number, firmware revision and model
+ number. These can be changed using the following commands:</para>
+
+ <screen>VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/ahci/0/Config/Port0/SerialNumber" "serial"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/ahci/0/Config/Port0/FirmwareRevision" "firmware"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/ahci/0/Config/Port0/ModelNumber" "model"</screen>
+
+ <para>The serial number is a 20 byte alphanumeric string, the firmware
+ revision an 8 byte alphanumeric string and the model number a 40 byte
+ alphanumeric string. Instead of "Port0" (referring to the first port),
+ specify the desired SATA hard disk port.</para>
+
+ <para>The above commands apply to virtual machines with an AHCI (SATA)
+ controller. The commands for virtual machines with an IDE controller
+ are:</para>
+
+ <screen>VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/piix3ide/0/Config/PrimaryMaster/SerialNumber" "serial"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/piix3ide/0/Config/PrimaryMaster/FirmwareRevision" "firmware"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/piix3ide/0/Config/PrimaryMaster/ModelNumber" "model"</screen>
+
+ <para>For hard disks it's also possible (experimental!) to mark the drive
+ as having a non-rotational medium with:</para>
+
+ <screen>VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/ahci/0/Config/Port0/NonRotational" "1"</screen>
+
+ <para>Additional three parameters are needed for CD/DVD drives to report
+ the vendor product data:</para>
+
+ <screen>VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/ahci/0/Config/Port0/ATAPIVendorId" "vendor"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/ahci/0/Config/Port0/ATAPIProductId" "product"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/ahci/0/Config/Port0/ATAPIRevision" "revision"</screen>
+
+ <para>The vendor id is an 8 byte alphanumeric string, the product id an
+ 16 byte alphanumeric string and the revision a 4 byte alphanumeric
+ string. Instead of "Port0" (referring to the first port), specify the
+ desired SATA hard disk port.</para>
+ </sect2>
+
+ <sect2>
+ <title id="iscsi-intnet">Accès à des cibles iSCSI à travers le réseau interne</title>
+
+ <para>En tant que fonctionnalité expérimentale, VirtualBox permet l'accès
+ à une cible iSCSI en exécutant dans une machine virtuelle ce qui est
+ configuré pour utiliser le mode Réseau interne (comme décrit au <xref
+ linkend="network_internal" />). Le paramétrage de la machine virtuelle qui
+ utilise une telle cible iSCSI se fait comme décrit ci-dessous. La seule
+ différence est que l'adresse IP de la cible doit être spécifiée comme
+ adresse IP numérique.</para>
+
+ <para>La pile IP qui accède au réseau interne doit être configurée dans la
+ machine virtuelle qui accède à la cible iSCSI. Vous devez choisir une
+ adresse IP statique libre et une adresse MAC non utilisée par d'autres
+ machines virtuelles. Dans l'exemple ci-dessous, adaptez le nom de la
+ machine virtuelle, l'adresse MAC et la configuration IP et le nom du
+ réseau interne (« MyIntNet ») selon vos besoins. Vous devez exécuter les
+ sept commandes suivantes :<screen>VBoxManage setextradata "nom VM" VBoxInternal/Devices/IntNetIP/0/Trusted 1
+VBoxManage setextradata "nom VM" VBoxInternal/Devices/IntNetIP/0/Config/MAC 08:00:27:01:02:0f
+VBoxManage setextradata "nom VM" VBoxInternal/Devices/IntNetIP/0/Config/IP 10.0.9.1
+VBoxManage setextradata "nom VM" VBoxInternal/Devices/IntNetIP/0/Config/Netmask 255.255.255.0
+VBoxManage setextradata "nom VM" VBoxInternal/Devices/IntNetIP/0/LUN#0/Driver IntNet
+VBoxManage setextradata "nom VM" VBoxInternal/Devices/IntNetIP/0/LUN#0/Config/Network MyIntNet
+VBoxManage setextradata "nom VM" VBoxInternal/Devices/IntNetIP/0/LUN#0/Config/IsService 1</screen></para>
+
+ <para>Enfin, le disque iSCSI doit être enregistré avec l'option
+ <code>--intnet</code> pour dire à l'initiateur iSCSI d'utiliser le réseau
+ interne :<screen>VBoxManage addiscsidisk --server 10.0.9.30 --target iqn.2008-12.com.sun:sampletarget --intnet</screen></para>
+
+ <para>L'adresse cible doit être spécifiée en tant qu'adresse IP numérique
+ vu qu'il n'y a pas de résolution DNS pour le réseau interne.</para>
+
+ <para>La machine virtuelle avec la cible iSCSI devrait être démarrée avant
+ que la machine qui l'utilise ne soit allumée. Si une machine virtuelle
+ utilisant un disque iSCSI est démarrée sans que la cible iSCSI ne soit
+ allumée, cela peut prendre jusqu'à 200 secondes pour détecter cette
+ situation. La VM échouera pour s'allumer.</para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Launching more than 120 VMs on Solaris hosts</title>
+
+ <para>Solaris hosts have a fixed number of IPC semaphores IDs per process
+ preventing users from starting more than 120 VMs. While trying to launch
+ more VMs you would be shown a "Cannot create IPC semaphore" error.</para>
+
+ <para>In order to run more VMs, you will need to bump the semaphore ID
+ limit of the VBoxSVC process. Execute as root the
+ <computeroutput>prctl</computeroutput> command as shown below. The process
+ ID of VBoxSVC can be obtained using the
+ <computeroutput>ps</computeroutput> list command.</para>
+
+ <para><screen>prctl -r -n project.max-sem-ids -v 2048 &lt;pid-of-VBoxSVC&gt;</screen></para>
+ </sect1>
+
+ <sect1>
+ <title>Legacy commands for using serial ports</title>
+
+ <para>Starting with version 1.4, VirtualBox provided support for virtual
+ serial ports, which, at the time, was rather complicated to set up with a
+ sequence of <computeroutput>VBoxManage setextradata</computeroutput>
+ statements. Since version 1.5, that way of setting up serial ports is no
+ longer necessary and <emphasis>deprecated.</emphasis> To set up virtual
+ serial ports, use the methods now described in <xref
+ linkend="serialports" />.<note>
+ <para>For backwards compatibility, the old
+ <computeroutput>setextradata</computeroutput> statements, whose
+ description is retained below from the old version of the manual, take
+ <emphasis>precedence</emphasis> over the new way of configuring serial
+ ports. As a result, if configuring serial ports the new way doesn't
+ work, make sure the VM in question does not have old configuration
+ data such as below still active.</para>
+ </note></para>
+
+ <para>The old sequence of configuring a serial port used the following 6
+ commands:</para>
+
+ <screen>VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/serial/0/Config/IRQ" 4
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/serial/0/Config/IOBase" 0x3f8
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/serial/0/LUN#0/Driver" Char
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/serial/0/LUN#0/AttachedDriver/Driver" NamedPipe
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/serial/0/LUN#0/AttachedDriver/Config/Location" "\\.\pipe\vboxCOM1"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/serial/0/LUN#0/AttachedDriver/Config/IsServer" 1</screen>
+
+ <para>This sets up a serial port in the guest with the default settings
+ for COM1 (IRQ 4, I/O address 0x3f8) and the
+ <computeroutput>Location</computeroutput> setting assumes that this
+ configuration is used on a Windows host, because the Windows named pipe
+ syntax is used. Keep in mind that on Windows hosts a named pipe must
+ always start with <computeroutput>\\.\pipe\</computeroutput>. On Linux the
+ same config settings apply, except that the path name for the
+ <computeroutput>Location</computeroutput> can be chosen more freely. Local
+ domain sockets can be placed anywhere, provided the user running
+ VirtualBox has the permission to create a new file in the directory. The
+ final command above defines that VirtualBox acts as a server, i.e. it
+ creates the named pipe itself instead of connecting to an already existing
+ one.</para>
+ </sect1>
+
+ <sect1 id="changenat">
+ <title>Fine-tuning the VirtualBox NAT engine</title>
+
+ <sect2>
+ <title>Configuring the address of a NAT network interface</title>
+
+ <para>In NAT mode, the guest network interface is assigned to the IPv4
+ range <computeroutput>10.0.x.0/24</computeroutput> by default where
+ <computeroutput>x</computeroutput> corresponds to the instance of the
+ NAT interface +2. So <computeroutput>x</computeroutput> is 2 when there
+ is only one NAT instance active. In that case the guest is assigned to
+ the address <computeroutput>10.0.2.15</computeroutput>, the gateway is
+ set to <computeroutput>10.0.2.2</computeroutput> and the name server can
+ be found at <computeroutput>10.0.2.3</computeroutput>.</para>
+
+ <para>If, for any reason, the NAT network needs to be changed, this can
+ be achieved with the following command:</para>
+
+ <screen>VBoxManage modifyvm "VM name" --natnet1 "192.168/16"</screen>
+
+ <para>This command would reserve the network addresses from
+ <computeroutput>192.168.0.0</computeroutput> to
+ <computeroutput>192.168.254.254</computeroutput> for the first NAT
+ network instance of "VM name". The guest IP would be assigned to
+ <computeroutput>192.168.0.15</computeroutput> and the default gateway
+ could be found at <computeroutput>192.168.0.2</computeroutput>.</para>
+ </sect2>
+
+ <sect2 id="nat-adv-tftp">
+ <title>Configuring the boot server (next server) of a NAT network
+ interface</title>
+
+ <para>For network booting in NAT mode, by default VirtualBox uses a
+ built-in TFTP server at the IP address 10.0.2.3. This default behavior
+ should work fine for typical remote-booting scenarios. However, it is
+ possible to change the boot server IP and the location of the boot image
+ with the following commands: <screen>VBoxManage modifyvm "VM name" --nattftpserver1 10.0.2.2
+VBoxManage modifyvm "VM name" --nattftpfile1 /srv/tftp/boot/MyPXEBoot.pxe</screen></para>
+ </sect2>
+
+ <sect2 id="nat-adv-settings">
+ <title>Tuning TCP/IP buffers for NAT</title>
+
+ <para>The VirtualBox NAT stack performance is often determined by its
+ interaction with the host's TCP/IP stack and the size of several buffers
+ (<computeroutput>SO_RCVBUF</computeroutput> and
+ <computeroutput>SO_SNDBUF</computeroutput>). For certain setups users
+ might want to adjust the buffer size for a better performance. This can
+ by achieved using the following commands (values are in kilobytes and
+ can range from 8 to 1024): <screen>VBoxManage modifyvm "VM name" --natsettings1 16000,128,128,0,0</screen>
+ This example illustrates tuning the NAT settings. The first parameter is
+ the MTU, then the size of the socket's send buffer and the size of the
+ socket's receive buffer, the initial size of the TCP send window, and
+ lastly the initial size of the TCP receive window. Note that specifying
+ zero means fallback to the default value.</para>
+
+ <para>Each of these buffers has a default size of 64KB and default MTU
+ is 1500.</para>
+ </sect2>
+
+ <sect2>
+ <title>Binding NAT sockets to a specific interface</title>
+
+ <para>By default, VirtualBox's NAT engine will route TCP/IP packets
+ through the default interface assigned by the host's TCP/IP stack. (The
+ technical reason for this is that the NAT engine uses sockets for
+ communication.) If, for some reason, you want to change this behavior,
+ you can tell the NAT engine to bind to a particular IP address instead.
+ Use the following command: <screen>VBoxManage modifyvm "VM name" --natbindip1 "10.45.0.2"</screen></para>
+
+ <para>After this, all outgoing traffic will be sent through the
+ interface with the IP address 10.45.0.2. Please make sure that this
+ interface is up and running prior to this assignment.</para>
+ </sect2>
+
+ <sect2 id="nat-adv-dns">
+ <title>Enabling DNS proxy in NAT mode</title>
+
+ <para>The NAT engine by default offers the same DNS servers to the guest
+ that are configured on the host. In some scenarios, it can be desirable
+ to hide the DNS server IPs from the guest, for example when this
+ information can change on the host due to expiring DHCP leases. In this
+ case, you can tell the NAT engine to act as DNS proxy using the
+ following command: <screen>VBoxManage modifyvm "VM name" --natdnsproxy1 on</screen></para>
+ </sect2>
+
+ <sect2 id="nat_host_resolver_proxy">
+ <title>Using the host's resolver as a DNS proxy in NAT mode</title>
+
+ <para>For resolving network names, the DHCP server of the NAT engine
+ offers a list of registered DNS servers of the host. If for some reason
+ you need to hide this DNS server list and use the host's resolver
+ settings, thereby forcing the VirtualBox NAT engine to intercept DNS
+ requests and forward them to host's resolver, use the following command:
+ <screen>VBoxManage modifyvm "VM name" --natdnshostresolver1 on</screen>
+ Note that this setting is similar to the DNS proxy mode, however whereas
+ the proxy mode just forwards DNS requests to the appropriate servers,
+ the resolver mode will interpret the DNS requests and use the host's DNS
+ API to query the information and return it to the guest.</para>
+ </sect2>
+
+ <sect2 id="nat-adv-alias">
+ <title>Configuring aliasing of the NAT engine</title>
+
+ <para>By default, the NAT core uses aliasing and uses random ports when
+ generating an alias for a connection. This works well for the most
+ protocols like SSH, FTP and so on. Though some protocols might need a
+ more transparent behavior or may depend on the real port number the
+ packet was sent from. It is possible to change the NAT mode via the
+ VBoxManage frontend with the following commands:
+ <screen>VBoxManage modifyvm "VM name" --nataliasmode1 proxyonly</screen>
+ and <screen>VBoxManage modifyvm "Linux Guest" --nataliasmode1 sameports</screen>
+ The first example disables aliasing and switches NAT into transparent
+ mode, the second example enforces preserving of port values. These modes
+ can be combined if necessary.</para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="changedmi">
+ <title>Configuring the BIOS DMI information</title>
+
+ <para>The DMI data VirtualBox provides to guests can be changed for a
+ specific VM. Use the following commands to configure the DMI BIOS
+ information:</para>
+
+ <screen>VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSVendor" "BIOS Vendor"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSVersion" "BIOS Version"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSReleaseDate" "BIOS Release Date"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSReleaseMajor" 1
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSReleaseMinor" 2
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSFirmwareMajor" 3
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSFirmwareMinor" 4
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiSystemVendor" "System Vendor"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiSystemProduct" "System Product"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiSystemVersion" "System Version"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiSystemSerial" "System Serial"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiSystemSKU" "System SKU"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiSystemFamily" "System Family"
+VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiSystemUuid"
+ "9852bf98-b83c-49db-a8de-182c42c7226b"</screen>
+
+ <para>If a DMI string is not set, the default value of VirtualBox is used.
+ To set an empty string use
+ <computeroutput>"&lt;EMPTY&gt;"</computeroutput>.</para>
+
+ <para>Note that in the above list, all quoted parameters (DmiBIOSVendor,
+ DmiBIOSVersion but not DmiBIOSReleaseMajor) are expected to be strings. If
+ such a string is a valid number, the parameter is treated as number and
+ the VM will most probably refuse to start with an
+ <computeroutput>VERR_CFGM_NOT_STRING</computeroutput> error. In that case,
+ use <computeroutput>"string:&lt;value&gt;"</computeroutput>, for instance
+ <screen>VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/pcbios/0/Config/DmiSystemSerial" "string:1234"</screen></para>
+
+ <para>Changing this information can be necessary to provide the DMI
+ information of the host to the guest to prevent Windows from asking for a
+ new product key. On Linux hosts the DMI BIOS information can be obtained
+ with <screen>dmidecode -t0</screen>and the DMI system information can be
+ obtained with <screen>dmidecode -t1</screen></para>
+ </sect1>
+
+ <sect1>
+ <title>Fine-tuning timers and time synchronization</title>
+
+ <sect2 id="changetscmode">
+ <title>Configuring the guest time stamp counter (TSC) to reflect guest
+ execution</title>
+
+ <para>By default, VirtualBox keeps all sources of time visible to the
+ guest synchronized to a single time source, the monotonic host time.
+ This reflects the assumptions of many guest operating systems, which
+ expect all time sources to reflect "wall clock" time. In special
+ circumstances it may be useful however to make the TSC (time stamp
+ counter) in the guest reflect the time actually spent executing the
+ guest.</para>
+
+ <para>This special TSC handling mode can be enabled on a per-VM basis,
+ and for best results must be used only in combination with hardware
+ virtualization. To enable this mode use the following command:</para>
+
+ <screen>VBoxManage setextradata "VM name" "VBoxInternal/TM/TSCTiedToExecution" 1</screen>
+
+ <para>To revert to the default TSC handling mode use:</para>
+
+ <screen>VBoxManage setextradata "VM name" "VBoxInternal/TM/TSCTiedToExecution"</screen>
+
+ <para>Note that if you use the special TSC handling mode with a guest
+ operating system which is very strict about the consistency of time
+ sources you may get a warning or error message about the timing
+ inconsistency. It may also cause clocks to become unreliable with some
+ guest operating systems depending on they use the TSC.</para>
+ </sect2>
+
+ <sect2 id="warpguest">
+ <title>Accelerate or slow down the guest clock</title>
+
+ <para>For certain purposes it can be useful to accelerate or to slow
+ down the (virtual) guest clock. This can be achieved as follows:</para>
+
+ <screen>VBoxManage setextradata "VM name" "VBoxInternal/TM/WarpDrivePercentage" 200</screen>
+
+ <para>The above example will double the speed of the guest clock
+ while</para>
+
+ <screen>VBoxManage setextradata "VM name" "VBoxInternal/TM/WarpDrivePercentage" 50</screen>
+
+ <para>will halve the speed of the guest clock. Note that changing the
+ rate of the virtual clock can confuse the guest and can even lead to
+ abnormal guest behavior. For instance, a higher clock rate means shorter
+ timeouts for virtual devices with the result that a slightly increased
+ response time of a virtual device due to an increased host load can
+ cause guest failures. Note further that any time synchronization
+ mechanism will frequently try to resynchronize the guest clock with the
+ reference clock (which is the host clock if the VirtualBox Guest
+ Additions are active). Therefore any time synchronization should be
+ disabled if the rate of the guest clock is changed as described above
+ (see <xref linkend="changetimesync" />).</para>
+ </sect2>
+
+ <sect2 id="changetimesync">
+ <title>Tuning the Guest Additions time synchronization
+ parameters</title>
+
+ <para>The VirtualBox Guest Additions ensure that the guest's system time
+ is synchronized with the host time. There are several parameters which
+ can be tuned. The parameters can be set for a specific VM using the
+ following command:</para>
+
+ <screen>VBoxManage guestproperty set VM_NAME "/VirtualBox/GuestAdd/VBoxService/PARAMETER" VALUE</screen>
+
+ <para>where <computeroutput>PARAMETER</computeroutput> is one of the
+ following:</para>
+
+ <para><glosslist>
+ <glossentry>
+ <glossterm><computeroutput>--timesync-interval</computeroutput></glossterm>
+
+ <glossdef>
+ <para>Specifies the interval at which to synchronize the time
+ with the host. The default is 10000 ms (10 seconds).</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm><computeroutput>--timesync-min-adjust</computeroutput></glossterm>
+
+ <glossdef>
+ <para>The minimum absolute drift value measured in milliseconds
+ to make adjustments for. The default is 1000 ms on OS/2 and 100
+ ms elsewhere.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm><computeroutput>--timesync-latency-factor</computeroutput></glossterm>
+
+ <glossdef>
+ <para>The factor to multiply the time query latency with to
+ calculate the dynamic minimum adjust time. The default is 8
+ times, that means in detail: Measure the time it takes to
+ determine the host time (the guest has to contact the VM host
+ service which may take some time), multiply this value by 8 and
+ do an adjustment only if the time difference between host and
+ guest is bigger than this value. Don't do any time adjustment
+ otherwise.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm><computeroutput>--timesync-max-latency</computeroutput></glossterm>
+
+ <glossdef>
+ <para>The max host timer query latency to accept. The default is
+ 250 ms.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm><computeroutput>--timesync-set-threshold</computeroutput></glossterm>
+
+ <glossdef>
+ <para>The absolute drift threshold, given as milliseconds where
+ to start setting the time instead of trying to smoothly adjust
+ it. The default is 20 minutes.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm><computeroutput>--timesync-set-start</computeroutput></glossterm>
+
+ <glossdef>
+ <para>Set the time when starting the time sync service.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm><computeroutput>--timesync-set-on-restore
+ 0|1</computeroutput></glossterm>
+
+ <glossdef>
+ <para>Set the time after the VM was restored from a saved state
+ when passing 1 as parameter (default). Disable by passing 0. In
+ the latter case, the time will be adjusted smoothly which can
+ take a long time.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+
+ <para>All these parameters can be specified as command line parameters
+ to VBoxService as well.</para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="vboxbowsolaris11">
+ <title>Installing the alternate bridged networking driver on Solaris 11
+ hosts</title>
+
+ <para>Starting with VirtualBox 4.1, VirtualBox ships a new network filter
+ driver that utilizes Solaris 11's Crossbow functionality. By default, this
+ new driver is installed for Solaris 11 hosts (builds 159 and above) that
+ has support for it.</para>
+
+ <para>To force installation of the older STREAMS based network filter
+ driver, execute as root execute the below command before installing the
+ VirtualBox package:</para>
+
+ <screen>touch /etc/vboxinst_vboxflt</screen>
+
+ <para>To force installation of the Crossbow based network filter
+ driver, execute as root the below command before installing the VirtualBox
+ package:</para>
+
+ <screen>touch /etc/vboxinst_vboxbow</screen>
+
+ <para>To check which driver is currently being used by VirtualBox,
+ execute:</para>
+
+ <screen>modinfo | grep vbox</screen>
+
+ <para>If the output contains "vboxbow", it indicates VirtualBox is using
+ the Crossbow network filter driver, while the name "vboxflt" indicates
+ usage of the older STREAMS network filter.</para>
+ </sect1>
+
+ <sect1 id="vboxbowvnictemplates">
+ <title>VirtualBox VNIC templates for VLANs on Solaris 11 hosts</title>
+
+ <para>VirtualBox supports VNIC (Virtual Network Interface) templates for
+ configuring VMs over VLANs.<footnote>
+ <para>Support for Crossbow based bridged networking was introduced
+ with VirtualBox 4.1 and requires Solaris 11 build 159 or above.</para>
+ </footnote> A VirtualBox VNIC template is a VNIC whose name starts with
+ "vboxvnic_template".</para>
+
+ <para>Here is an example of how to use a VNIC template to configure a VLAN
+ for VMs. Create a VirtualBox VNIC template, by executing as root:</para>
+
+ <screen>dladm create-vnic -t -l nge0 -v 23 vboxvnic_template0
+</screen>
+
+ <para>This will create a temporary VNIC over interface "nge0" with the
+ VLAN ID 23. To create VNIC templates that are persistent across host
+ reboots, skip the <computeroutput>-t</computeroutput> parameter in the
+ above command. You may check the current state of links using:</para>
+
+ <para><screen>$ dladm show-link
+LINK CLASS MTU STATE BRIDGE OVER
+nge0 phys 1500 up -- --
+nge1 phys 1500 down -- --
+vboxvnic_template0 vnic 1500 up -- nge0
+
+$ dladm show-vnic
+LINK OVER SPEED MACADDRESS MACADDRTYPE VID
+vboxvnic_template0 nge0 1000 2:8:20:25:12:75 random 23
+</screen></para>
+
+ <para>Once the VNIC template is created, all VMs that need to be part of
+ VLAN 23 over the physical interface "nge0" can use the same VNIC template.
+ This makes managing VMs on VLANs simpler and efficient, as the VLAN
+ details are not stored as part of every VM's configuration but rather
+ picked up via the VNIC template which can be modified anytime using
+ <computeroutput>dladm</computeroutput>. Apart from the VLAN ID, VNIC
+ templates can be created with additional properties such as bandwidth
+ limits, CPU fanout etc. Refer to your Solaris network documentation on how
+ to accomplish this. These additional properties, if any, are also applied
+ to VMs which use the VNIC template.</para>
+ </sect1>
+
+ <sect1 id="addhostonlysolaris">
+ <title>Configuring multiple host-only network interfaces on Solaris
+ hosts</title>
+
+ <para>By default VirtualBox provides you with one host-only network
+ interface. Adding more host-only network interfaces on Solaris hosts
+ requires manual configuration. Here's how to add two more host-only
+ network interfaces.</para>
+
+ <para>You first need to stop all running VMs and unplumb all existing
+ "vboxnet" interfaces. Execute the following commands as root:</para>
+
+ <screen>ifconfig vboxnet0 unplumb</screen>
+
+ <para>Once you make sure all vboxnet interfaces are unplumbed, remove the
+ driver using:</para>
+
+ <para><screen>rem_drv vboxnet</screen>then edit the file
+ <computeroutput>/platform/i86pc/kernel/drv/vboxnet.conf</computeroutput>
+ and add a line for the new interfaces:</para>
+
+ <para><screen>name="vboxnet" parent="pseudo" instance=1;
+name="vboxnet" parent="pseudo" instance=2;</screen>Add as many of these lines
+ as required and make sure "instance" number is uniquely incremented. Next
+ reload the vboxnet driver using:</para>
+
+ <para><screen>add_drv vboxnet</screen>Now plumb all the interfaces using
+ <computeroutput>ifconfig vboxnetX plumb</computeroutput> (where X can be
+ 0, 1 or 2 in this case) and once plumbed you can then configure the
+ interface like any other network interface.</para>
+
+ <para>To make your newly added interfaces' settings persistent across
+ reboots you will need to edit the files
+ <computeroutput>/etc/netmasks</computeroutput>, and if you are using NWAM
+ <computeroutput>/etc/nwam/llp</computeroutput> and add the appropriate
+ entries to set the netmask and static IP for each of those interfaces. The
+ VirtualBox installer only updates these configuration files for the one
+ "vboxnet0" interface it creates by default.</para>
+ </sect1>
+
+ <sect1 id="solariscodedumper">
+ <title>Configuring the VirtualBox CoreDumper on Solaris hosts</title>
+
+ <para>VirtualBox is capable of producing its own core files when things go
+ wrong and for more extensive debugging. Currently this is only available
+ on Solaris hosts.</para>
+
+ <para>The VirtualBox CoreDumper can be enabled using the following
+ command:</para>
+
+ <para><screen>VBoxManage setextradata "VM name" VBoxInternal2/CoreDumpEnabled 1</screen></para>
+
+ <para>You can specify which directory to use for core dumps with this
+ command:</para>
+
+ <para><screen>VBoxManage setextradata "VM name" VBoxInternal2/CoreDumpDir &lt;path-to-directory&gt;</screen>Make
+ sure the directory you specify is on a volume with sufficient free space
+ and that the VirtualBox process has sufficient permissions to write files
+ to this directory. If you skip this command and don't specify any core
+ dump directory, the current directory of the VirtualBox executable will be
+ used (which would most likely fail when writing cores as they are
+ protected with root permissions). It is recommended you explicity set a
+ core dump directory.</para>
+
+ <para>You must specify when the VirtualBox CoreDumper should be triggered.
+ This is done using the following commands:</para>
+
+ <para><screen>VBoxManage setextradata "VM name" VBoxInternal2/CoreDumpReplaceSystemDump 1
+VBoxManage setextradata "VM name" VBoxInternal2/CoreDumpLive 1</screen>At
+ least one of the above two commands will have to be provided if you have
+ enabled the VirtualBox CoreDumper.</para>
+
+ <para>Setting <computeroutput>CoreDumpReplaceSystemDump</computeroutput>
+ sets up the VM to override the host's core dumping mechanism and in the
+ event of any crash only the VirtualBox CoreDumper would produce the core
+ file.</para>
+
+ <para>Setting <computeroutput>CoreDumpLive</computeroutput> sets up the VM
+ to produce cores whenever the VM receives a
+ <computeroutput>SIGUSR2</computeroutput> signal. After producing the core
+ file, the VM will not be terminated and will continue to run. You can then
+ take cores of the VM process using:</para>
+
+ <para><screen>kill -s SIGUSR2 &lt;VM-process-id&gt;</screen></para>
+
+ <para>Core files produced by the VirtualBox CoreDumper are of the form
+ <computeroutput>core.vb.&lt;ProcessName&gt;.&lt;ProcessID&gt;</computeroutput>,
+ e.g.<computeroutput>core.vb.VBoxHeadless.11321</computeroutput>.</para>
+ </sect1>
+
+ <sect1 id="guitweaks">
+ <title>Locking down the VirtualBox manager GUI</title>
+
+ <para>There are several advanced customization settings for locking down
+ the VirtualBox manager, that is, removing some features that the user
+ should not see.<screen>VBoxManage setextradata global GUI/Customizations OPTION[,OPTION...]</screen></para>
+
+ <para>where <computeroutput>OPTION</computeroutput> is one of the
+ following keywords:<glosslist>
+ <glossentry>
+ <glossterm><computeroutput>noSelector</computeroutput></glossterm>
+
+ <glossdef>
+ <para>Don't allow to start the VirtualBox manager. Trying to do so
+ will show a window containing a proper error message.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm><computeroutput>noMenuBar</computeroutput></glossterm>
+
+ <glossdef>
+ <para>VM windows will not contain a menu bar.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm><computeroutput>noStatusBar</computeroutput></glossterm>
+
+ <glossdef>
+ <para>VM windows will not contain a status bar.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+
+ <para>To disable any GUI customization do <screen>VBoxManage setextradata global GUI/Customizations</screen></para>
+
+ <para>To disable all host key combinations, open the preferences and
+ change the host key to <emphasis>None</emphasis>. This might be useful
+ when using VirtualBox in a kiosk mode.</para>
+
+ <para>Furthermore, you can disallow certain actions when terminating a VM.
+ To disallow specific actions, type:</para>
+
+ <para><screen>VBoxManage setextradata "VM name" GUI/RestrictedCloseActions OPTION[,OPTION...]</screen></para>
+
+ <para>where <computeroutput>OPTION</computeroutput> is one of the
+ following keywords:<glosslist>
+ <glossentry>
+ <glossterm><computeroutput>SaveState</computeroutput></glossterm>
+
+ <glossdef>
+ <para>Don't allow the user to save the VM state when terminating
+ the VM.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm><computeroutput>Shutdown</computeroutput></glossterm>
+
+ <glossdef>
+ <para>Don't allow the user to shutdown the VM by sending the ACPI
+ power-off event to the guest.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm><computeroutput>PowerOff</computeroutput></glossterm>
+
+ <glossdef>
+ <para>Don't allow the user to power off the VM.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm><computeroutput>Restore</computeroutput></glossterm>
+
+ <glossdef>
+ <para>Don't allow the user to return to the last snapshot when
+ powering off the VM.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+
+ <para>Any combination of the above is allowed. If all options are
+ specified, the VM cannot be shut down at all.</para>
+ </sect1>
+
+ <sect1 id="vboxwebsrv-daemon">
+ <title>Starting the VirtualBox web service automatically</title>
+
+ <para>The VirtualBox web service
+ (<computeroutput>vboxwebsrv</computeroutput>) is used for controlling
+ VirtualBox remotely. It is documented in detail in the VirtualBox Software
+ Development Kit (SDK); please see <xref linkend="VirtualBoxAPI" />. As the
+ client base using this interface is growing, we added start scripts for
+ the various operation systems we support. The following describes how to
+ use them. <itemizedlist>
+ <listitem>
+ <para>On Mac OS X, launchd is used. An example configuration file
+ can be found in
+ <computeroutput>$HOME/Library/LaunchAgents/org.virtualbox.vboxwebsrv.plist</computeroutput>.
+ It can be enabled by changing the
+ <computeroutput>Disabled</computeroutput> key from
+ <computeroutput>true</computeroutput> to
+ <computeroutput>false</computeroutput>. To manually start the
+ service use the following command:
+ <screen>launchctl load ~/Library/LaunchAgents/org.virtualbox.vboxwebsrv.plist</screen>
+ For additional information on how launchd services could be
+ configured see <literal><ulink
+ url="http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPSystemStartup/BPSystemStartup.html">http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPSystemStartup/BPSystemStartup.html</ulink></literal>.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect1>
+
+ <sect1 id="vboxballoonctrl">
+ <title>Memory Ballooning Service</title>
+
+ <para>Starting with VirtualBox 4.0.8 a new host executable called
+ <computeroutput>VBoxBalloonCtrl</computeroutput> is available to
+ automatically take care of a VM's configured memory balloon
+ (see <xref linkend="guestadd-balloon" /> for an introduction to memory
+ ballooning). This is especially useful for server environments where
+ VMs may dynamically require more or less memory during runtime.</para>
+
+ <para>VBoxBalloonCtrl periodically checks a VM's current memory balloon
+ and its free guest RAM and automatically adjusts the current memory
+ balloon by inflating or deflating it accordingly. This handling only
+ applies to running VMs having recent Guest Additions installed.</para>
+
+ <para>To set up VBoxBalloonCtrl and adjust the maximum ballooning size a
+ VM can reach the following parameters will be checked in the following
+ order:
+ <itemizedlist>
+ <listitem>specified via VBoxBalloonCtrl command line parameter
+ <computeroutput>--balloon-max</computeroutput></listitem>
+ <listitem>per-VM parameter using
+ <screen>VBoxManage setextradata "VM-Name" VBoxInternal/Guest/BalloonSizeMax &lt;Size in MB&gt;</screen></listitem>
+ <listitem>global parameter for all VMs using
+ <screen>VBoxManage setextradata global VBoxInternal/Guest/BalloonSizeMax &lt;Size in MB&gt;</screen></listitem>
+ </itemizedlist>
+ <note>
+ <para>If no maximum ballooning size is specified by at least one of the
+ parameters above, no ballooning will be performed at all.</para>
+ </note>
+ </para>
+
+ <para>For more options and parameters check the built-in command line help
+ accessible with <computeroutput>--help</computeroutput>.</para>
+ </sect1>
+
+ <sect1 id="autostart">
+ <title>Starting virtual machines during system boot</title>
+
+ <para>Starting with VirtualBox 4.2.0 it is possible to start VMs automatically during
+ system boot on Linux and Mac OS X for all users. </para>
+
+ <sect2 id="autostart-linux">
+ <title>Linux: starting the autostart service via <computeroutput>init</computeroutput></title>
+
+ <para>On Linux, the autostart service is activated by setting two variables in
+ <computeroutput>/etc/default/virtualbox</computeroutput>.
+ The first one is <computeroutput>VBOXAUTOSTART_DB</computeroutput> which
+ contains an absolute path to the autostart database directory.
+ The directory should have write access for every user who should be able to
+ start virtual machines automatically. Furthermore the directory should have the
+ sticky bit set.
+ The second variable is <computeroutput>VBOXAUTOSTART_CONFIG</computeroutput>
+ which points the service to the autostart configuration file which is used
+ during boot to determine whether to allow individual users to start a VM
+ automatically and configure startup delays.
+ The config file can be placed in <computeroutput>/etc/vbox</computeroutput>
+ and contains several options. One is <computeroutput>default_policy</computeroutput>
+ which controls whether the autostart service allows or denies to start a VM
+ for users which are not in the exception list.
+ The exception list starts with <computeroutput>exception_list</computeroutput>
+ and contains a comma seperated list with usernames. Furthermore a separate
+ startup delay can be configured for every user to avoid overloading the host.
+ A sample configuration is given below:</para>
+
+ <para><screen>
+# Default policy is to deny starting a VM, the other option is "allow".
+default_policy = deny
+# Users which are allowed are given below.
+# If the default policy is to allow starting a VM is not allowed for the users below.
+exception_list = bob, alice, joe
+
+bob = 30 # Bobs machines will be started 30 seconds after the autostart service started
+alice = 180 # Alice machines will be started 180 seconds after the autostart service started
+joe = 240 # Joes machines will be started 240 seconds after the autostart service started
+ </screen></para>
+
+ <para>Every user who wants to enable autostart for individual machines
+ has to set the path to the autostart database directory with
+ <screen>VBoxManage setproperty autostartdbpath &lt;Autostart directory&gt;</screen>
+ </para>
+ </sect2>
+
+ <sect2 id="autostart-solaris">
+ <title>Solaris: starting the autostart service via SMF</title>
+
+ <para>On Solaris hosts, the VirtualBox autostart daemon is
+ integrated into the SMF framework. To enable it you have to point the service
+ to an existing configuration file which has the same format as on Linux (see <xref linkend="autostart-linux" />):
+ <screen>svccfg -s svc:/application/virtualbox/autostart:default setprop config/config=/etc/vbox/autostart.cfg</screen>
+ </para>
+
+ <para>When everything is configured correctly you can start the
+ VirtualBox autostart service with the following command:<screen>svcadm enable svc:/application/virtualbox/autostart:default</screen></para>
+
+ <para>For more information about SMF, please refer to the Solaris
+ documentation.</para>
+ </sect2>
+
+ <sect2 id="autostart-osx">
+ <title>Mac OS X: starting the autostart service via launchd</title>
+
+ <para>On Mac OS X, launchd is used to start the VirtualBox autostart service. An
+ example configuration file can be found in
+ <computeroutput>/Applications/VirtualBox.app/Contents/MacOS/org.virtualbox.vboxautostart.plist</computeroutput>.
+ To enable the service copy the file to <computeroutput>/Library/LaunchDaemons</computeroutput> and change the
+ <computeroutput>Disabled</computeroutput> key from
+ <computeroutput>true</computeroutput> to
+ <computeroutput>false</computeroutput>. Furthermore replace the second parameter
+ to an existing configuration file which has the same format as on Linux (see <xref linkend="autostart-linux" />).
+ To manually start the service use the following command:
+ <screen>launchctl load /Library/LaunchDaemons/org.virtualbox.vboxautostart.plist</screen>
+ For additional information on how launchd services could be
+ configured see <literal><ulink
+ url="http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPSystemStartup/BPSystemStartup.html">http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPSystemStartup/BPSystemStartup.html</ulink></literal>.</para>
+ </sect2>
+ </sect1>
+</chapter>
diff --git a/doc/manual/fr_FR/user_BasicConcepts.xml b/doc/manual/fr_FR/user_BasicConcepts.xml
new file mode 100644
index 00000000..c8c6884b
--- /dev/null
+++ b/doc/manual/fr_FR/user_BasicConcepts.xml
@@ -0,0 +1,1277 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+ "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<chapter id="BasicConcepts">
+ <title>Configurer des machines virtuelles</title>
+
+ <para>Alors que le <xref linkend="Introduction" /> vous a donné une brève
+ introduction à VirtualBox et à la façon de faire fonctionner votre première
+ machine virtuelle, le chapitre suivant décrit en détail comment configurer les
+ machines virtuelles.</para>
+
+ <para>Vous disposez d'une latitude considérable pour décider quel matériel
+ virtuel sera fourni à l'invité. Le matériel virtuel peut être utilisé pour
+ communiquer avec le système hôte ou avec d'autres invités. Par exemple, si
+ vous fournissez à VirtualBox l'image d'un CD-ROM dans un fichier ISO,
+ VirtualBox peut présenter cette image à un système invité comme s'il
+ s'agissait d'un CD-ROM physique. De la même façon, vous pouvez donner à un
+ système invité l'accès à un réseau réel par sa carte réseau virtuelle et, si
+ vous le voulez, donner au système hôte, à d'autres invités ou à d'autres
+ ordinateurs sur Internet un accès au système invité.</para>
+
+ <sect1>
+ <title id="guestossupport">Systèmes d'exploitation invités supportés</title>
+
+ <para>Comme VirtualBox est conçu pour fournir un environnement de
+ virtualisation générique pour les systèmes x86, il peut exécuter des systèmes
+ d'exploitation de toute sorte, même ceux qui ne sont pas officiellement
+ supportés par $VBOX_VENDOR. Cependant, notre objectif est d'optimiser
+ les performances du produit pour une liste sélectionnée de systèmes invités&nbsp;:</para>
+
+ <para><glosslist>
+ <glossentry>
+ <glossterm>Windows NT 4.0</glossterm>
+
+ <glossdef>
+ <para>Toutes les versions/éditions et les packs service sont
+ complètement supportés&nbsp;; néanmoins, il y a quelques problèmes
+ avec les packs services plus anciens. Nous recommandons d'installer
+ le pack service 6a. Les additions invité sont disponibles avec un
+ ensemble de fonctionnalités limité.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Windows 2000 / XP / Server 2003 / Vista / Server 2008 /
+ Windows 7</glossterm>
+
+ <glossdef>
+ <para>Toutes les versions/éditions et les packs service sont
+ complètement supportées (y compris les versions 64 bits, sous les
+ conditions listées ci-dessous).
+ Les additions invité sont disponibles.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>DOS / Windows 3.x / 95 / 98 / ME</glossterm>
+
+ <glossdef>
+ <para>Des tests limités ont été effectués. L'utilisation des
+ mécanismes d'installation non régulier n'est pas recommandée. Aucune
+ addition invité disponible.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Linux 2.4</glossterm>
+
+ <glossdef>
+ <para>Support limité.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Linux 2.6</glossterm>
+
+ <glossdef>
+ <para>Toutes les versions/éditions sont complètement supportées (32
+ bits et 64 bits). Les additions invité sont disponibles.</para>
+
+ <para>Nous vous recommandons fort d'utiliser une version du noyau
+ Linux 2.6.13 ou supérieure pour de meilleures performances.<note>
+ <para>Certaines versions du noyau Linux ont des bogues qui les
+ empêchent de s'exécuter dans un environnement virtuel&nbsp;;
+ merci de voir le <xref linkend="trouble-linux-buggy" /> pour les
+ détails.</para>
+ </note></para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Solaris 10, OpenSolaris</glossterm>
+
+ <glossdef>
+ <para>Complètement supporté (32 bits et 64 bits). Les additions
+ invité sont disponibles.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>FreeBSD</glossterm>
+
+ <glossdef>
+ <para>Exige qu'on active la virtualisation du matériel. Support
+ limité. Les additions invité ne sont pas encore disponibles.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>OpenBSD</glossterm>
+
+ <glossdef>
+ <para>Exige d'activer la virtualisation du matériel. Les versions
+ 3.7 et supérieures sont supportées. Les additions invité ne sont
+ pas encore disponibles.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>OS/2 Warp 4.5</glossterm>
+
+ <glossdef>
+ <para>Exige qu'on active la virtualisation du matériel. Nous ne
+ supportons officiellement que MCP2&nbsp;; les autres versions
+ d'OS/2 peuvent ne pas fonctionner. Les additions invité sont
+ disponibles avec un ensemble de fonctionnalités limité.<footnote>
+ <para>Voir <xref linkend="KnownIssues" />.</para>
+ </footnote></para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Mac OS X Server</glossterm>
+
+ <glossdef>
+ <para>VirtualBox 3.2 a ajouté un support expérimental pour les
+ invités Mac OS X Server, mais il est fourni avec des restrictions.
+ Merci de voir la section suivante ainsi que le <xref
+ linkend="KnownIssues" />.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+
+ <sect2 id="intro-macosxguests">
+ <title>Invités Mac OS X Server</title>
+
+ <para>À partir de la version 3.2, VirtualBox comporte un support
+ expérimental pour les invités Mac OS X Server. Ceci vous permet d'installer
+ et d'exécuter des versions non modifiées de Mac OS X Server sur du matériel
+ hôte supporté.</para>
+
+ <para>Alors que les solutions concurrentes apportent des modifications aux
+ DVDs d'installation de Mac OS X Server (comme un chargeur d'amorçage
+ différent et des fichiers remplacés), VirtualBox est le premier produit
+ qui fournit l'architecture PC moderne à laquelle s'attend OS X sans
+ impliquer de <quote>bidouilles</quote>.</para>
+
+ <para>Vous devriez garder en tête un certain nombre de
+ <emphasis role="bold">questions importantes</emphasis> avant d'essayer
+ d'installer un invité Mac OS X Server&nbsp;:<orderedlist>
+ <listitem>
+ <para>Mac OS X est un logiciel propriétaire, sous licence, et
+ contient des restrictions à la fois de droits et techniques qui
+ limitent son utilisation à certains matériels et certains scénarii.
+ Il est important que vous compreniez et que vous respectiez ces
+ restrictions. Seul Mac OS X Server est conçu pour être utilisé dans
+ un environnement virtuel et, ainsi, VirtualBox ne supporte pas de
+ clients Mac OS X comme invités.</para>
+
+ <para>Il en résulte que, avant d'essayer d'installer Mac OS X Server
+ dans une machine virtuelle, assurez-vous de comprendre les
+ restrictions de droits de la version de Mac OS X que vous voulez
+ utiliser. Pour la plupart des versions de Mac OS X Server, Apple
+ interdit leur installation sur du matériel non Apple.</para>
+
+ <para>Ces restrictions de droits sont implémentées au plan technique&nbsp;:
+ Mac OS X Server vérifie s'il fonctionne sur du matériel Apple et la
+ plupart des DVDs fournis avec le matériel Apple vérifient même le
+ modèle exact. Ces restrictions ne sont <emphasis>pas</emphasis>
+ contournées par VirtualBox et continuent à s'appliquer.</para>
+ </listitem>
+
+ <listitem>
+ <para>Seuls les <emphasis role="bold">processeurs</emphasis> connus
+ et testés par Apple sont supportés. Il en résulte que si le processeur
+ Intel est plus récent que la construction de Mac OS X Server, il
+ tombera très vraisemblablement en erreur lors du démarrage avec un
+ message <quote>Unsupported CPU</quote>. Il est généralement mieux
+ d'utiliser le DVD Mac OS X Server fourni avec votre matériel Apple.</para>
+ </listitem>
+
+ <listitem>
+ <para>L'installateur de Mac OS X Server s'attend à ce que le disque
+ dur soit <emphasis role="bold">partitionné</emphasis>, donc lorsqu'il
+ n'offre pas de sélection, vous devez lancer l'outil de disque (Disk
+ Utility) depuis le menu <quote>Outils</quote> et partitionner le
+ disque dur. Puis, fermez l'outil de disque et recommencez
+ l'installation.</para>
+ </listitem>
+
+ <listitem>
+ <para>En outre, comme le support pour Mac OS X Server dans VirtualBox
+ est encore expérimental, merci de vous reporter également au <xref
+ linkend="KnownIssues" />.</para>
+ </listitem>
+ </orderedlist></para>
+ </sect2>
+
+ <sect2 id="intro-64bitguests">
+ <title>Invités 64 bits</title>
+
+ <para>À partir de VirtualBox 2.0, VirtualBox supporte les systèmes
+ d'exploitation invités 64 bits. À partir de la version 2.1, vous pouvez
+ même lancer des invités 64 bits sur un système d'exploitation hôte 32
+ bits. Les pré-requis matériels sont identiques dans les deux cas.</para>
+
+ <para>En particulier, les invités 64 bits sont supportés dans les
+ conditions suivantes&nbsp;:<orderedlist>
+ <listitem>
+ <para>Vous avez besoin d'un processeur 64 bits avec le support de
+ la virtualisation matérielle (voir le <xref linkend="hwvirt" />).</para>
+ </listitem>
+
+ <listitem>
+ <para>Vous devez activer la virtualisation matérielle pour la VM
+ particulière pour laquelle vous voulez le support 64 bits&nbsp;; la
+ virtualisation logicielle n'est pas supportée pour les VMs 64 bits.</para>
+ </listitem>
+
+ <listitem>
+ <para>Si vous voulez utiliser le support de l'invité 64 bits sur un
+ système d'exploitation hôte 32 bits, vous devez aussi sélectionner
+ un système d'exploitation 64 bits pour la VM en question. Puisque le
+ support du 64 bits sur des hôtes 32 bits implique des traitements
+ supplémentaires, VirtualBox n'active ce support que sur demande
+ explicite.</para>
+
+ <para>Sur les hôtes 64 bits, le support de l'invité 64 bits est
+ toujours activé, donc vous pouvez simplement installer un système
+ d'exploitation 64 bits dans l'invité.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para><warning>
+ <para>Sur n'importe quel hôte, vous devriez activer
+ l'<emphasis role="bold">I/O APIC</emphasis> pour les machines virtuelles
+ où vous envisagez d'utiliser le mode 64 bits. Cela est surtout vrai
+ pour les VMs Windows 64 bits. Voir le <xref linkend="settings-general-advanced" />.
+ En outre, pour les invités Windows 64 bits, vous devriez vous assurer
+ que la VM utilise le <emphasis role="bold">périphérique réseau Intel</emphasis>,
+ puisqu'il n'y a pas de support de pilote 64 bits pour la carte AMD
+ PCNet ; voir le <xref linkend="nichardware" />.</para>
+ </warning></para>
+
+ <para>Si vous utilisez l'assistant <quote>Créer une VM</quote> de
+ l'interface graphique de VirtualBox (voir le <xref linkend="gui-createvm" />),
+ VirtualBox utilisera automatiquement les bons paramètres pour chaque type
+ de système d'exploitation 64 bits sélectionné.</para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Matériel émulé</title>
+
+ <para>VirtualBox virtualise presque tout le matériel de l'hôte. Selon la
+ configuration de la VM, l'invité verra le matériel virtuel suivant&nbsp;:<itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">Périphériques d'entrée.</emphasis> Par défaut,
+ VirtualBox émule un clavier et une souris PS/2 standards. Ces
+ périphériques sont supportés par presque tous les systèmes
+ d'exploitation passés et actuels. En outre, VirtualBox peut fournir
+ des périphériques d'entrée USB.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Vidço.</emphasis> les périphériques vidéos
+ de VirtualBox (parfois désigné comme le périphérique VGA) ne sont pas
+ basés, contrairement à presque tous les périphériques émulés, sur une
+ base physique. C'est un périphérique simple et synthétique qui se
+ montre compatible avec le VGA standard et avec plusieurs registres
+ étendus utilisés par VESA BIOS Extensions (VBE).</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Stockage.</emphasis> VirtualBox émule
+ actuellement l'interface standard ATA des chipsets Intel PIIX3/PIIX4,
+ l'interface SATA (AHCI), et deux adaptateurs SCSI (LSI Logic et
+ BusLogic)&nbsp;; voir le <xref linkend="harddiskcontrollers" /> pour
+ des détails. Bien que fournir un d'eux suffirait à VirtualBox en
+ lui-même, cette variété d'adaptateurs de stockage est requise pour des
+ questions de compatibilité avec d'autres hyperviseurs. Windows est
+ particulièrement pointilleux avec ses périphériques d'amorçage et la
+ migration de VMs entre hyperviseurs est très difficile voire impossible
+ si les contrôleurs de stockage sont différents.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Réseau.</emphasis> Voir <xref
+ linkend="nichardware" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">USB.</emphasis> VirtualBox émule deux
+ deux contrôleurs hôtes USB, EHCI et OHCI. Les deux contrôleurs sont
+ nécessaires car OHCI ne gère que les périphériques USB à vitesse pleine
+ ou faible (low- et full-speed) (tant USB 1.x que 2.0), alors qu'EHCI
+ ne gère que les périphériques à haute vitesse (seulement USB 2.0). Les
+ contrôleurs USB émulés ne communiquent pas directement avec les
+ périphériques de l'hôte, mais plutôt avec la couche VUSB (voir
+ ci-dessous), qui émule le protocole USB et permet l'utilisation de
+ périphériques USB distants (avec VRDP).</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Son.</emphasis> Deux périphériques audio
+ sont émulés, un contrôleur AC97 avec codec, et une classique
+ SoundBlaster 16 (seulement audio digital).</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect1>
+
+ <sect1 id="generalsettings">
+ <title>Paramètres généraux</title>
+
+ <para>Dans la fenêtre Paramètres, sous <quote>Général</quote>, vous pouvez
+ configurer la plupart des aspects fondamentaux de la machine virtuelle tels
+ que la mémoire et le matériel essentiel. Il y a trois onglets&nbsp;:
+ <quote>Paramètres simples</quote>, <quote>Avancé</quote> et
+ <quote>Description</quote>.</para>
+
+ <sect2>
+ <title>Onglet <quote>Simple</quote></title>
+
+ <para>Sous l'onglet <quote>Simple</quote> de la catégorie des paramètres
+ <quote>Général</quote>, vous pouvez trouver ces paramètres&nbsp;:</para>
+
+ <glosslist>
+ <glossentry>
+ <glossterm>Nom</glossterm>
+
+ <glossdef>
+ <para>Le nom sous lequel sera montrée la VM dans la liste des VMs
+ dans la fenêtre principale. Sous ce nom, VirtualBox enregistre aussi
+ les fichiers de configuration de la VM. En changeant le nom,
+ VirtualBox renomme aussi ces fichiers. Il en résulte que vous ne
+ pouvez utiliser que les caractères autorisés par les noms de fichiers
+ de votre système d'exploitation.</para>
+
+ <para>Remarquez qu'en interne, VirtualBox utilise des identifiants
+ uniques (UUIDs) pour identifier les machines virtuelles. Vous pouvez
+ les afficher avec <computeroutput>VBoxManage</computeroutput>.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Système d'exploitation / Version</glossterm>
+
+ <glossdef>
+ <para>Le type de système d'exploitation invité qui est (ou qui sera)
+ installé dans la VM. C'est le même paramètre que celui spécifié dans
+ l'assistant <quote>Nouvelle machine virtuelle</quote>, comme décrit
+ au chapitre <xref linkend="gui-createvm" /> ci-dessus.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist>
+ </sect2>
+
+ <sect2 id="settings-general-advanced">
+ <title>Onglet <quote>Avancé</quote></title>
+
+ <para><glosslist>
+ <glossentry>
+ <glossterm>Dossier des instantanés</glossterm>
+
+ <glossdef>
+ <para>Par défaut, VirtualBox enregistre les données d'instantané
+ avec vos autres données de configuration de VirtualBox&nbsp;; voir
+ le <xref linkend="vboxconfigdata" />. Avec ce paramètre, vous
+ pouvez spécifier un autre répertoire pour chaque VM.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Presse-papier partagé</glossterm>
+
+ <glossdef>
+ <para>Si vous avez installé les additions invité dans la machine
+ virtuelle, vous pouvez sélectionner ici si le presse-papier du
+ système d'exploitation invité devrait être partagé avec celui de
+ votre hôte. Si vous sélectionnez <quote>Bidirectionnel</quote>,
+ alors VirtualBox s'assurera toujours que les deux presse-papiers
+ contiennent les mêmes données. Si vous sélectionnez <quote>Hôte
+ vers invité</quote> ou <quote>invité vers hôte</quote>, alors
+ VirtualBox ne fera que copier les données dans un sens.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Média amovible&nbsp;: enregistrer les changements pendant
+ l'exécution</glossterm>
+
+ <glossdef>
+ <para>Si ceci est coché, VirtualBox sauvegardera l'état des médias
+ montés entre plusieurs exécutions de la machine virtuelle.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Barre d'outils compacte</glossterm>
+
+ <glossdef>
+ <para>En mode plein-écran ou intégré, VirtualBox
+ peut afficher une petite barre d'outils qui contient certains des
+ menus qui sont normalement disponibles à partir de la barre de
+ menu de la machine virtuelle. Cette barre d'outils se réduit à une
+ petite ligne grise sauf si vous déplacez la souris dessus. Avec la
+ barre d'outils, vous pouvez quitter le mode plein-écran ou le
+ mode intégré, contrôler l'exécution de la machine ou activer
+ certains périphériques. Si vous ne voulez pas voir la barre d'outils,
+ désactivez ce paramètre.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+ </sect2>
+
+ <sect2>
+ <title>Onglet <quote>Description</quote></title>
+
+ <para>Ici vous pouvez entrer n'importe quelle description pour votre
+ machine virtuelle, si vous le voulez. Elle n'a pas d'effet sur les
+ fonctionnalités de la machine mais il se peut que vous trouviez utile cet
+ espace pour noter des choses comme la configuration d'une machine virtuelle
+ et le logiciel qui y a été installé.</para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="settings-system">
+ <title>Paramètres système</title>
+
+ <para>La catégorie <quote>Système</quote> regroupe divers paramètres liés au
+ matériel de base présenté à la machine virtuelle.<note>
+ <para>Comme le mécanisme d'activation de Microsoft Windows est sensible
+ aux changements de matériel, si vous changez des paramètres pour les
+ invités Windows, certains de ces changements peuvent entraîner la demande
+ d'une autre activation par Microsoft.</para>
+ </note></para>
+
+ <sect2 id="settings-motherboard">
+ <title>Onglet <quote>Carte mère</quote></title>
+
+ <para>Sur l'onglet <quote>Carte mère</quote>, vous pouvez modifier le
+ matériel virtuel qui serait normalement présent sur la carte mère d'un
+ vrai ordinateur.<glosslist>
+ <glossentry>
+ <glossterm>Mémoire de base</glossterm>
+
+ <glossdef>
+ <para>Ceci règle la taille de la RAM allouée et donnée à la VM
+ quand elle est en fonction. La quantité de mémoire spécifiée sera
+ demandée au système d'exploitation hôte, donc elle doit être
+ disponible ou libérée sur l'hôte quand vous essayez de démarrer la
+ VM et elle ne sera pas disponible pour l'hôte tant que la VM sera
+ en fonction. C'est le même paramètre que celui qui a été spécifié
+ dans l'assistant <quote>Nouvelle machine virtuelle</quote> comme
+ décrit dans les grandes lignes sous le chapitre <xref linkend="gui-createvm" />
+ ci-dessus.</para>
+
+ <para>En général, il est possible de modifier la taille de la
+ mémoire après l'installation du système d'exploitation invité
+ (pourvu que vous ne réduisiez pas la mémoire à une quantité où le
+ système d'exploitation ne démarrerait plus).</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Ordre d'amorçage</glossterm>
+
+ <glossdef>
+ <para>Ce paramètre détermine l'ordre des divers périphériques
+ d'amorçage virtuels à partir desquels le système d'exploitation
+ démarre. Comme le réglage du BIOS d'un vrai PC, VirtualBox peut
+ dire à un OS invité de démarrer à partir d'une disquette virtuelle,
+ le lecteur de CD/DVD virtuel, le disque dur virtuel (chacun d'eux
+ selon ce qui est défini par les paramètres de la VM), le réseau,
+ ou aucun d'eux.</para>
+
+ <para>Si vous sélectionnez <quote>Réseau</quote>, la VM cherchera
+ à démarrer depuis le réseau via le mécanisme PXE. Cela doit être
+ configuré en détail en ligne de commande&nbsp;; merci de voir le
+ <xref linkend="vboxmanage-modifyvm" />.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Activer I/O APIC</glossterm>
+
+ <glossdef>
+ <para>Advanced Programmable Interrupt Controllers (APICs) (les
+ contrôleurs d'interruption programmables avancés) sont une
+ fonctionnalité récente du matériel x86 qui a remplacé l'ancien
+ Programmable Interrupt Controllers (PICs) (contrôleurs
+ d'interruption programmable) ces dernières années. Avec un APIC
+ I/O, les systèmes d'exploitation peuvent utiliser plus de 16
+ requêtes d'interruption (interrupt requests) (IRQs) et donc éviter
+ le partage d'IRQs pour une meilleure fiabilité.<note>
+ <para>L'activation de l'APIC I/O est nécessaire pour les
+ systèmes d'exploitation invités 64 bits, surtout Windows Vista&nbsp;;
+ elle est aussi requise si vous voulez utiliser plus d'un CPU
+ virtuel dans une machine virtuelle.</para>
+ </note></para>
+
+ <para>Cependant, le support logiciel de l'APICs I/O a été peu
+ fiable pour certains systèmes d'exploitation autres que Windows.
+ En outre, l'utilisation d'une APIC I/O augmente légèrement la
+ surcharge de la virtualisation et donc, ralentit quelque peu l'OS
+ invité.<warning>
+ <para>Tous les systèmes d'exploitation Windows à partir de
+ Windows 2000 installent des noyaux différents en fonction de
+ l'activation ou non de l'APIC I/O. Comme avec ACPI, L'APIC I/O
+ <emphasis>ne doit donc pas être désactivé</emphasis> après
+ l'installation d'un OS invité Windows. L'activer après
+ l'installation n'aura cependant aucun effet.</para>
+ </warning></para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Activer EFI</glossterm>
+
+ <glossdef>
+ <para>Ceci active l'Extensible Firmware Interface (EFI) qui
+ remplace le BIOS de base, ce qui peut être utile pour certains cas
+ d'utilisation avancée. Merci de vous référer au <xref
+ linkend="efi" /> pour des détails.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Horloge matérielle en temps UTC</glossterm>
+
+ <glossdef>
+ <para>Si vous le cochez, VirtualBox donnera à l'invité l'heure
+ système au format UTC plutôt qu'en temps local (de l'hôte). Ceci
+ change la façon dont l'horloge de temps réel virtuelle (real-time
+ clock, RTC) opère, et cela peut être utile pour des systèmes
+ d'exploitation invités de type Unix, qui en général s'attend à ce
+ que l'heure matérielle soit réglée sur UTC.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Activer les périphériques de pointages absolus</glossterm>
+
+ <glossdef>
+ <para>S'il est activé, VirtualBox indique à la machine virtuelle
+ qu'un périphérique de tablette USB est présent et il communique
+ les événements de la souris à la machine virtuelle à travers ce
+ périphérique. S'il est désactivé, les événements de la souris sont
+ communiqués à travers un périphérique virtuel de souris PS/2
+ traditionnel.</para>
+
+ <para>Utiliser une tablette USB virtuelle présente l'avantage que
+ les mouvements sont sighifiés en coordonnées absolues (et non en
+ tant que changement de position relative), ce qui permet à
+ VirtualBox de traaduire les événements de la souris de la fenêtre
+ de la VM en événement de tablette sans devoir
+ <quote>capturer</quote> la souris dans l'invité comme décrit au
+ <xref linkend="keyb_mouse_normal" />. Cela rend l'utilisation de
+ la VM moins pénible même si on n'installe pas les additions
+ invité.<footnote>
+ <para>La tablette USB virtuelle a été ajoutée à VirtualBox 3.2.
+ Selon le système d'exploitation invité sélectionné, elle est
+ maintenant activée par défaut pour les nouvelles machines
+ virtuelles.</para>
+ </footnote></para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+
+ <para>En outre, vous pouvez désactiver la <emphasis role="bold">Advanced
+ Configuration and Power Interface (ACPI, Configuration Avancée et
+ l'Interface Alimentation)</emphasis> que VirtualBox présente au système
+ d'exploitation invité par défaut. ACPI est le standard industriel actuel
+ pour permettre aux systèmes d'exploitation de reconnaître le matériel, de
+ configurer les cartes mères et autres périphériques et gérer l'alimentation.
+ Comme tous les PCs modernes contiennent cette fonctionnalité et comme
+ Windows et Linux la supportent depuis des années, elle est également activée
+ par défaut dans VirtualBox. Vous pouvez la désactiver en ligne de commande&nbsp;;
+ voir le <xref linkend="vboxmanage-modifyvm" />.<warning>
+ <para>Tous les systèmes d'exploitation Windows à partir de Windows 2000
+ installent des noyaux différents selon l'activation ou non de l'ACPI,
+ donc ACPI ne doit pas être désactivé après l'installation d'un OS
+ invité Windows. Son activation après l'installation n'aura cependant
+ aucun effet.</para>
+ </warning></para>
+ </sect2>
+
+ <sect2 id="settings-processor">
+ <title>Onglet <quote>processeur</quote></title>
+
+ <para>Sur l'onglet <quote>Processeur</quote>, vous pouvez déclarer combien
+ de c&oelig;ur de processeurs virtuels devrait voir le système d'exploitation
+ invité. À partir de la version 3.0, VirtualBox supporte le multi-processing
+ symétrique (symmetrical multiprocessing) (SMP) et peut présenter jusqu'à
+ 32 c&oelig;urs de processeur virtuel à chaque machine virtuelle.</para>
+
+ <para>Néanmoins, vous ne devriez pas configurer des machines virtuelles
+ pour utiliser plus de c&oelig;urs de processeur que vous n'en avez de
+ disponibles physiquement.</para>
+
+ <para>En outre, le paramètre <emphasis role="bold">"Activer PAE/NX"</emphasis>
+ détermine si les fonctionnalités PAE et NX du processeur hôte seront
+ présentées à la machine virtuelle. PAE signifie <quote>Physical Address
+ Extension</quote> (extension d'adresses physiques). Normalement, si elle
+ est activée et supportée par le système d'exploitation, alors même un
+ processeur x86 32 bits peut accéder à plus de 4 Gio de RAM. Cela est rendu
+ possible en ajoutant 4 bits aux adresses mémoires, afin qu'avec 36 bits,
+ jusqu'à 64 Gio puissent avoir une adresse. Certains systèmes d'exploitation
+ (tel qu'Ubuntu Server) exige le support PAE du processeur et ne peuvent pas
+ se lancer dans une machine virtuelle sans lui.</para>
+
+ <para>Avec des machines virtuelles qui exécutent des systèmes d'exploitation
+ serveur modernes, VirtualBox supporte aussi le branchement à chaud de
+ processeur. Pour des détails à ce sujet, merci de vous reporter au
+ <xref linkend="cpuhotplug" />.</para>
+ </sect2>
+
+ <sect2>
+ <title>Onglet <quote>Accélération</quote></title>
+
+ <para>Sur cet onglet, vous pouvez déterminer si VirtualBox devrait utiliser
+ les extensions de la virtualisation du matériel que le processeur de votre
+ hôte peut supporter et comment. C'est le cas avec la plupart des processeurs
+ fabriqués après 2006.</para>
+
+ <para>Vous pouvez sélectionner, individuellement pour chaque machine
+ virtuelle, si VirtualBox devrait utiliser la virtualisation logicielle ou
+ matérielle.<footnote>
+ <para>Avant VirtualBox version 2.2, la virtualisation logicielle était
+ le réglage par défaut&nbsp;; à partir de la version 2.2, VirtualBox
+ activera par défaut la virtualisation matérielle sur les nouvelles
+ machines virtuelles que vous créez. (Les machines virtuelles existantes
+ ne sont pas automatiquement modifiées pour des questions de
+ compatibilité et vous pouvez bien sûr modifier le réglage par défaut
+ de chaque machine virtuelle.)</para>
+ </footnote></para>
+
+ <para>Dans la plupart des cas, les paramètres par défaut iront très bien&nbsp;;
+ VirtualBox aura sélectionné des paramètres par défaut adéquats au système
+ d'exploitation que vous avez sélectionné quand vous avez créé la machine
+ virtuelle. Cependant, dans certaines situations, il se peut que vous vouliez
+ modifier ces réglages pré-configurés par défaut.</para>
+
+ <para>Il se peut que les utilisateurs avancés soient intéressés par des
+ détails techniques sur la virtualisation logicielle vs. La virtualisation
+ matérielle&nbsp;; voir le <xref linkend="hwvirt" />.</para>
+
+ <para>Si le processeur de votre hôte supporte les fonctionnalités de
+ pagination empilée (nested chez AMD-V) ou d'EPT (Intel VT-x), vous pouvez
+ alors espérer une augmentation conséquente des performances en activant la
+ pagination empilée en plus de la virtualisation matérielle. La pagination
+ empilée est encore désactivée par défaut même pour les nouvelles machines
+ virtuelles, mais vous pouvez l'activer individuellement pour chaque machine
+ virtuelle. Pour des détails techniques, voir le <xref linkend="nestedpaging" />.</para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="settings-display">
+ <title>Paramètres d'affichage</title>
+
+ <glosslist>
+ <glossentry>
+ <glossterm>Taille de la mémoire graphique</glossterm>
+
+ <glossdef>
+ <para>Ceci règle la taille de la mémoire fournie par la carte graphique
+ virtuelle disponible pour l'invité, en Mio. Comme avec la mémoire
+ principale, la quantité spécifiée sera allouée à partir de la mémoire
+ résidente de l'hôte. Basée sur la quantité de mémoire graphique,
+ résolutions plus élevées et profondeurs de couleurs peuvent être
+ disponibles.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Compteur de moniteurs</glossterm>
+
+ <glossdef>
+ <para>Avec ce paramètre, VirtualBox peut offrir plus d'un moniteur
+ virtuel à une machine virtuelle. Si un système d'exploitation invité
+ (tel que Windows) supporte les moniteurs multiples attachés, VirtualBox
+ peut simuler que plusieurs moniteurs virtuels sont présents.<footnote>
+ <para>Le support de plusieurs moniteurs a été ajouté à VirtualBox
+ 3.2.</para>
+ </footnote> Jusqu'à 8 moniteurs virtuels de ce type sont supportés.</para>
+
+ <para>La sortie des divers moniteurs sera affichée sur l'hôte dans
+ plusieurs fenêtres de VM qui se lancent côte à côte.</para>
+
+ <para> Néanmoins, en mode plein écran et intégré, elles
+ utiliseront les moniteurs physiques disponibles attachés à l'hôte. Il
+ en résulte que pour que les modes plein écran et intégré
+ fonctionnent avec plusieurs moniteurs, vous aurez besoin d'au moins
+ autant de moniteurs physiques que le nombre de moniteurs virtuels que
+ vous aurez configurés, ou VirtualBox renverra une erreur. Vous pouvez
+ configurer la relation entre les moniteurs invités et hôtes en
+ utilisant le menu vues en appuyant sur la touche Hôte + Origine quand
+ vous êtes en mode plein écran ou intégré.</para>
+
+ <para>Merci de voir aussi le <xref linkend="KnownIssues" />.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Activer l'accélération 3D</glossterm>
+
+ <glossdef>
+ <para>Si vous avez installé les additions invité dans une machine
+ virtuelle, vous pouvez sélectionner ici si l'invité supporte la vidéo
+ graphique accélérée. Merci de vous reporter au chapitre xref
+ linkend="guestadd-3d" /> pour des détails.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Activer l'accélçration graphique 2D</glossterm>
+
+ <glossdef>
+ <para>Si vous avez installé les additions invité sur une machine
+ virtuelle avec Microsoft Windows, vous pouvez sélectionner ici si
+ l'invité devrait supporter les graphiques vidéos 2D accélérés. Merci
+ de vous référer au chapitre <xref linkend="guestadd-2d" /> pour les
+ détails.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Affichage distant</glossterm>
+
+ <glossdef>
+ <para>Sous l'onglet <quote>Affichage distant</quote>, vous pouvez
+ activer le serveur VRDP construit dans VirtualBox pour vous permettre
+ de vous connecter à la machine virtuelle à distance. Pour cela, vous
+ pouvez utiliser n'importe quel visualiseur de RDP standard tels que
+ <computeroutput>mstsc.exe</computeroutput> qui est fourni avec
+ Microsoft Windows ou, sur les systèmes Linux, le programme standard
+ libre <computeroutput>rdesktop</computeroutput>. Ces fonctionnalités
+ sont décrites en détail au <xref linkend="vrde" />.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist>
+ </sect1>
+
+ <sect1 id="settings-storage">
+ <title>Paramètres de stockage</title>
+
+ <para>Dans la fenêtre des paramètres de la VM, la section « Stockage » vous
+ permet de connecter des images virtuelles de disque dur, de CD/DVD et de
+ disquette et des lecteurs à votre machine virtuelle&nbsp;:<mediaobject>
+ <imageobject>
+ <imagedata align="center" fileref="../en_US/images/vm-settings-harddisk.png"
+ width="10cm" />
+ </imageobject>
+ </mediaobject></para>
+
+ <para>Dans un vrai PC, ce que l'on appelle les « contrôleurs de stockage »
+ connectent des lecteurs de disque physiques au reste de l'ordinateur. De la
+ même façon, VirtualBox présente des contrôleurs de stockage virtuels à une
+ machine virtuelle. Sous chaque contrôleur, les périphériques virtuels
+ (disque dur, lecteurs CD/DVD ou de disquettes) sont montrés comme attachés
+ au contrôleur.</para>
+
+ <para>Si vous avez utilisé l'assistant <quote>Créer une VM</quote> pour créer
+ une machine, vous verrez normalement les périphériques suivants&nbsp;:<itemizedlist>
+ <listitem>
+ <para>Vous verrez un contrôleur IDE, sous lequel il y a deux
+ périphériques&nbsp;:<itemizedlist>
+ <listitem>
+ <para>un disque dur virtuel connecté au slot IDE appelé
+ <quote>primaire maître</quote>&nbsp;; cela est représenté par les
+ images de disque que vous avez créées avec la machine&nbsp;;</para>
+ </listitem>
+
+ <listitem>
+ <para>un lecteur de CD/DVD connecté au <quote>secondaire maître</quote>.</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para>En outre, il y a un contrôleur de disquette auquel est attaché
+ un lecteur de disquette virtuel.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>Vous pouvez modifier ces attachements de médias à votre guise. Par
+ exemple, si vous souhaitez copier des fichiers depuis un autre disque virtuel
+ que vous avez créé, vous pouvez connecter ce disque comme second disque dur.
+ Vous pourriez aussi ajouter un second lecteur de CD/DVD virtuel où changer
+ l'endroit auxquels ces éléments sont attachés.</para>
+
+ <para>En plus des contrôleurs IDE, VirtualBox peut aussi présenter un
+ contrôleur SATA et un contrôleur SCSI à l'invité, ce qui vous donne
+ respectivement 30 ou 16 emplacements supplémentaires pour y attacher des
+ périphériques, Néanmoins cela peut exiger que vous exécutiez un système
+ d'exploitation invité moderne. Voir le <xref linkend="harddiskcontrollers" />
+ pour les détails.</para>
+
+ <para>Pour <emphasis role="bold">,nouter un autre disque dur ou un autre
+ lecteur de CD/DVD virtuel,</emphasis> sélectionnez le contrôleur de stockage
+ auquel cela devrait être ajouté (IDE, SATA ou SCSI) puis cliquez sur le
+ bouton <quote>Ajouter un disque</quote> en-dessous de l'arborescence. Vous
+ pouvez alors soit sélectionner <quote>Ajouter un périphérique CD/DVD </quote>
+ ou <quote>Ajouter un disque dur</quote>. Alternativement, faites un clic
+ droit sur le contrôleur de stockage puis sélectionnez-y une option du menu.
+ </para>
+
+ <para>Sur la partie droite de la fenêtre, vous pouvez alors sélectionner
+ l'endroit auquel le disque virtuel devrait être connecté sur le contrôleur
+ et quel fichier image utiliser.<itemizedlist>
+ <listitem>
+ <para>Pour les disques durs virtuels, une liste déroulante apparaît à
+ droite, listant toutes les images de disque dur que VirtualBox connaît
+ actuellement. Si vous cliquez sur l'icône <quote>Ouvrir le gestionnaire
+ de médias virtuels</quote> à droite, cela fera apparaître une fenêtre
+ dans laquelle vous pouvez sélectionner ou créer une image de disque
+ dur différente (voir le <xref linkend="vdis" /> pour les détails).</para>
+ </listitem>
+
+ <listitem>
+ <para>Pour les lecteurs de CD/DVD, il y a deux types options dans la
+ liste déroulante.<itemizedlist>
+ <listitem>
+ <para>Si vous sélectionnez <quote>Vide</quote>, alors VirtualBox
+ présentera un lecteur de CD/DVD virtuel à l'invité avec aucun
+ média inséré.</para>
+ </listitem>
+
+ <listitem>
+ <para>Si vous sélectionnez <quote>Lecteur hôte</quote> dans la
+ liste, alors le périphérique physique de l'ordinateur hôte sera
+ connecté à la VM, afin que le système d'exploitation invité puisse
+ lire et écrire sur votre périphérique physique. C'est par exemple
+ utile si vous voulez installer Windows à partir d'un vrai CD
+ d'installation. Dans ce cas, sélectionnez votre lecteur hôte
+ depuis la liste déroulante présentée.<note>
+ <para>Si vous voulez graver des CDs ou des DVDs en
+ utilisant le lecteur de l'hôte, vous devez tout d'abord
+ activer un paramètre spécial&nbsp;; voir le
+ <xref linkend="storage-write-cds" />.</para>
+ </note></para>
+ </listitem>
+
+ <listitem>
+ <para>Les autres options de la liste comme les images de disque
+ virtuelles seront des fichiers images sur votre hôte. Le format
+ de fichier est ici le format ISO. La plupart du temps, vous
+ sélectionnerez cette option quand vous installerez un système
+ d'exploitation à partir d'un fichier ISO que vous avez obtenu
+ sur Internet. Par exemple, la plupart des distributions Linux
+ sont disponibles de cette matière.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <note>
+ <para>La chaîne d'identification du lecteur fournie à l'invité (qui,
+ dans l'invité, serait affichée par les outils de configuration tels
+ que gestionnaire de périphériques Windows) est toujours <quote>CD-ROM
+ VBOX</quote>, indépendamment de la configuration actuelle du lecteur
+ virtuel. Ceci empêche la détection de matériel d'être déclenchée dans
+ le système d'exploitation invité chaque fois que la configuration
+ est modifiée.</para>
+ </note>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>Remarquez que le contrôleur de disquette est spécial : vous ne pouvez
+ pas lui ajouter de périphériques autres que les lecteurs de disquette. Les
+ lecteurs de disquette virtuels, comme les lecteurs de CD/DVD, peuvent être
+ connectés soit à un lecteur de disquette hôte (si vous en avez un) ou une
+ image de disque qui, dans ce cas, doit être au format RAW.</para>
+
+ <para>Pour <emphasis role="bold">supprimer un disque ou un lecteur virtuel,</emphasis>
+ sélectionnez-le et cliquez sur l'icône <quote>Supprimer </quote> en bas (ou
+ faites un clic droit dessus et sélectionnez l'élément du menu).</para>
+
+ <para>Vous pouvez changer les médias amovibles (CD/DVDs et disquettes) alors
+ que la machine invitée est en fonction. Puisque la boîte de dialogue
+ <quote>Paramètres</quote> n'est pas disponible à ce moment, vous pouvez aussi
+ accéder à ces paramètres depuis le menu <quote>Périphériques</quote> de la
+ fenêtre de votre machine virtuelle.</para>
+
+ <para>Nous avons consacré un chapitre entier de ce manuel d'utilisateur au
+ stockage virtuel&nbsp;: merci de voir le <xref linkend="storage" /> pour
+ le moindre détail sur la configuration du stockage.</para>
+ </sect1>
+
+ <sect1>
+ <title>Paramètres audio</title>
+
+ <para>La section <quote>Audio</quote> dans la fenêtre de paramètres d'une
+ machine virtuelle détermine si la VM verra une carte son connectée et si la
+ sortie audio devrait être entendue sur le système hôte.</para>
+
+ <para>Si l'audio est activé pour un invité, vous pouvez choisir entre
+ l'émulation d'un contrôleur Intel AC'97 ou une carte SoundBlaster 16. Dans
+ tous les cas, vous pouvez sélectionner le pilote audio que VirtualBox
+ utilisera sur l'hôte.</para>
+
+ <para>Sur un hôte Linux, selon la configuration de votre hôte, vous pouvez
+ aussi choisir entre les sous systèmes OSS, ALSA ou PulseAudio. Sur les
+ distributions Linux récentes, (Fedora 8 et supérieur, Ubuntu 8.04 et supérieur),
+ vous devriez préférer le sous-système PulseAudio.</para>
+ </sect1>
+
+ <sect1 id="settings-network">
+ <title>Paramètres réseau</title>
+
+ <para>La section <quote>réseau</quote> d'une fenêtre des paramètres d'une
+ machine virtuelle vous permet de configurer la façon dont VirtualBox présente
+ les cartes réseau virtuelles à votre VM et comment elles agissent.</para>
+
+ <para>Quand vous créez une machine virtuelle, VirtualBox active d'emblée par
+ défaut une carte réseau virtuelle et sélectionne le mode <quote>Network
+ Address Translation</quote> (NAT) pour elle. De cette façon, l'invité peut
+ se connecter au monde extérieur en utilisant le réseau de l'hôte et le monde
+ extérieur peut se connecter aux services de l'invité que vous choisissez de
+ rendre visibles à l'extérieur de la machine virtuelle. Dans la plupart des
+ cas, le réglage par défaut fonctionnera très bien pour vous.</para>
+
+ <para>Cependant, VirtualBox est extrêmement flexible quant à la façon de
+ virtualiser le réseau. Il supporte jusqu'à huit cartes réseau par machine
+ virtuelle, parmi lesquelles les quatre premières peuvent être configurées
+ en détail dans l'interface graphique. Les huit cartes réseau peuvent être
+ configurées en ligne de commande avec VBoxManage. Du coup, nous avons
+ consacré un chapitre entier de ce manuel pour traiter de la configuration
+ réseau&nbsp;; merci de voir le <xref linkend="networkingdetails" />.</para>
+
+ </sect1>
+
+ <sect1 id="serialports">
+ <title>Ports série</title>
+
+ <para>VirtualBox supporte pleinement les ports série dans une machine
+ virtuelle d'une manière facile à utiliser.<footnote>
+ <para>Le support du port série a été ajouté à VirtualBox 1.5.</para>
+ </footnote></para>
+
+ <para>Dès le premier PC IBM, les ordinateurs personnels ont été équipé d'un
+ ou de deux ports série (appelés aussi ports COM par le DOS et Windows). S'ils
+ ne sont plus aussi importants qu'ils ne l'étaient il y a encore quelques
+ années, (surtout depuis que les souris ne sont plus connectées au port série
+ aujourd'hui), il y a encore des usages importants de ces derniers. Par
+ exemple, on peut utiliser les ports série pour régler un réseau de base par
+ un câble null-modem, au cas où l'Ethernet n'est pas disponible. Les ports
+ série sont aussi indispensables pour les programmeurs système qui ont besoin
+ de faire du débogage de noyau, vu que le logiciel de débogage du noyau
+ interagit en général avec les développeurs par un port série. En d'autres
+ termes, avec les ports série virtuels, les programmeurs peuvent faire du
+ débogage de noyau sur une machine virtuelle au lieu d'avoir besoin qu'un
+ vrai ordinateur ne s'y connecte.</para>
+
+ <para>Si vous activez un port série virtuel, le système d'exploitation invité
+ le voit comme un port série de type 16450 standard. La réception et la
+ transmission de données sont toutes deux supportées. La façon dont ce port
+ série virtuel est alors connecté à l'hôte est configurable, et les détails
+ dépendent de votre système d'exploitation hôte.</para>
+
+ <para>Vous pouvez utiliser soit l'interface graphique, soit l'outil
+ <computeroutput>VBoxManage</computeroutput> en ligne de commande pour
+ paramétrer les ports série virtuels. Pour ces derniers, merci de vous référer
+ au <xref linkend="vboxmanage-modifyvm" />;&nbsp;; dans cette section, cherchez
+ les options <computeroutput>--uart</computeroutput> et
+ <computeroutput>--uartmode</computeroutput>.</para>
+
+ <para>Dans tous les cas, vous pouvez configurer jusqu'à deux ports série
+ simultanément. Pour chacun de ces périphériques, vous devrez déterminer<orderedlist>
+ <listitem>
+ <para>quel type de port série devrait voir la machine virtuelle en
+ sélectionnant l'adresse de base E/S et l'interruption (IRQ). Pour
+ ceux-ci, nous recommandons d'utiliser les valeurs traditionnelles<footnote>
+ <para>Voir, par exemple, <ulink
+ url="http://en.wikipedia.org/wiki/COM_(hardware_interface)">http://en.wikipedia.org/wiki/COM_(hardware_interface)</ulink>.</para>
+ </footnote>, qui sont&nbsp;:</para>
+
+ <para><orderedlist>
+ <listitem>
+ <para>COM1&nbsp;: I/O base 0x3F8, IRQ 4</para>
+ </listitem>
+
+ <listitem>
+ <para>COM2&nbsp;: I/O base 0x2F8, IRQ 3</para>
+ </listitem>
+
+ <listitem>
+ <para>COM3&nbsp;: I/O base 0x3E8, IRQ 4</para>
+ </listitem>
+
+ <listitem>
+ <para>COM4&nbsp;: I/O base 0x2E8, IRQ 3</para>
+ </listitem>
+ </orderedlist></para>
+ </listitem>
+
+ <listitem>
+ <para>Puis, vous devrez déterminer à quoi ce port virtuel sera connecté.
+ Pour chaque port série virtuel, vous avez les options suivantes&nbsp;:</para>
+
+ <para><itemizedlist>
+ <listitem>
+ <para>Vous pouvez décider que le port série sera
+ <quote>déconnecté</quote>, ce qui signifie que l'invité le verra
+ comme un matériel mais il se comportera comme si aucun câble
+ n'y a été connecté.</para>
+ </listitem>
+
+ <listitem>
+ <para>Vous pouvez connecter le port série virtuel à un port série
+ physique de votre hôte (sur un hôte Windows, cela sera un nom
+ du type COM1&nbsp;; sur des hôtes Linux ou OpenSolaris, ce sera
+ un n&oelig;ud de périphérique comme <computeroutput>/dev/ttyS0</computeroutput>).
+ VirtualBox redirigera simplement toutes les données reçues et
+ envoyées depuis et vers le port série virtuel sur ce port
+ physique.</para>
+ </listitem>
+
+ <listitem>
+ <para>Vous pouvez dire à VirtualBox de connecter le port série
+ virtuel à un tuyau logiciel sur l'hôte. Cela dépend de votre
+ système d'exploitation&nbsp;:<itemizedlist>
+ <listitem>
+ <para>Sur un hôte Windows, les données seront envoyées et
+ reçues à travers un tuyau nommé. Vous pouvez utiliser un
+ programme conducteur appelé VMware Serial Line Gateway,
+ disponible en téléchargement sur
+ <literal> <ulink url="http://www.l4ka.org/tools/vmwaregateway.php">http://www.l4ka.org/tools/vmwaregateway.php</ulink></literal>.
+ Cet outil fournit un mode serveur fixe appelé tuyau sur
+ <computeroutput>\\.\pipe\vmwaredebug</computeroutput> et connecte les
+ connexions TCP entrant sur le port 567 avec le tuyau nommé.</para>
+ </listitem>
+
+ <listitem>
+ <para>Sur un hôte Mac, Linux ou OpenSolaris, un socket de
+ domaine local est utilisé à la place. Sur Linux, plusieurs
+ outils peuvent se connecter à un socket du domaine local
+ ou en créer un en mode serveur. L'outil le plus flexible
+ est <computeroutput>socat</computeroutput>, disponible
+ comme partie intégrante de beaucoup de distributions.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>Dans ce cas, vous pouvez configurer si VirtualBox devrait
+ créer lui-même le tuyau nommé (ou, sur des hôtes non-Windows,
+ le socket du domaine local) ou si VirtualBox devrait supposer
+ que le tuyau (ou le socket) existe déjà. Avec les options en
+ ligne de commande de VBoxManage, cela s'appelle respectivement
+ le mode <quote>Serveur</quote> ou <quote>Client</quote>.</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+ </orderedlist>Vous pouvez configurer jusqu'à deux ports série simultanément
+ par machine virtuelle, mais vous pouvez utiliser n'importe quel numéro de
+ port au-dessus de cette limite. Par exemple, vous pouvez configurer deux
+ ports série capables de fonctionner avec COM2 et COM4 dans l'invité.</para>
+ </sect1>
+
+ <sect1>
+ <title>Support USB</title>
+
+ <sect2 id="settings-usb">
+ <title>Paramètres USB</title>
+
+ <para>La section <quote>USB</quote> dans la fenêtre de paramètres d'une
+ machine virtuelle vous permet de configurer le support USB sophistiqué de
+ VirtualBox.</para>
+
+ <para>VirtualBox peut permettre aux machines virtuelles d'accéder directement
+ aux périphériques USB de votre hôte. Pour cela, VirtualBox présente au
+ système d'exploitation invité un contrôleur USB virtuel. Dès que le système
+ invité commence à utiliser un périphérique USB, celui-ci sera indisponible
+ sur l'hôte.<note>
+ <orderedlist>
+ <listitem>
+ <para>Soyez prudent avec les périphériques USB actuellement utilisés
+ sur l'hôte&nbsp;! Par exemple, si vous autorisez votre invité à
+ se connecter à votre disque dur USB actuellement monté sur l'hôte,
+ lorsque l'invité est activé, il sera déconnecté de l'hôte sans
+ être éteint proprement. Cela peut causer une perte de données.</para>
+ </listitem>
+
+ <listitem>
+ <para>Les hôtes Solaris ont quelques limites connus concernant le
+ support USB&nbsp;; merci de voir le <xref linkend="KnownIssues" />.</para>
+ </listitem>
+ </orderedlist>
+ </note></para>
+
+ <para>En plus de permettre l'accès par l'invité à vos périphériques USB
+ locaux, VirtualBox permet même à votre invité de se connecter à des
+ périphériques USB distants en utilisant le protocole VRDP. Pour des détails
+ à ce sujet, voir le <xref linkend="usb-over-rdp" />.</para>
+
+ <para>Dans la boîte de dialogue des paramètres, vous pouvez d'abord
+ configurer si l'USB est disponible dans l'invité et en plus aussi choisir
+ d'activer le contrôleur USB 2.0 (EHCI) pour l'invité. Dans ce cas, vous
+ pouvez déterminer en détails quels périphériques sont disponibles. Pour
+ cela, vous devez créer ce que l'on appelle des « filtres » en spécifiant
+ certaines propriétés du périphérique USB.</para>
+
+ <para>Un clic sur le bouton <quote>+</quote> à droite de la fenêtre
+ <quote>Filtres de périphérique USB</quote>, crée un nouveau filtre. Vous
+ pouvez donner un nom au filtre (pour le retrouver plus tard), et spécifier
+ les critères du filtre. Plus vous spécifierez des critères précis, plus les
+ périphériques seront sélectionnés avec précision. Par exemple, si vous ne
+ spécifiez que l'ID du constructeur 046d, tous les périphériques fabriqués
+ par Logitech seront disponibles pour l'hôte. À l'inverse, si vous remplissez
+ tous les champs, le filtre ne s'appliquera qu'à un modèle de périphérique
+ particulier d'un constructeur particulier, pas même aux autres périphériques
+ du même type ayant un numéro de révision et de série différent.</para>
+
+ <para>Dans le détail, les critères suivants sont disponibles&nbsp;:</para>
+
+ <orderedlist>
+ <listitem>
+ <para><emphasis role="bold">ID du constructeur et du produit.</emphasis>
+ Avec l'USB, chaque constructeur de produits USB a un numéro
+ d'identification unique pour le monde entier, l'<quote>ID du
+ constructeur</quote>. De la même façon, chaque ligne de produits est
+ associée à un numéro <quote>ID de produit</quote>. Les deux numéros
+ sont écrits en général en hexadécimal (c'est-à-dire qu'ils sont
+ composés des nombres 0-9 et des lettres A-F), et le signe deux-points
+ sépare l'ID du constructeur et du produit. Par exemple,
+ <computeroutput>046d:c016</computeroutput> s'applique au constructeur
+ Logitech et au produit <quote>M-UV69a Optical Wheel Mouse</quote>.</para>
+
+ <para>Vous pouvez aussi spécifier le nom du <emphasis role="bold">"Fabricant"</emphasis>
+ et du <emphasis role="bold">"Produit"</emphasis> par leur nom.</para>
+
+ <para>Pour lister tous les périphériques USB connectés à votre machine
+ hôte avec leurs IDs de fabricant et de produit respectifs, vous pouvez
+ utiliser la commande
+ suivante (voir le <xref linkend="vboxmanage" />): <screen>VBoxManage list usbhost</screen></para>
+
+ <para>Sur Windows, vous pouvez aussi voir tous les périphériques USB
+ attachés à votre système dans le gestionnaire de périphérique. Sur
+ Linux, vous pouvez utiliser la commande
+ <computeroutput>lsusb</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Numéro de série.</emphasis> Alors que
+ l'ID constructeur et produit sont déjà très spécifiques pour identifier
+ des périphériques USB, si vous avez deux périphériques identiques de
+ la même marque et de la même ligne de produit, vous aurez également
+ besoin de leurs numéros de série pour les filtrer correctement.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Distant.</emphasis> Ce paramètre précise
+ si le périphérique ne sera que local ou que distant (par VRDP), ou
+ l'un ou l'autre.</para>
+ </listitem>
+ </orderedlist>
+
+ <para>Sur un hôte Windows, vous devrez débrancher et reconnecter le
+ périphérique USB pour l'utiliser après lui avoir créé un filtre.</para>
+
+ <para>Par exemple, vous pourriez créer un nouveau filtre USB et préciser
+ un ID vendeur de 046d (Logitech, Inc), un index de fabricant de 1, et
+ <quote>non distant</quote>. Alors, tous les périphériques USB du système
+ hôte fabriqués par Logitech, Inc ayant un index fabricant de 1 seront
+ visible pour le système hôte.</para>
+
+ <para>Plusieurs filtres peuvent sélectionner un seul périphérique - par
+ exemple, un filtre qui sélectionne tous les périphériques Logitech et un
+ qui sélectionne une webcam en particulier.</para>
+
+ <para>Vous pouvez <emphasis role="bold">désactiver</emphasis> des filtres
+ sans les effacer en cliquant sur la case à cocher à côté du nom du filtre.</para>
+ </sect2>
+
+ <sect2>
+ <title>Remarques d'implémentation pour les hôtes Windows et Linux</title>
+
+ <para>Sur les hôtes Windows, un pilote de périphérique en mode noyau
+ fournit un support de proxy USB. Il implémente à la fois un moniteur USB,
+ qui permet à VirtualBox de capturer les périphériques lorsqu'ils sont
+ branchés, et un pilote de périphérique USB pour attribuer les périphériques
+ USB à une machine virtuelle particulière. Contrairement aux versions
+ inférieures à 1.4.0 de VirtualBox, les redémarrages du système ne sont
+ plus nécessaires après avoir installé le pilote. De même, vous n'avez plus
+ besoin de rebrancher les périphériques pour que VirtualBox les attribue.</para>
+
+ <para>Sur les hôtes Linux récents, VirtualBox accède aux périphériques USB
+ par des fichiers spéciaux du système de fichiers. Lorsque VirtualBox est
+ installé, ceux-ci sont rendus disponibles pour tous les utilisateurs dans
+ le groupe système <computeroutput>vboxusers</computeroutput>. Afin de
+ pouvoir accéder à l'USB à partir de systèmes invités, assurez-vous que
+ vous êtes membre de ce groupe.</para>
+
+ <para>Sur les hôtes Linux plus anciens, on accède aux périphériques USB
+ en utilisant le système de fichiers
+ <computeroutput>usbfs</computeroutput>. Du coup, l'utilisateur qui exécute
+ VirtualBox a besoin des droits en lecture et écriture sur le système de
+ fichiers USB. La plupart des distributions fournissent un groupe (comme
+ <computeroutput>usbusers</computeroutput>) auquel il faut ajouter
+ l'utilisateur de VirtualBox. En outre, VirtualBox ne peut attribuer que un
+ périphérique USB d'une machine virtuelle qui n'est pas attribué à un
+ pilote USB de l'hôte Linux. L'entrée <computeroutput>Driver=</computeroutput> de
+ <computeroutput>/proc/bus/usb/devices</computeroutput> vous montrera quels
+ périphériques sont actuellement attribués. Merci de vous référer également
+ au <xref linkend="usb_linux" /> pour des détails sur <computeroutput>usbfs</computeroutput>.</para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Dossiers partagés</title>
+
+ <para>Les répertoires partagés vous permettent d'échanger facilement des
+ données entre une machine virtuelle et votre hôte. Cette fonctionnalité exige
+ que les additions invité soient installés sur une machine virtuelle et
+ est décrite en détails au <xref linkend="sharedfolders" />.</para>
+
+ </sect1>
+
+ <sect1 id="efi">
+ <title>Firmware alternatif (EFI)</title>
+
+ <para>À partir de la version 3.1, VirtualBox inclut le support expérimental
+ de l'Extensible Firmware Interface (EFI) (interface extensible de firmware),
+ qui est un nouveau standard industriel conçu pour remplacer éventuellement
+ le BIOS de base en tant qu'interface primaire pour amorcer les ordinateurs,
+ et certains services systèmes plus tard.</para>
+
+ <para>VirtualBox utilise par défaut le firmware BIOS pour les machines
+ virtuelles. Pour utiliser l'EFI pour une machine virtuelle donnée, vous
+ pouvez activer EFI dans la boîte de dialogue <quote>paramètres</quote> de la
+ machine (voir le chapitre <xref linkend="settings-motherboard" />). Sinon,
+ vous pouvez utiliser l'interface <computeroutput>VBoxManage</computeroutput>
+ en ligne de commande comme ceci &nbsp;: <screen>VBoxManage modifyvm "Nom VM" --firmware efi</screen>
+ Pour utiliser BIOS à nouveau, utilisez&nbsp;: <screen>VBoxManage modifyvm "Nom VM" --firmware bios</screen>Un
+ des utilisateurs remarquables d'EFI est le Mac OS X d'Aple, mais les Linux
+ récents (tels que Fedora 11)et les Windows récents (à partir de Vista)
+ peuvent être démarrés en utilisant l'EFI.</para>
+
+ <para>Une autre utilisation possible d'EFI dans VirtualBox est le
+ développement et le test des applications EFI, sans amorcer d'OS.</para>
+
+ <para>Notez que le support d'EFI par VirtualBox et expérimental et il sera
+ adapté en fonction du développement d'EFI et au fur et à mesure de son
+ expansion. Si les invités Mac OS X et Linux sont connus pour très bien
+ fonctionner, les invités Windows sont actuellement incapables de démarrer en
+ utilisant EFI.</para>
+
+ <sect2 id="efividmode">
+ <title>Modes graphiques en EFI</title>
+
+ <para>EFI fournit deux interfaces graphiques différentes : GOP (Graphics
+ Output Protocol) et UGA (Universal Graphics Adapter). Mac OS X utilise
+ GOP, alors que Linux a tendance à utiliser UGA. VirtualBox fournit une
+ option de configuration pour contrôler la taille du tampon de trame
+ (framebuffer) pour les deux interfaces.</para>
+
+ <para>Pour contrôler GOP, utilisez la commande
+ <computeroutput>VBoxManage</computeroutput> suivante&nbsp;:
+ <screen>VBoxManage setextradata "Nom VM" VBoxInternal2/EfiGopMode N</screen>
+ Où N peut être un parmi 0,1,2,3,4, se rapportant respectivement à la
+ résolution d'écran 640x480, 800x600, 1024x768, 1280x1024, 1440x900.</para>
+
+ <para>Pour modifier la résolution UGA&nbsp;: <screen>VBoxManage setextradata "nom VM" VBoxInternal2/UgaHorizontalResolution 1440
+VBoxManage setextradata "nom VM" VBoxInternal2/UgaVerticalResolution 900</screen></para>
+
+ <para>Le mode graphique de GOP et d'UGA ne peut être modifié que quand la
+ VM est éteinte et il reste en l'état jusqu'à ce qu'il soit modifié.</para>
+ </sect2>
+ </sect1>
+</chapter>
diff --git a/doc/manual/fr_FR/user_ChangeLog.xml b/doc/manual/fr_FR/user_ChangeLog.xml
new file mode 100644
index 00000000..71fd731d
--- /dev/null
+++ b/doc/manual/fr_FR/user_ChangeLog.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+ "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<chapter id="ChangeLog">
+ <title>Change log</title>
+
+ <para>This section summarizes the changes between VirtualBox versions. Note
+ that this change log is not exhaustive; not all changes are listed.</para>
+
+ <para>VirtualBox version numbers consist of three numbers separated by dots
+ where the first and second number represent the major version and the 3rd number
+ the minor version. Minor version numbers of official releases are always even.
+ An odd minor version number represents an internal development or test build.
+ In addition, each build contains a revision number.</para>
+
+<!--$VIRTUALBOX_CHANGELOG_IMPL-->
+
+ <para>With VirtualBox 3.2, changelog information for versions before 2.0 was removed in
+ order to save space. To access this information, please consult the User Manual of
+ VirtualBox version 3.1 or earlier.</para>
+
+</chapter>
diff --git a/doc/manual/fr_FR/user_Frontends.xml b/doc/manual/fr_FR/user_Frontends.xml
new file mode 100644
index 00000000..9231d428
--- /dev/null
+++ b/doc/manual/fr_FR/user_Frontends.xml
@@ -0,0 +1,785 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<chapter>
+ <title>Remote virtual machines</title>
+
+ <sect1>
+ <title id="vrde">Remote display (VRDP support)</title>
+
+ <para>VirtualBox can display virtual machines remotely, meaning that a
+ virtual machine can execute on one machine even though the machine will be
+ displayed on a second computer, and the machine will be controlled from
+ there as well, as if the virtual machine was running on that second
+ computer.</para>
+
+ <para>For maximum flexibility, starting with VirtualBox 4.0, VirtualBox
+ implements remote machine display through a generic extension interface,
+ the VirtualBox Remote Desktop Extension (VRDE). The base open-source
+ VirtualBox package only provides this interface, while implementations can
+ be supplied by third parties with VirtualBox extension packages, which
+ must be installed separately from the base package. See <xref
+ linkend="intro-installing" /> for more information.</para>
+
+ <para>Oracle provides support for the <emphasis role="bold">VirtualBox
+ Remote Display Protocol (VRDP)</emphasis> in such a VirtualBox extension
+ package. When this package is installed, VirtualBox versions 4.0 and later
+ support VRDP the same way as binary (non-open-source) versions of
+ VirtualBox before 4.0 did.</para>
+
+ <para>VRDP is a backwards-compatible extension to Microsoft's Remote
+ Desktop Protocol (RDP). Typically graphics updates and audio are sent from
+ the remote machine to the client, while keyboard and mouse events are sent
+ back. As a result, you can use any standard RDP client to control the
+ remote VM.</para>
+
+ <para>Even when the extension is installed, the VRDP server is disabled by
+ default. It can easily be enabled on a per-VM basis either in the
+ VirtualBox Manager in the "Display" settings (see <xref
+ linkend="settings-display" />) or with
+ <computeroutput>VBoxManage</computeroutput>:<screen>VBoxManage modifyvm "VM name" --vrde on</screen></para>
+
+ <para>If you use <computeroutput>VBoxHeadless</computeroutput> (described
+ further below), VRDP support will be automatically enabled since
+ VBoxHeadless has no other means of output.</para>
+
+ <sect2 id="rdp-viewers">
+ <title>Common third-party RDP viewers</title>
+
+ <para>Since VRDP is backwards-compatible to RDP, you can use any
+ standard RDP viewer to connect to such a remote virtual machine
+ (examples follow below). For this to work, you must specify the
+ <emphasis role="bold">IP address</emphasis> of your
+ <emphasis>host</emphasis> system (not of the virtual machine!) as the
+ server address to connect to, as well as the <emphasis role="bold">port
+ number</emphasis> that the RDP server is using.</para>
+
+ <para>By default, VRDP uses TCP port
+ <computeroutput>3389</computeroutput>. You will need to change the
+ default port if you run more than one VRDP server, since the port can
+ only be used by one server at a time; you might also need to change it
+ on Windows hosts since the default port might already be used by the RDP
+ server that is built into Windows itself. Ports 5000 through 5050 are
+ typically not used and might be a good choice.</para>
+
+ <para>The port can be changed either in the "Display" settings of the
+ graphical user interface or with
+ <computeroutput>--vrdeport</computeroutput> option of the
+ <computeroutput>VBoxManage modifyvm</computeroutput> command. You can
+ specify a comma-separated list of ports or ranges of ports. Use a dash
+ between two port numbers to specify a range. The VRDP server will bind
+ to <emphasis role="bold">one</emphasis> of available ports from the
+ specified list. For example, <computeroutput>VBoxManage modifyvm "VM
+ name" --vrdeport 5000,5010-5012</computeroutput> will configure the
+ server to bind to one of the ports 5000, 5010, 5011 or 5012. See <xref
+ linkend="vboxmanage-modifyvm" /> for details.</para>
+
+ <para>The actual port used by a running VM can be either queried with
+ <computeroutput>VBoxManage showvminfo</computeroutput> command or seen
+ in the GUI on the "Runtime" tab of the "Session Information Dialog",
+ which is accessible via the "Machine" menu of the VM window.</para>
+
+ <para>Here follow examples for the most common RDP viewers:<itemizedlist>
+ <listitem>
+ <para>On Windows, you can use the Microsoft Terminal Services
+ Connector (<computeroutput>mstsc.exe</computeroutput>) that ships
+ with Windows. You can start it by bringing up the "Run" dialog
+ (press the Windows key and "R") and typing "mstsc". You can also
+ find it under "Start" -&gt; "All Programs" -&gt; "Accessories"
+ -&gt; "Remote Desktop Connection". If you use the "Run" dialog,
+ you can type in options directly:<screen>mstsc 1.2.3.4[:3389]</screen></para>
+
+ <para>Replace "1.2.3.4" with the host IP address, and 3389 with a
+ different port if necessary.</para>
+
+ <note>
+ <para>When connecting to localhost in order to test the
+ connection, the addresses
+ <computeroutput>localhost</computeroutput> and
+ <computeroutput>127.0.0.1</computeroutput> might not work using
+ <computeroutput>mstsc.exe</computeroutput>. Instead, the address
+ <computeroutput>127.0.0.2[:3389]</computeroutput> has to be
+ used.</para>
+ </note>
+ </listitem>
+
+ <listitem>
+ <para>On other systems, you can use the standard open-source
+ <computeroutput>rdesktop</computeroutput> program. This ships with
+ most Linux distributions, but VirtualBox also comes with a
+ modified variant of rdesktop for remote USB support (see <xref
+ linkend="usb-over-rdp" /> below).</para>
+
+ <para>With rdesktop, use a command line such as the
+ following:<screen>rdesktop -a 16 -N 1.2.3.4:3389</screen></para>
+
+ <para>As said for the Microsoft viewer above, replace "1.2.3.4"
+ with the host IP address, and 3389 with a different port if
+ necessary. The <computeroutput>-a 16</computeroutput> option
+ requests a color depth of 16 bits per pixel, which we recommend.
+ (For best performance, after installation of the guest operating
+ system, you should set its display color depth to the same value).
+ The <computeroutput>-N</computeroutput> option enables use of the
+ NumPad keys.</para>
+ </listitem>
+
+ <listitem>
+ <para>If you run the KDE desktop, you might prefer
+ <computeroutput>krdc</computeroutput>, the KDE RDP viewer. The
+ command line would look like this:<screen>krdc --window --high-quality rdp:/1.2.3.4[:3389]</screen></para>
+
+ <para>Again, replace "1.2.3.4" with the host IP address, and 3389
+ with a different port if necessary. The "rdp:/" bit is required
+ with krdc to switch it into RDP mode.</para>
+ </listitem>
+
+ <listitem>
+ <para>With Sun Ray thin clients you can use
+ <computeroutput>uttsc</computeroutput>, which is part of the
+ Sun Ray Windows Connector package. See the corresponding
+ documentation for details.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect2>
+
+ <sect2 id="vboxheadless">
+ <title>VBoxHeadless, the remote desktop server</title>
+
+ <para>While any VM started from the VirtualBox Manager is capable of
+ running virtual machines remotely, it is not convenient to have to run
+ the full-fledged GUI if you never want to have VMs displayed locally in
+ the first place. In particular, if you are running server hardware whose
+ only purpose is to host VMs, and all your VMs are supposed to run
+ remotely over VRDP, then it is pointless to have a graphical user
+ interface on the server at all -- especially since, on a Linux or
+ Solaris host, the VirtualBox manager comes with dependencies on the Qt
+ and SDL libraries. This is inconvenient if you would rather not have the
+ X Window system on your server at all.</para>
+
+ <para>VirtualBox therefore comes with yet another front-end called
+ <computeroutput>VBoxHeadless</computeroutput>, which produces no visible
+ output on the host at all, but instead only delivers VRDP data. This
+ front-end has no dependencies on the X Window system on Linux and
+ Solaris hosts.<footnote>
+ <para>Before VirtualBox 1.6, the headless server was called
+ <computeroutput>VBoxVRDP</computeroutput>. For the sake of backwards
+ compatibility, the VirtualBox installation still installs an
+ executable with that name as well.</para>
+ </footnote></para>
+
+ <para>To start a virtual machine with
+ <computeroutput>VBoxHeadless</computeroutput>, you have two
+ options:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>You can use <screen>VBoxManage startvm "VM name" --type headless</screen>The
+ extra <computeroutput>--type</computeroutput> option causes
+ VirtualBox to use <computeroutput>VBoxHeadless</computeroutput> as
+ the front-end to the internal virtualization engine instead of the
+ Qt front-end.</para>
+ </listitem>
+
+ <listitem>
+ <para>The alternative is to use
+ <computeroutput>VBoxHeadless</computeroutput> directly, as
+ follows:<screen>VBoxHeadless --startvm &lt;uuid|name&gt;</screen></para>
+
+ <para>This way of starting the VM is preferred because you can see
+ more detailed error messages, especially for early failures before
+ the VM execution is started. If you have trouble with
+ <computeroutput>VBoxManage startvm</computeroutput>, it can help
+ greatly to start <computeroutput>VBoxHeadless</computeroutput>
+ directly to diagnose the problem cause.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Note that when you use
+ <computeroutput>VBoxHeadless</computeroutput> to start a VM, since the
+ headless server has no other means of output, the VRDP server will
+ <emphasis>always</emphasis> be enabled, regardless of whether you had
+ enabled the VRDP server in the VM's settings. If this is undesirable
+ (for example because you want to access the VM via
+ <computeroutput>ssh</computeroutput> only), start the VM like
+ this:<screen>VBoxHeadless --startvm &lt;uuid|name&gt; --vrde=off</screen>To
+ have the VRDP server enabled depending on the VM configuration, as the
+ other front-ends would, use this:<screen>VBoxHeadless --startvm &lt;uuid|name&gt; --vrde=config</screen></para>
+ </sect2>
+
+ <sect2>
+ <title>Step by step: creating a virtual machine on a headless
+ server</title>
+
+ <para>The following instructions may give you an idea how to create a
+ virtual machine on a headless server over a network connection. We will
+ create a virtual machine, establish an RDP connection and install a
+ guest operating system -- all without having to touch the headless
+ server. All you need is the following:</para>
+
+ <para><orderedlist>
+ <listitem>
+ <para>VirtualBox on a server machine with a supported host
+ operating system. The VirtualBox extension pack for the VRDP
+ server must be installed (see the previous section). For the
+ following example, we will assume a Linux server.</para>
+ </listitem>
+
+ <listitem>
+ <para>An ISO file accessible from the server, containing the
+ installation data for the guest operating system to install (we
+ will assume Windows XP in the following example).</para>
+ </listitem>
+
+ <listitem>
+ <para>A terminal connection to that host through which you can
+ access a command line (e.g. via
+ <computeroutput>ssh</computeroutput>).</para>
+ </listitem>
+
+ <listitem>
+ <para>An RDP viewer on the remote client; see <xref
+ linkend="rdp-viewers" /> above for examples.</para>
+ </listitem>
+ </orderedlist>Note again that on the server machine, since we will
+ only use the headless server, neither Qt nor SDL nor the X Window system
+ will be needed.</para>
+
+ <para><orderedlist>
+ <listitem>
+ <para>On the headless server, create a new virtual machine:</para>
+
+ <screen>VBoxManage createvm --name "Windows XP" --ostype WindowsXP --register</screen>
+
+ <para>Note that if you do not specify
+ <computeroutput>--register</computeroutput>, you will have to
+ manually use the <computeroutput>registervm</computeroutput>
+ command later.</para>
+
+ <para>Note further that you do not need to specify
+ <computeroutput>--ostype</computeroutput>, but doing so selects
+ some sane default values for certain VM parameters, for example
+ the RAM size and the type of the virtual network device. To get a
+ complete list of supported operating systems you can use</para>
+
+ <screen>VBoxManage list ostypes</screen>
+ </listitem>
+
+ <listitem>
+ <para>Make sure the settings for this VM are appropriate for the
+ guest operating system that we will install. For example:<screen>VBoxManage modifyvm "Windows XP" --memory 256 --acpi on --boot1 dvd --nic1 nat</screen></para>
+ </listitem>
+
+ <listitem>
+ <para>Create a virtual hard disk for the VM (in this case, 10GB in
+ size):<screen>VBoxManage createhd --filename "WinXP.vdi" --size 10000</screen></para>
+ </listitem>
+
+ <listitem>
+ <para>Add an IDE Controller to the new VM:<screen>VBoxManage storagectl "Windows XP" --name "IDE Controller"
+ --add ide --controller PIIX4</screen></para>
+ </listitem>
+
+ <listitem>
+ <para>Set the VDI file created above as the first virtual hard
+ disk of the new VM:<screen>VBoxManage storageattach "Windows XP" --storagectl "IDE Controller"
+ --port 0 --device 0 --type hdd --medium "WinXP.vdi"</screen></para>
+ </listitem>
+
+ <listitem>
+ <para>Attach the ISO file that contains the operating system
+ installation that you want to install later to the virtual
+ machine, so the machine can boot from it:<screen>VBoxManage storageattach "Windows XP" --storagectl "IDE Controller"
+ --port 0 --device 1 --type dvddrive --medium /full/path/to/iso.iso</screen></para>
+ </listitem>
+
+ <listitem>
+ <para>Start the virtual machine using VBoxHeadless:<screen>VBoxHeadless --startvm "Windows XP"</screen></para>
+
+ <para>If everything worked, you should see a copyright notice. If,
+ instead, you are returned to the command line, then something went
+ wrong.</para>
+ </listitem>
+
+ <listitem>
+ <para>On the client machine, fire up the RDP viewer and try to
+ connect to the server (see <xref linkend="rdp-viewers" /> above
+ for how to use various common RDP viewers).</para>
+
+ <para>You should now be seeing the installation routine of your
+ guest operating system remotely in the RDP viewer.</para>
+ </listitem>
+ </orderedlist></para>
+ </sect2>
+
+ <sect2 id="usb-over-rdp">
+ <title>Remote USB</title>
+
+ <para>As a special feature on top of the VRDP support, VirtualBox
+ supports remote USB devices over the wire as well. That is, the
+ VirtualBox guest that runs on one computer can access the USB devices of
+ the remote computer on which the VRDP data is being displayed the same
+ way as USB devices that are connected to the actual host. This allows
+ for running virtual machines on a VirtualBox host that acts as a server,
+ where a client can connect from elsewhere that needs only a network
+ adapter and a display capable of running an RDP viewer. When USB devices
+ are plugged into the client, the remote VirtualBox server can access
+ them.</para>
+
+ <para>For these remote USB devices, the same filter rules apply as for
+ other USB devices, as described with <xref linkend="settings-usb" />.
+ All you have to do is specify "Remote" (or "Any") when setting up these
+ rules.</para>
+
+ <para>Accessing remote USB devices is only possible if the RDP client
+ supports this extension. On Linux and Solaris hosts, the VirtualBox
+ installation provides a suitable VRDP client called
+ <computeroutput>rdesktop-vrdp</computeroutput>. Recent versions of
+ <computeroutput>uttsc</computeroutput>, a client tailored for the use
+ with Sun Ray thin clients, also support accessing remote USB devices.
+ RDP clients for other platforms will be provided in future VirtualBox
+ versions.</para>
+
+ <para>To make a remote USB device available to a VM,
+ <computeroutput>rdesktop-vrdp</computeroutput> should be started as
+ follows:<screen>rdesktop-vrdp -r usb -a 16 -N my.host.address</screen>Note
+ that <computeroutput>rdesktop-vrdp</computeroutput> can access USB
+ devices only through <computeroutput>/proc/bus/usb</computeroutput>.
+ Please refer to <xref linkend="usb_linux" /> for further details on how
+ to properly set up the permissions. Furthermore it is advisable to
+ disable automatic loading of any host driver on the remote host which
+ might work on USB devices to ensure that the devices are accessible by
+ the RDP client. If the setup was properly done on the remote host,
+ plug/unplug events are visible on the VBox.log file of the VM.</para>
+ </sect2>
+
+ <sect2 id="vbox-auth">
+ <title>RDP authentication</title>
+
+ <para>For each virtual machine that is remotely accessible via RDP, you
+ can individually determine if and how client connections are
+ authenticated. For this, use <computeroutput>VBoxManage
+ modifyvm</computeroutput> command with the
+ <computeroutput>--vrdeauthtype</computeroutput> option; see <xref
+ linkend="vboxmanage-modifyvm" /> for a general introduction. Three
+ methods of authentication are available:<itemizedlist>
+ <listitem>
+ <para>The "null" method means that there is no authentication at
+ all; any client can connect to the VRDP server and thus the
+ virtual machine. This is, of course, very insecure and only to be
+ recommended for private networks.</para>
+ </listitem>
+
+ <listitem>
+ <para>The "external" method provides external authentication
+ through a special authentication library. VirtualBox ships with
+ two such authentication libraries:<orderedlist>
+ <listitem>
+ <para>The default authentication library,
+ <computeroutput>VBoxAuth</computeroutput>, authenticates
+ against user credentials of the hosts. Depending on the host
+ platform, this means:<itemizedlist>
+ <listitem>
+ <para>On Linux hosts,
+ <computeroutput>VBoxAuth.so</computeroutput>
+ authenticates users against the host's PAM
+ system.</para>
+ </listitem>
+
+ <listitem>
+ <para>On Windows hosts,
+ <computeroutput>VBoxAuth.dll</computeroutput>
+ authenticates users against the host's WinLogon
+ system.</para>
+ </listitem>
+
+ <listitem>
+ <para>On Mac OS X hosts,
+ <computeroutput>VBoxAuth.dylib</computeroutput>
+ authenticates users against the host's directory
+ service.<footnote>
+ <para>Support for Mac OS X was added in version
+ 3.2.</para>
+ </footnote></para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>In other words, the "external" method per default
+ performs authentication with the user accounts that exist on
+ the host system. Any user with valid authentication
+ credentials is accepted, i.e. the username does not have to
+ correspond to the user running the VM.</para>
+ </listitem>
+
+ <listitem>
+ <para>An additional library called
+ <computeroutput>VBoxAuthSimple</computeroutput> performs
+ authentication against credentials configured in the
+ "extradata" section of a virtual machine's XML settings
+ file. This is probably the simplest way to get
+ authentication that does not depend on a running and
+ supported guest (see below). The following steps are
+ required:<orderedlist>
+ <listitem>
+ <para>Enable
+ <computeroutput>VBoxAuthSimple</computeroutput> with
+ the following command:</para>
+
+ <para><screen>VBoxManage setproperty vrdeauthlibrary "VBoxAuthSimple"</screen></para>
+ </listitem>
+
+ <listitem>
+ <para>To enable the library for a particular VM, you
+ must then switch authentication to external:<screen>VBoxManage modifyvm &lt;vm&gt; --vrdeauthtype external</screen></para>
+
+ <para>Replace
+ <computeroutput>&lt;vm&gt;</computeroutput> with the
+ VM name or UUID.</para>
+ </listitem>
+
+ <listitem>
+ <para>You will then need to configure users and
+ passwords by writing items into the machine's
+ extradata. Since the XML machine settings file, into
+ whose "extradata" section the password needs to be
+ written, is a plain text file, VirtualBox uses hashes
+ to encrypt passwords. The following command must be
+ used:<screen>VBoxManage setextradata &lt;vm&gt; "VBoxAuthSimple/users/&lt;user&gt;" &lt;hash&gt;</screen></para>
+
+ <para>Replace
+ <computeroutput>&lt;vm&gt;</computeroutput> with the
+ VM name or UUID,
+ <computeroutput>&lt;user&gt;</computeroutput> with the
+ user name who should be allowed to log in and
+ <computeroutput>&lt;hash&gt;</computeroutput> with the
+ encrypted password. As an example, to obtain the hash
+ value for the password "secret", you can use the
+ following command:<screen>VBoxManage internalcommands passwordhash "secret"</screen></para>
+
+ <para>This will print
+ <screen>2bb80d537b1da3e38bd30361aa855686bde0eacd7162fef6a25fe97bf527a25b</screen>
+ You can then use VBoxManage setextradata to store this
+ value in the machine's "extradata" section.</para>
+
+ <para>As example, combined together, to set the
+ password for the user "john" and the machine "My VM"
+ to "secret", use this command:<screen>VBoxManage setextradata "My VM" "VBoxAuthSimple/users/john"
+ 2bb80d537b1da3e38bd30361aa855686bde0eacd7162fef6a25fe97bf527a25b</screen></para>
+ </listitem>
+ </orderedlist></para>
+ </listitem>
+ </orderedlist></para>
+ </listitem>
+
+ <listitem>
+ <para>Finally, the "guest" authentication method performs
+ authentication with a special component that comes with the Guest
+ Additions; as a result, authentication is not performed on the
+ host, but with the <emphasis>guest</emphasis> user
+ accounts.</para>
+
+ <para>This method is currently still in testing and not yet
+ supported.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>In addition to the methods described above, you can replace the
+ default "external" authentication module with any other module. For
+ this, VirtualBox provides a well-defined interface that allows you to
+ write your own authentication module. This is described in detail in the
+ VirtualBox Software Development Kit (SDK) reference; please see <xref
+ linkend="VirtualBoxAPI" /> for details.</para>
+ </sect2>
+
+ <sect2 id="vrde-crypt">
+ <title>RDP encryption</title>
+
+ <para>RDP features data stream encryption, which is based on the RC4
+ symmetric cipher (with keys up to 128bit). The RC4 keys are being
+ replaced in regular intervals (every 4096 packets).</para>
+
+ <para>RDP provides different authentication methods:<orderedlist>
+ <listitem>
+ <para>Historically, RDP4 authentication was used, with which the
+ RDP client does not perform any checks in order to verify the
+ identity of the server it connects to. Since user credentials can
+ be obtained using a "man in the middle" (MITM) attack, RDP4
+ authentication is insecure and should generally not be
+ used.</para>
+ </listitem>
+
+ <listitem>
+ <para>RDP5.1 authentication employs a server certificate for which
+ the client possesses the public key. This way it is guaranteed
+ that the server possess the corresponding private key. However, as
+ this hard-coded private key became public some years ago, RDP5.1
+ authentication is also insecure.</para>
+ </listitem>
+
+ <listitem>
+ <para>RDP5.2 authentication uses the Enhanced RDP Security, which
+ means that an external security protocol is used to secure the
+ connection. RDP4 and RDP5.1 use Standard RDP Security.
+ VRDP server supports Enhanced RDP Security with TLS protocol and,
+ as a part of TLS handshake, sends the server certificate to the
+ client.</para>
+
+ <para>The <computeroutput>Security/Method</computeroutput> VRDE
+ property sets the desired security method, which is used for a
+ connection. Valid values are:<itemizedlist>
+ <listitem>
+ <computeroutput>Negotiate</computeroutput> - both Enhanced (TLS)
+ and Standard RDP Security connections are allowed. The security
+ method is negotiated with the client. This is the default setting.
+ </listitem>
+
+ <listitem>
+ <computeroutput>RDP</computeroutput> - only Standard RDP Security
+ is accepted.
+ </listitem>
+
+ <listitem>
+ <computeroutput>TLS</computeroutput> - only Enhanced RDP Security
+ is accepted. The client must support TLS.
+ </listitem>
+ </itemizedlist>
+ For example the following command allows a client to use either Standard
+ or Enhanced RDP Security connection:
+ <screen>vboxmanage modifyvm NAME --vrdeproperty "Security/Method=negotiate"</screen>
+ </para>
+
+ <para>If the <computeroutput>Security/Method</computeroutput> property is
+ set to either <computeroutput>Negotiate</computeroutput> or
+ <computeroutput>TLS</computeroutput>, the TLS protocol will be automatically
+ used by the server, if the client supports TLS. However in order to use TLS
+ the server must possess the Server Certificate, the Server Private Key and the
+ Certificate Authority (CA) Certificate. The following example shows how to
+ generate a server certificate.<orderedlist>
+ <listitem>
+ Create a CA self signed certificate:
+ <screen>openssl req -new -x509 -days 365 -extensions v3_ca -keyout ca_key_private.pem -out ca_cert.pem</screen>
+ </listitem>
+
+ <listitem>
+ Generate a server private key and a request for signing:
+ <screen>openssl genrsa -out server_key_private.pem
+openssl req -new -key server_key_private.pem -out server_req.pem</screen>
+ </listitem>
+
+ <listitem>
+ Generate the server certificate:
+ <screen>openssl x509 -req -days 365 -in server_req.pem -CA ca_cert.pem -CAkey ca_key_private.pem -set_serial 01 -out server_cert.pem</screen>
+ </listitem>
+ </orderedlist>
+ The server must be configured to access the required files:
+ <screen>vboxmanage modifyvm NAME --vrdeproperty "Security/CACertificate=path/ca_cert.pem"</screen>
+ <screen>vboxmanage modifyvm NAME --vrdeproperty "Security/ServerCertificate=path/server_cert.pem"</screen>
+ <screen>vboxmanage modifyvm NAME --vrdeproperty "Security/ServerPrivateKey=path/server_key_private.pem"</screen>
+ </para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>As the client that connects to the server determines what type
+ of encryption will be used, with rdesktop, the Linux RDP viewer, use the
+ <computeroutput>-4</computeroutput> or
+ <computeroutput>-5</computeroutput> options.</para>
+ </sect2>
+
+ <sect2 id="vrde-multiconnection">
+ <title>Multiple connections to the VRDP server</title>
+
+ <para>The VRDP server of VirtualBox supports multiple simultaneous
+ connections to the same running VM from different clients. All connected
+ clients see the same screen output and share a mouse pointer and
+ keyboard focus. This is similar to several people using the same
+ computer at the same time, taking turns at the keyboard.</para>
+
+ <para>The following command enables multiple connection mode: <screen>VBoxManage modifyvm "VM name" --vrdemulticon on</screen></para>
+ </sect2>
+
+ <sect2 id="vrde-multimonitor">
+ <title>Multiple remote monitors</title>
+
+ <para>To access two or more remote VM displays you have to enable the
+ VRDP multiconnection mode (see <xref
+ linkend="vrde-multiconnection" />).</para>
+
+ <para>The RDP client can select the virtual monitor number to connect to
+ using the <computeroutput>domain</computeroutput> logon parameter
+ (<computeroutput>-d</computeroutput>). If the parameter ends with
+ <computeroutput>@</computeroutput> followed by a number, VirtualBox
+ interprets this number as the screen index. The primary guest screen is
+ selected with <computeroutput>@1</computeroutput>, the first secondary
+ screen is <computeroutput>@2</computeroutput>, etc.</para>
+
+ <para>The Microsoft RDP6 client does not let you specify a separate
+ domain name. Instead, use
+ <computeroutput>domain\username</computeroutput> in the
+ <computeroutput>Username:</computeroutput> field -- for example,
+ <computeroutput>@2\name</computeroutput>.
+ <computeroutput>name</computeroutput> must be supplied, and must be the
+ name used to log in if the VRDP server is set up to require credentials.
+ If it is not, you may use any text as the username.</para>
+ </sect2>
+
+ <sect2 id="vrde-videochannel">
+ <title>VRDP video redirection</title>
+
+ <para>Starting with VirtualBox 3.2, the VRDP server can redirect video
+ streams from the guest to the RDP client. Video frames are compressed
+ using the JPEG algorithm allowing a higher compression ratio than
+ standard RDP bitmap compression methods. It is possible to increase the
+ compression ratio by lowering the video quality.</para>
+
+ <para>The VRDP server automatically detects video streams in a guest as
+ frequently updated rectangular areas. As a result, this method works
+ with any guest operating system without having to install additional
+ software in the guest; in particular, the Guest Additions are not
+ required.</para>
+
+ <para>On the client side, however, currently only the Windows 7 Remote
+ Desktop Connection client supports this feature. If a client does not
+ support video redirection, the VRDP server falls back to regular bitmap
+ updates.</para>
+
+ <para>The following command enables video redirection: <screen>VBoxManage modifyvm "VM name" --vrdevideochannel on</screen></para>
+
+ <para>The quality of the video is defined as a value from 10 to 100
+ percent, representing a JPEG compression level (where lower numbers mean
+ lower quality but higher compression). The quality can be changed using
+ the following command: <screen>VBoxManage modifyvm "VM name" --vrdevideochannelquality 75</screen></para>
+ </sect2>
+
+ <sect2 id="vrde-customization">
+ <title>VRDP customization</title>
+
+ <para>With VirtualBox 4.0 it is possible to disable display output,
+ mouse and keyboard input, audio, remote USB or clipboard individually in
+ the VRDP server.</para>
+
+ <para>The following commands change corresponding server
+ settings:</para>
+
+ <screen>VBoxManage modifyvm "VM name" --vrdeproperty Client/DisableDisplay=1
+VBoxManage modifyvm "VM name" --vrdeproperty Client/DisableInput=1
+VBoxManage modifyvm "VM name" --vrdeproperty Client/DisableUSB=1
+VBoxManage modifyvm "VM name" --vrdeproperty Client/DisableAudio=1
+VBoxManage modifyvm "VM name" --vrdeproperty Client/DisableClipboard=1
+VBoxManage modifyvm "VM name" --vrdeproperty Client/DisableUpstreamAudio=1</screen>
+
+ <para>To reenable a feature use a similar command without the trailing
+ 1. For example: <screen>VBoxManage modifyvm "VM name" --vrdeproperty Client/DisableDisplay=</screen></para>
+
+ <para>These properties were introduced with VirtualBox 3.2.10. However,
+ in the 3.2.x series, it was necessary to use the following commands to
+ alter these settings instead:</para>
+
+ <screen>VBoxManage setextradata "VM name" "VRDP/Feature/Client/DisableDisplay" 1
+VBoxManage setextradata "VM name" "VRDP/Feature/Client/DisableInput" 1
+VBoxManage setextradata "VM name" "VRDP/Feature/Client/DisableUSB" 1
+VBoxManage setextradata "VM name" "VRDP/Feature/Client/DisableAudio" 1
+VBoxManage setextradata "VM name" "VRDP/Feature/Client/DisableClipboard" 1</screen>
+
+ <para>To reenable a feature use a similar command without the trailing
+ 1. For example: <screen>VBoxManage setextradata "VM name" "VRDP/Feature/Client/DisableDisplay"</screen></para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="teleporting">
+ <title>Teleporting</title>
+
+ <para>Starting with version 3.1, VirtualBox supports "teleporting" -- that
+ is, moving a virtual machine over a network from one VirtualBox host to
+ another, while the virtual machine is running. This works regardless of
+ the host operating system that is running on the hosts: you can teleport
+ virtual machines between Solaris and Mac hosts, for example.</para>
+
+ <para>Teleporting requires that a machine be currently running on one
+ host, which is then called the <emphasis role="bold">"source"</emphasis>.
+ The host to which the virtual machine will be teleported will then be
+ called the <emphasis role="bold">"target"</emphasis>; the machine on the
+ target is then configured to wait for the source to contact the target.
+ The machine's running state will then be transferred from the source to
+ the target with minimal downtime.</para>
+
+ <para>Teleporting happens over any TCP/IP network; the source and the
+ target only need to agree on a TCP/IP port which is specified in the
+ teleporting settings.</para>
+
+ <para>At this time, there are a few prerequisites for this to work,
+ however:<orderedlist>
+ <listitem>
+ <para>On the target host, you must configure a virtual machine in
+ VirtualBox with exactly the same hardware settings as the machine on
+ the source that you want to teleport. This does not apply to
+ settings which are merely descriptive, such as the VM name, but
+ obviously for teleporting to work, the target machine must have the
+ same amount of memory and other hardware settings. Otherwise
+ teleporting will fail with an error message.</para>
+ </listitem>
+
+ <listitem>
+ <para>The two virtual machines on the source and the target must
+ share the same storage (hard disks as well as floppy and CD/DVD
+ images). This means that they either use the same iSCSI targets or
+ that the storage resides somewhere on the network and both hosts
+ have access to it via NFS or SMB/CIFS.</para>
+
+ <para>This also means that neither the source nor the target machine
+ can have any snapshots.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>Then perform the following steps:<orderedlist>
+ <listitem>
+ <para>On the <emphasis>target</emphasis> host, configure the virtual
+ machine to wait for a teleport request to arrive when it is started,
+ instead of actually attempting to start the machine. This is done
+ with the following VBoxManage command:<screen>VBoxManage modifyvm &lt;targetvmname&gt; --teleporter on --teleporterport &lt;port&gt;</screen></para>
+
+ <para>where <computeroutput>&lt;targetvmname&gt;</computeroutput> is
+ the name of the virtual machine on the target host and
+ <computeroutput>&lt;port&gt;</computeroutput> is a TCP/IP port
+ number to be used on both the source and the target hosts. For
+ example, use 6000. For details, see <xref
+ linkend="vboxmanage-modifyvm-teleport" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>Start the VM on the target host. You will see that instead of
+ actually running, it will show a progress dialog. indicating that it
+ is waiting for a teleport request to arrive.</para>
+ </listitem>
+
+ <listitem>
+ <para>Start the machine on the <emphasis>source</emphasis> host as
+ usual. When it is running and you want it to be teleported, issue
+ the following command on the source host:<screen>VBoxManage controlvm &lt;sourcevmname&gt; teleport --host &lt;targethost&gt; --port &lt;port&gt;</screen></para>
+
+ <para>where <computeroutput>&lt;sourcevmname&gt;</computeroutput> is
+ the name of the virtual machine on the source host (the machine that
+ is currently running),
+ <computeroutput>&lt;targethost&gt;</computeroutput> is the host or
+ IP name of the target host on which the machine is waiting for the
+ teleport request, and <computeroutput>&lt;port&gt;</computeroutput>
+ must be the same number as specified in the command on the target
+ host. For details, see <xref
+ linkend="vboxmanage-controlvm" />.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>For testing, you can also teleport machines on the same host; in
+ that case, use "localhost" as the hostname on both the source and the
+ target host.<note>
+ <para>In rare cases, if the CPUs of the source and the target are very
+ different, teleporting can fail with an error message, or the target
+ may hang. This may happen especially if the VM is running application
+ software that is highly optimized to run on a particular CPU without
+ correctly checking that certain CPU features are actually present.
+ VirtualBox filters what CPU capabilities are presented to the guest
+ operating system. Advanced users can attempt to restrict these virtual
+ CPU capabilities with the <computeroutput>VBoxManage --modifyvm
+ --cpuid</computeroutput> command; see <xref
+ linkend="vboxmanage-modifyvm-teleport" />.</para>
+ </note></para>
+ </sect1>
+</chapter>
diff --git a/doc/manual/fr_FR/user_Glossary.xml b/doc/manual/fr_FR/user_Glossary.xml
new file mode 100644
index 00000000..4a56e7d4
--- /dev/null
+++ b/doc/manual/fr_FR/user_Glossary.xml
@@ -0,0 +1,496 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<glossary id="Glossary">
+ <glossdiv>
+ <title>A</title>
+
+ <glossentry>
+ <glossterm>ACPI</glossterm>
+
+ <glossdef>
+ <para>Advanced Configuration and Power Interface, an industry
+ specification for BIOS and hardware extensions to configure PC
+ hardware and perform power management. Windows 2000 and higher as well
+ as Linux 2.4 and higher support ACPI. Windows can only enable or
+ disable ACPI support at installation time.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>AHCI</glossterm>
+
+ <glossdef>
+ <para>Advanced Host Controller Interface, the interface that supports
+ SATA devices such as hard disks. See <xref
+ linkend="harddiskcontrollers" />.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>AMD-V</glossterm>
+
+ <glossdef>
+ <para>The hardware virtualization features built into modern AMD
+ processors. See <xref linkend="hwvirt" />.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>API</glossterm>
+
+ <glossdef>
+ <para>Application Programming Interface.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>APIC</glossterm>
+
+ <glossdef>
+ <para>Advanced Programmable Interrupt Controller, a newer version of
+ the original PC PIC (programmable interrupt controller). Most modern
+ CPUs contain an on-chip APIC ("local APIC"). Many systems also contain
+ an I/O APIC (input output APIC) as a separate chip which provides more
+ than 16 IRQs. Windows 2000 and higher use a different kernel if they
+ detect an I/O APIC during installation. Therefore an I/O APIC must not
+ be removed after installation.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>ATA</glossterm>
+
+ <glossdef>
+ <para>Advanced Technology Attachment, an industry standard for hard
+ disk interfaces (synonymous with IDE). See <xref
+ linkend="harddiskcontrollers" />.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+
+ <glossdiv>
+ <title>B</title>
+
+ <glossentry>
+ <glossterm>BIOS</glossterm>
+
+ <glossdef>
+ <para>Basic Input/Output System, the firmware built into most personal
+ computers which is responsible of initializing the hardware after the
+ computer has been turned on and then booting an operating system.
+ VirtualBox ships with its own virtual BIOS that runs when a virtual
+ machine is started.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+
+ <glossdiv>
+ <title>C</title>
+
+ <glossentry>
+ <glossterm>COM</glossterm>
+
+ <glossdef>
+ <para>Microsoft Component Object Model, a programming infrastructure
+ for modular software. COM allows applications to provide application
+ programming interfaces which can be accessed from various other
+ programming languages and applications. VirtualBox makes use of COM
+ both internally and externally to provide a comprehensive API to 3rd
+ party developers.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+
+ <glossdiv>
+ <title>D</title>
+
+ <glossentry>
+ <glossterm>DHCP</glossterm>
+
+ <glossdef>
+ <para>Dynamic Host Configuration Protocol. This allows a networking
+ device in a network to acquire its IP address (and other networking
+ details) automatically, in order to avoid having to configure all
+ devices in a network with fixed IP addresses. VirtualBox has a
+ built-in DHCP server that delivers an IP addresses to a virtual
+ machine when networking is configured to NAT; see <xref
+ linkend="networkingdetails" />.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>DKMS</glossterm>
+
+ <glossdef>
+ <para>Dynamic Kernel Module Support. A framework that simplifies
+ installing and updating external kernel modules on Linux machines; see
+ <xref linkend="externalkernelmodules" />.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+
+ <glossdiv>
+ <title>E</title>
+
+ <glossentry>
+ <glossterm>EFI</glossterm>
+
+ <glossdef>
+ <para>Extensible Firmware Interface, a firmware built into computers
+ which is designed to replace the aging BIOS. Originally designed by
+ Intel, most modern operating systems can now boot on computers which
+ have EFI instead of a BIOS built into them; see <xref
+ linkend="efi" />.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>EHCI</glossterm>
+
+ <glossdef>
+ <para>Enhanced Host Controller Interface, the interface that
+ implements the USB 2.0 standard.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+
+ <glossdiv>
+ <title>G</title>
+
+ <glossentry>
+ <glossterm>GUI</glossterm>
+
+ <glossdef>
+ <para>Graphical User Interface. Commonly used as an antonym to a
+ "command line interface", in the context of VirtualBox, we sometimes
+ refer to the main graphical
+ <computeroutput>VirtualBox</computeroutput> program as the "GUI", to
+ differentiate it from the <computeroutput>VBoxManage</computeroutput>
+ interface.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>GUID</glossterm>
+
+ <glossdef>
+ <para>See UUID.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+
+ <glossdiv>
+ <title>I</title>
+
+ <glossentry>
+ <glossterm>IDE</glossterm>
+
+ <glossdef>
+ <para>Integrated Drive Electronics, an industry standard for hard disk
+ interfaces. See <xref linkend="harddiskcontrollers" />.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>I/O APIC</glossterm>
+
+ <glossdef>
+ <para>See APIC.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>iSCSI</glossterm>
+
+ <glossdef>
+ <para>Internet SCSI; see <xref linkend="storage-iscsi" />.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+
+ <glossdiv>
+ <title>M</title>
+
+ <glossentry>
+ <glossterm>MAC</glossterm>
+
+ <glossdef>
+ <para>Media Access Control, a part of an Ethernet network card. A MAC
+ address is a 6-byte number which identifies a network card. It is
+ typically written in hexadecimal notation where the bytes are
+ separated by colons, such as
+ <computeroutput>00:17:3A:5E:CB:08</computeroutput>.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>MSI</glossterm>
+
+ <glossdef>
+ <para>Message Signalled Interrupts, as supported by modern chipsets
+ such as the ICH9; see <xref linkend="settings-motherboard" />. As
+ opposed to traditional pin-based interrupts, with MSI, a small amount
+ of data can accompany the actual interrupt message. This reduces the
+ amount of hardware pins required, allows for more interrupts and
+ better performance.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+
+ <glossdiv>
+ <title>N</title>
+
+ <glossentry>
+ <glossterm>NAT</glossterm>
+
+ <glossdef>
+ <para>Network Address Translation. A technique to share networking
+ interfaces by which an interface modifies the source and/or target IP
+ addresses of network packets according to specific rules. Commonly
+ employed by routers and firewalls to shield an internal network from
+ the Internet, VirtualBox can use NAT to easily share a host's physical
+ networking hardware with its virtual machines. See <xref
+ linkend="network_nat" />.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+
+ <glossdiv>
+ <title>O</title>
+
+ <glossentry>
+ <glossterm>OVF</glossterm>
+
+ <glossdef>
+ <para>Open Virtualization Format, a cross-platform industry standard
+ to exchange virtual appliances between virtualization products; see
+ <xref linkend="ovf" />.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+
+ <glossdiv>
+ <title>P</title>
+
+ <glossentry>
+ <glossterm>PAE</glossterm>
+
+ <glossdef>
+ <para>Physical Address Extension. This allows accessing more than 4 GB
+ of RAM even in 32-bit environments; see <xref
+ linkend="settings-general-advanced" />.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>PIC</glossterm>
+
+ <glossdef>
+ <para>See APIC.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>PXE</glossterm>
+
+ <glossdef>
+ <para>Preboot Execution Environment, an industry standard for booting
+ PC systems from remote network locations. It includes DHCP for IP
+ configuration and TFTP for file transfer. Using UNDI, a hardware
+ independent driver stack for accessing the network card from bootstrap
+ code is available.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+
+ <glossdiv>
+ <title>R</title>
+
+ <glossentry>
+ <glossterm>RDP</glossterm>
+
+ <glossdef>
+ <para>Remote Desktop Protocol, a protocol developed by Microsoft as an
+ extension to the ITU T.128 and T.124 video conferencing protocol. With
+ RDP, a PC system can be controlled from a remote location using a
+ network connection over which data is transferred in both directions.
+ Typically graphics updates and audio are sent from the remote machine
+ and keyboard and mouse input events are sent from the client. A
+ VirtualBox extension package by Oracle provides VRDP, an enhanced
+ implementation of the relevant standards which is largely compatible
+ with Microsoft's RDP implementation. See <xref linkend="vrde" /> for
+ details.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+
+ <glossdiv>
+ <title>S</title>
+
+ <glossentry>
+ <glossterm>SAS</glossterm>
+
+ <glossdef>
+ <para>Serial Attached SCSI, an industry standard for hard disk
+ interfaces. See <xref linkend="harddiskcontrollers" />.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>SATA</glossterm>
+
+ <glossdef>
+ <para>Serial ATA, an industry standard for hard disk interfaces. See
+ <xref linkend="harddiskcontrollers" />.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>SCSI</glossterm>
+
+ <glossdef>
+ <para>Small Computer System Interface. An industry standard for data
+ transfer between devices, especially for storage. See <xref
+ linkend="harddiskcontrollers" />.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>SMP</glossterm>
+
+ <glossdef>
+ <para>Symmetrical Multiprocessing, meaning that the resources of a
+ computer are shared between several processors. These can either be
+ several processor chips or, as is more common with modern hardware,
+ multiple CPU cores in one processor.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>SSD</glossterm>
+
+ <glossdef>
+ <para>Solid-state drive, uses microships for storing data in a computer
+ system. Compared to classical hard-disks they are having no mechanical
+ components like spinning disks.
+ </para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+
+ <glossdiv>
+ <title>T</title>
+
+ <glossentry>
+ <glossterm>TAR</glossterm>
+
+ <glossdef>
+ <para>A widely used file format for archiving. Originally, this stood
+ for "Tape ARchive" and was already supported by very early Unix
+ versions for backing up data on tape. The file format is still widely
+ used today, for example, with OVF archives (with an
+ <computeroutput>.ova</computeroutput> file extension); see <xref
+ linkend="ovf" />.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+
+ <glossdiv>
+ <title>U</title>
+
+ <glossentry>
+ <glossterm>UUID</glossterm>
+
+ <glossdef>
+ <para>A Universally Unique Identifier -- often also called GUID
+ (Globally Unique Identifier) -- is a string of numbers and letters
+ which can be computed dynamically and is guaranteed to be unique.
+ Generally, it is used as a global handle to identify entities.
+ VirtualBox makes use of UUIDs to identify VMs, Virtual Disk Images
+ (VDI files) and other entities.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+
+ <glossdiv>
+ <title>V</title>
+
+ <glossentry>
+ <glossterm>VM</glossterm>
+
+ <glossdef>
+ <para>Virtual Machine -- a virtual computer that VirtualBox allows you
+ to run on top of your actual hardware. See <xref
+ linkend="virtintro" /> for details.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>VMM</glossterm>
+
+ <glossdef>
+ <para>Virtual Machine Manager -- the component of VirtualBox that
+ controls VM execution. See <xref linkend="technical-components" /> for
+ a list of VirtualBox components.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>VRDE</glossterm>
+
+ <glossdef>
+ <para>VirtualBox Remote Desktop Extension. This interface is built
+ into VirtualBox to allow VirtualBox extension packages to supply
+ remote access to virtual machines. A VirtualBox extension package by
+ Oracle provides VRDP support; see <xref linkend="vrde" /> for
+ details.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>VRDP</glossterm>
+
+ <glossdef>
+ <para>See RDP.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>VT-x</glossterm>
+
+ <glossdef>
+ <para>The hardware virtualization features built into modern Intel
+ processors. See <xref linkend="hwvirt" />.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+
+ <glossdiv>
+ <title>X</title>
+
+ <glossentry>
+ <glossterm>XML</glossterm>
+
+ <glossdef>
+ <para>The eXtensible Markup Language, a metastandard for all kinds of
+ textual information. XML only specifies how data in the document is
+ organized generally and does not prescribe how to semantically
+ organize content.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>XPCOM</glossterm>
+
+ <glossdef>
+ <para>Mozilla Cross Platform Component Object Model, a programming
+ infrastructure developed by the Mozilla browser project which is
+ similar to Microsoft COM and allows applications to provide a modular
+ programming interface. VirtualBox makes use of XPCOM on Linux both
+ internally and externally to provide a comprehensive API to
+ third-party developers.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+</glossary>
diff --git a/doc/manual/fr_FR/user_GuestAdditions.xml b/doc/manual/fr_FR/user_GuestAdditions.xml
new file mode 100644
index 00000000..3cff7eac
--- /dev/null
+++ b/doc/manual/fr_FR/user_GuestAdditions.xml
@@ -0,0 +1,1600 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+ "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<chapter>
+ <title id="guestadditions">Additions invité</title>
+
+ <para>Le chapitre précédent a traité de la façon de débuter avec VirtualBox et
+ d'installer des systèmes d'exploitation dans une machine virtuelle. Pour une
+ utilisation pousséed et interactive, les additions invité de VirtualBox vous
+ faciliteront beaucoup la vie en vous fournissant une intégration poussée entre
+ l'hôte et l'invité, et en améliorant les performances interactives des systèmes
+ invités. Ce chapitre décrit en détail les additions invité.</para>
+
+ <sect1>
+ <title>Introduction</title>
+
+ <para>Comme indiqué au <xref linkend="virtintro" />, les additions invité
+ sont conçus pour être installés à l'intérieur d'une machine virtuelle après
+ que le système d'exploitation invité a été installé. Ils consistent en des
+ pilotes de périphériques et des applications systèmes qui optimisent le
+ système d'exploitation invité pour de meilleures performances et un usage
+ facilité. Merci de voir le <xref linkend="guestossupport" /> pour des détails
+ sur les systèmes d'exploitation invités pleinement supportés avec les
+ additions invité par VirtualBox.</para>
+
+ <para>Les additions invité de VirtualBox de tous les systèmes d'exploitation
+ invités sont fournies sous la forme d'un fichier image unique de CD-ROM
+ appelé <computeroutput>VBoxGuestAdditions.iso</computeroutput>. Ce fichier
+ image se situe dans le répertoire d'installation de VirtualBox. Pour
+ installer les additions invité pour une VM particulière, vous montez ce
+ fichier ISO dans votre VM en tant que CD-ROM virtuel et vous l'installez à
+ partir de là.</para>
+
+ <para>Les additions invités offrent les fonctionnalités suivantes&nbsp;:<glosslist>
+ <glossentry>
+ <glossterm>Intégration du pointeur de la souris</glossterm>
+
+ <glossdef>
+ <para>Pour dépasser les limites du support de la souris décrites au
+ <xref linkend="keyb_mouse_normal" />, cela vous offre un support de
+ souris intégrée. Vous n'aurez q'un pointeur de souris et l'appui
+ sur la touche Hôte n'est plus nécessaire pour <quote>libérer</quote>
+ la souris de sa capture par l'OS invité. Pour que cela fonctionne,
+ un pilote de souris spécial est installé dans l'invité, qui
+ communique avec le pilote de souris <quote>réel</quote> de votre
+ hôte et il déplace le pointeur de la souris en fonction.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Meilleur support graphique</glossterm>
+
+ <glossdef>
+ <para>Alors que la carte graphique virtuelle émulée par VirtualBox
+ pour tous les systèmes invités fournit toutes les fonctionnalités
+ de base, les pilotes graphiques personnalisés installés avec les
+ additions invité vous offrent des modes vidéos plus avancés et non
+ standards, ainsi que des performances graphiques accélérées.</para>
+
+ <para>En outre, avec les invités Windows et les récents Linux,
+ Solaris et OpenSolaris, si les additions invité sont installés, vous
+ pouvez redimensionner la fenêtre de la machine virtuelle et la
+ résolution graphique de l'invité sera automatiquement ajustée
+ (comme si vous aviez entré à la main une résolution de votre choix
+ dans les paramètres d'affichage de l'hôte).</para>
+
+ <para>Enfin, si vous installez les additions invité, la 3D pour les
+ applications invitées peut être accélérée ; voir le <xref
+ linkend="guestadd-3d" />.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Synchronisation du temps</glossterm>
+
+ <glossdef>
+ <para>Une fois les additions invité installées, VirtualBox peut
+ s'assurer que le système d'horloge de l'invité est mieux synchronisé
+ avec celui de l'hôte.</para>
+
+ <para>Pour diverses raisons, le temps de l'invité peut s'écouler à
+ une vitesse légèrement différente du temps de l'hôte. L'hôte pourrait
+ recevoir des mises à jour par NTP et son propre temps pourrait ne
+ pas s'écouler de façon linéaire. Une VM pourrait aussi être mise en
+ pause, ce qui arrête le cours du temps dans l'invité pour une
+ période plus ou moins longue. Quand le temps horloge limite entre
+ l'invité et l'hôte ne diffère que légèrement, le système de
+ synchronisation tente d'ajuster graduellement et progressivement
+ l'heure de l'invité par petites saccades pour <quote>rattraper</quote>
+ ou <quote>perdre</quote> du temps. Quand la différence est trop
+ importante (par exemple une VM mise en pause pendant des heures ou
+ restaurée depuis un état sauvegardé), l'heure de l'invité est
+ modifiée immédiatement, sans ajustements graduels.</para>
+
+ <para>Les additions invité resynchroniseront l'heure graduellement.
+ Voir le <xref linkend="changetimesync" /> pour la façon de configurer
+ les paramètres du mécanisme de synchronisation du temps.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Dossiers partagés</glossterm>
+
+ <glossdef>
+ <para>Ceux-ci offrent un moyen facile d'échanger des fichiers entre
+ l'hôte et l'invité. Tout comme les partages de réseau Windows
+ ordinaires, vous pouvez dire à VirtualBox de traiter un répertoire
+ hôte en particulier comme un dossier partagé et VirtualBox le rendra
+ disponible pour le système d'exploitation invité en tant que partage
+ réseau. Pour les détails, merci de vous référer au <xref
+ linkend="sharedfolders" />.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Intégration de fenêtres</glossterm>
+
+ <glossdef>
+ <para>Avec cette fonctionnalité, les fenêtres individuelles affichées
+ sur le bureau de la machine virtuelle peuvent être gérées par le
+ bureau de l'hôte, comme si l'application dans la fenêtre fonctionnait
+ en fait sur l'hôte. Voir le <xref linkend="seamlesswindows" /> pour
+ les détails.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Presse-papier partagé</glossterm>
+
+ <glossdef>
+ <para>Une fois les additions invité installées, le presse-papier du
+ système d'exploitation invité peut éventuellement être partagés avec
+ votre système d'exploitation hôte&nbsp;; voir le <xref
+ linkend="generalsettings" />.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Connexions automatiques (passage de certificats)</glossterm>
+
+ <glossdef>
+ <para>Pour des détails, merci de voir le <xref linkend="autologon" />.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+
+ <para>Chaque version de VirtualBox, même celles mineures, est fournie avec
+ sa propre version des additions invité. Si les interfaces par lesquelles le
+ coeur VirtualBox communique avec les additions invité sont laissées stables
+ afin que les additions invité déjà installées dans une VM continuent à
+ fonctionner lorsque VirtualBox est mis à jour sur l'hôte, il est recommandé,
+ pour de meilleurs résultats, de maintenir les additions invité à la même
+ version.</para>
+
+ <para>À partir de VirtualBox 3.1, les additions invité Windows et Linux
+ vérifient donc automatiquement s'ils doivent être mis à jour. Si l'hôte
+ exécute une version de VirtualBox plus récente que les additions invité, une
+ notification avec toutes les instructions est affichée dans l'invité.</para>
+
+ <para>Pour désactiver la vérification des mises à jour des additions invité
+ d'une machine virtuelle donnée, mettez la valeur de sa propriété d'invité
+ <computeroutput>/VirtualBox/GuestAdd/CheckHostVersion</computeroutput> à
+ <computeroutput>0</computeroutput>&nbsp;; voir le <xref
+ linkend="guestadd-guestprops" /> pour les détails.</para>
+ </sect1>
+
+ <sect1>
+ <title>Installer et maintenir les additions invité</title>
+
+ <para>Les additions invité sont disponibles pour les machines virtuelles qui
+ exécutent Windows, Linux, Solaris ou OS/2. Les sections suivantes décrivent
+ en détail les spécificités de chaque variante.</para>
+
+ <sect2 id="additions-windows">
+ <title>Additions Invité pour Windows</title>
+
+ <para>Les additions invité Windows de VirtualBox sont conçues pour être
+ installées sur une machine virtuelle exécutant un système d'exploitation
+ Windows. Les versions suivantes des invités Windows sont supportées&nbsp;:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Microsoft Windows NT 4.0 (tous les packs service)</para>
+ </listitem>
+
+ <listitem>
+ <para>Microsoft Windows 2000 (tous les packs service)</para>
+ </listitem>
+
+ <listitem>
+ <para>Microsoft Windows XP (tous les packs service)</para>
+ </listitem>
+
+ <listitem>
+ <para>Microsoft Windows Server 2003 (tous les packs service)</para>
+ </listitem>
+
+ <listitem>
+ <para>Microsoft Windows Server 2008</para>
+ </listitem>
+
+ <listitem>
+ <para>Microsoft Windows Vista (toutes les éditions)</para>
+ </listitem>
+
+ <listitem>
+ <para>Microsoft Windows 7 (toutes les éditions)</para>
+ </listitem>
+ </itemizedlist>
+
+ <sect3 id="mountingadditionsiso">
+ <title>Installation</title>
+
+ <para>Dans le menu <quote>Périphériques</quote> de la barre de menu de
+ la machine virtuelle, VirtualBox a un élément pratique de sous-menu
+ appelé <quote>Installer les additions invité</quote>, qui monte le
+ fichier ISO des additions invité dans votre machine virtuelle. Un invité
+ Windows devrait alors lancer automatiquement l'installateur des additions
+ invité qui installe les additions invité dans votre invité Windows.</para>
+
+ <note>
+ <para>Pour que l'accélération Directe 3D fonctionne dans un invité
+ Windows, vous devez installer les additions invité en <quote>mode
+ sécurisé</quote>, voir le <xref linkend="KnownIssues" /> pour les
+ détails.</para>
+ </note>
+
+ <para>Si vous préférez monter les additions à la main, vous pouvez
+ effectuer les étapes suivantes&nbsp;:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>Démarrer la machine virtuelle dans laquelle vous avez installé
+ Windows.</para>
+ </listitem>
+
+ <listitem>
+ <para>Sélectionner <quote>Monter un CD/DVD-ROM</quote> depuis le
+ menu <quote>Périphériques</quote> de la barre de menu de la machine
+ virtuelle, puis <quote>imag de CD/DVD-ROM</quote>. Cela affiche le
+ gestionnaire de médias virtuels décrit au <xref
+ linkend="vdis" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>Dans le gestionnaire de médias virtuels, appuyer sur le
+ bouton <quote>Ajouter</quote> et chercher dans le système de fichiers
+ le fichier <computeroutput>VBoxGuestAdditions.iso</computeroutput>&nbsp;:<itemizedlist>
+ <listitem>
+ <para>Sur un hôte Windows, vous pouvez trouver ce fichier dans
+ le répertoire d'installation de VirtualBox (généralement sous
+ <computeroutput>C:\Program
+ files\Oracle\VirtualBox</computeroutput> ).</para>
+ </listitem>
+
+ <listitem>
+ <para>Sur les hôtes Mac OS X, vous pouvez trouver ce fichier
+ dans le groupe application de VirtualBox. (Faire un clic droit
+ sur l'icône VirtualBox de Finder et choisir <emphasis>Montrer le
+ contenu du paquet</emphasis>. Il se trouve alors dans le dossier
+ <computeroutput>Contents/MacOS</computeroutput>.)</para>
+ </listitem>
+
+ <listitem>
+ <para>Sur un hôte Linux, vous pouvez trouver ce fichier dans
+ le dossier additions sous lequel vous avez installé VirtualBox
+ (normalement <computeroutput>/opt/VirtualBox/</computeroutput>).</para>
+ </listitem>
+
+ <listitem>
+ <para>Sur les hôtes Solaris, vous pouvez trouver ce fichier
+ dans le dossier <computeroutput>additions</computeroutput>
+ sous lequel vous avez installé VirtualBox (normalement
+ <computeroutput>/opt/VirtualBox</computeroutput>).</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para>Retourner dans le gestionnaire de médias virtuels, sélectionner
+ ce fichier ISO et appuyer sur le bouton <quote>Sélectionner</quote>.
+ Cela montera le fichier ISO et le présentera à votre invité Windows
+ comme un CD-ROM.</para>
+ </listitem>
+ </orderedlist>
+
+ <para>Sauf si vous avez désactivé la fonction de démarrage automatique
+ sur votre invité Windows, Windows démarrera automatiquement alors le
+ programme d'installation des additions invité de VirtualBox depuis l'ISO
+ des additions. Si vous avez désactivé la fonction de démarrage
+ automatique, choisissez <computeroutput>VBoxWindowsAdditions.exe</computeroutput>
+ depuis le lecteur de CD/DVD à l'intérieur de l'invité pour démarrer
+ l'installateur.</para>
+
+ <para>L'installateur ajoutera plusieurs pilotes de périphérique à la base
+ de données des pilotes de Windows puis il invoquera l'assistant de
+ détection du matériel.</para>
+
+ <para>Selon votre configuration, il pourrait afficher des avertissements
+ selon lesquels les pilotes ne sont pas signés de façon digitale. Vous
+ devez confirmer afin de poursuivre l'installation et d'installer
+ correctement les additions.</para>
+
+ <para>Après l'installation, redémarrez votre système d'exploitation
+ invité pour activer les additions.</para>
+ </sect3>
+
+ <sect3>
+ <title>Mettre à jour les additions invité Windows</title>
+
+ <para>Vous pouvez mettre à jour les additions invité Windows en relançant
+ le programme d'installation comme décrit précédemment. Cela remplacera
+ alors les pilotes des additions précédents par les versions mises à jour.</para>
+
+ <para>Sinon, vous pouvez aussi ouvrir le gestionnaire de périphériques
+ et sélectionner <quote>Mettre à jour les périphériques...</quote> pour
+ deux périphériques&nbsp;:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>l'adaptateur vidéo de VirtualBox et</para>
+ </listitem>
+
+ <listitem>
+ <para>le périphérique système de VirtualBox.</para>
+ </listitem>
+ </orderedlist>
+
+ <para>Pour chacun d'eux, choisissez de fournir votre propre pilote et
+ utilisez <quote>J'ai un disque</quote> pour orienter l'assistant vers le
+ lecteur CD-ROM contenant les additions invité.</para>
+ </sect3>
+
+ <sect3>
+ <title>Installation sans effort</title>
+
+ <para>Afin d'obtenir des installations invité entièrement sans efforts,
+ vous pouvez spécifier un paramètre en ligne de commande au lanceur de
+ l'installation&nbsp;:</para>
+
+ <screen>VBoxWindowsAdditions.exe /S</screen>
+
+ <para>Cela installe automatiquement les bons fichiers et les pilotes
+ pour la plateforme correspondante (32 ou 64 bits).</para>
+
+ <note>
+ <para>Comme les pilotes ne sont pas encore certifiés WHQL, il se
+ pourrait que vous ayez encore des fenêtres <quote>pop-up</quote>
+ d'installation de pilotes, selon la version de l'invité Windows.</para>
+ </note>
+
+ <para>Pour plus d'options concernant l'installation de l'invité sans
+ efforts, consultez l'aide de la ligne de commande en utilisant la
+ commande&nbsp;:</para>
+
+ <screen>VBoxWindowsAdditions.exe /?</screen>
+ </sect3>
+
+ <sect3 id="windows-guest-file-extraction">
+ <title>Extraction manuelle de fichiers</title>
+
+ <para>Si vous aimeriez installer les fichiers et les pilotes à la main,
+ vous pouvez extraire les fichiers du paramétrage des additions invité
+ Windows en tapant&nbsp;:</para>
+
+ <screen>VBoxWindowsAdditions.exe /extract</screen>
+
+ <para>Pour extraire explicitement les additions invité Windows pour une
+ autre plateforme que celle actuellement en cours de fonctionnement
+ (comme les fichiers 64 bits sur un système 32 bits), vous devez exécuter
+ l'installateur de la plateforme appropriée
+ (<computeroutput>VBoxWindowsAdditions-x86.exe</computeroutput> ou
+ <computeroutput>VBoxWindowsAdditions-amd64.exe</computeroutput>) avec le
+ paramètre <computeroutput>/extract</computeroutput>.</para>
+ </sect3>
+
+ <sect3 id="vista_networking">
+ <title>Le réseau et Windows Vista</title>
+
+ <para>Les versions précédentes de VirtualBox fournissaient par défaut
+ une carte virtuelle AMD PCNet Ethernet à l'invité. Depuis que Microsoft
+ n'inclut plus de pilote pour cette carte avec Windows (à partir de
+ Windows Vista), si vous sélectionnez Windows Vista ou supérieur comme
+ système d'exploitation invité de la machine virtuelle, VirtualBox
+ présentera plutôt un contrôleur réseau virtuel Intel à l'invité (voir le
+ <xref linkend="nichardware" />).</para>
+
+ <para>Cependant, si pour une raison quelconque vous avez une VM Windows
+ Vista 32 bits configurée pour utiliser une carte AMD PCNet, vous n'aurez
+ pas de réseau au départ dans l'invité.</para>
+
+ <para>Afin d'être pratique, VirtualBox est fourni avec un pilote 32 bits
+ pour la carte AMD PCNet card, qui est fourni avec les additions invité
+ Windows. Si vous l'installez sur un invité Vista 32 bits, le pilote sera
+ automatiquement installé. Si pour une raison quelconque vous aimeriez
+ installer le pilote à la main, vous pouvez extraire les fichiers requis
+ du paramétrage des additions invité. Merci de consulter le <xref
+ linkend="windows-guest-file-extraction" /> sur la façon d'effectuer
+ cela. Vous trouverez alors les fichiers du pilote AMD PCNet dans le
+ sous-répertoire <computeroutput>x86\Network\AMD\netamd.inf</computeroutput>
+ du répertoire d'installation par défaut.</para>
+
+ <para>Sinon, modifiez les paramètres de la VM invité Vista pour utiliser
+ une carte réseau Intel au lieu de la carte AMD PCNet par défaut ; voir
+ le chapitre <xref linkend="settings-network" />.</para>
+
+ <para>Malheureusement, il n'y a pas de pilote 64 bits disponible pour la
+ carte AMD PCNet. Donc pour les VMs Windows 64 bits, vous devriez toujours
+ utiliser les périphériques réseau Intel.</para>
+ </sect3>
+ </sect2>
+
+ <sect2>
+ <title>Additions Invité pour Linux</title>
+
+ <para>Comme les additions invité Windows, les additions invité de
+ VirtualBox pour Linux ont la forme d'un ensemble de pilotes de
+ périphériques et d'applications système qui peuvent être installées dans
+ le système d'exploitation invité.</para>
+
+ <para>Les distributions Linux suivantes sont officiellement supportées&nbsp;:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Fedora à partir de Fedora Core 4&nbsp;;</para>
+ </listitem>
+
+ <listitem>
+ <para>Redhat Enterprise Linux à partir de la version 3&nbsp;;</para>
+ </listitem>
+
+ <listitem>
+ <para>SUSE et openSUSE Linux à partir de la version 9&nbsp;;</para>
+ </listitem>
+
+ <listitem>
+ <para>Ubuntu à partir de la version 5.10.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>De nombreuses autres distributions sont connues pour fonctionner
+ avec les additions invité.</para>
+
+ <para>La version du noyau par défaut fournie par SUSE et openSUSE 10.2,
+ Ubuntu 6.10 (toutes les versions) et Ubuntu 6.06 (édition serveur) contient
+ un bogue qui peut l'amener à planter pendant le démarrage lorsqu'il est
+ lancé dans une machine virtuelle. Les additions invité fonctionnent dans
+ ces distributions.</para>
+
+ <para>Remarquez que certaines distributions Linux sont déjà fournies avec
+ les additions invité de VirtualBox ou avec une partie d'entre eux. Vous
+ pouvez conserver la version des additions invité de la distribution mais,
+ souvent, ils ne sont pas à jour et leurs fonctionnalités sont limitées.
+ Vous pouvez donc choisir d'installer les additions invité fournies avec
+ VirtualBox, ce qui écrasera la version déjà installée. L'installateur des
+ additions invité Linux de VirtualBox essaie de détecter une installation
+ existante et il les remplace, mais selon la manière dont la distribution
+ intègre les additions invité, ils peuvent exiger quelques interventions à
+ la main. Il est hautement recommandé de prendre un instantané de la
+ machine virtuelle avant d'écraser l'installation.</para>
+
+ <sect3>
+ <title>Installer les additions Invité Linux</title>
+
+ <para>Les additions invité de VirtualBox pour Linux sont fournies sur le
+ même CD-ROM ISO que les additions pour Windows décrits ci-dessus. Ils
+ sont aussi fournis avec un programme d'installation qui vous guide à
+ travers le processus d'installation, bien que, du fait de différences
+ importantes entre les distributions Linux, l'installation pourrait être
+ légèrement plus complexe.</para>
+
+ <para>L'installation consiste en les étapes suivantes&nbsp;:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>Avant d'installer les additions invités, vous devrez préparer
+ votre système invité à construire les modules noyau externes. Cela
+ fonctionne de la même façon que décrit au chapitre <xref
+ linkend="externalkernelmodules" />, sauf que cette étape doit se
+ faire maintenant dans votre invité Linux au lieu d'un système Linux
+ hôte, comme décrit ici.</para>
+
+ <para>À nouveau, comme avec les hôtes Linux, nous vous recommandons
+ d'utiliser DKMS pour les invités Linux. S'il n'est pas installé,
+ utilisez cette commande pour les systèmes Ubuntu/Debian&nbsp;:<screen>sudo apt-get install dkms</screen>
+ ou pour les systèmes Fedora&nbsp;: <screen>yum install dkms</screen></para>
+
+ <para>Assurez-vous d'installer DKMS <emphasis>avant</emphasis>
+ d'installer les additions invité Linux.</para>
+ </listitem>
+
+ <listitem>
+ <para>Montez le fichier
+ <computeroutput>VBoxGuestAdditions.iso</computeroutput> comme
+ lecteur de CD-ROM virtuel de votre invité Linux, exactement de la
+ même façon que décrit pour un invité Windows au <xref
+ linkend="mountingadditionsiso" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>Allez dans le répertoire où est monté votre lecteur de CD-ROM
+ et exécutez en tant qu'administrateur&nbsp;:</para>
+
+ <screen>sh ./VBoxLinuxAdditions-x86.run</screen>
+
+ <para>Sur un invité Linux 64 bits, utilisez plutôt l'installeur
+ <computeroutput>VBoxLinuxAdditions-amd64.run</computeroutput>.</para>
+ </listitem>
+ </orderedlist>
+
+ <para>Pour vous aider, les instructions pas-à-pas suivantes ont été
+ vérifiées comme opérationnelles pour des copies fraîchement installées
+ des distributions Linux les plus populaires. Après ces étapes
+ préparatoires, vous pouvez exécuter l'installateur des additions invité
+ de VirtualBox comme décrit ci-dessus.</para>
+
+ <sect4><title>Ubuntu 10.04 (<quote>Lucid Lynx</quote>)</title><para>
+ <orderedlist>
+ <listitem>
+ <para>Pour mettre à jour votre système vers la dernière version des
+ paquets, ouvrez un terminal et, en tant qu'administrateur, exécutez
+ <screen>apt-get update</screen>
+ suivi de
+ <screen>apt-get upgrade</screen></para>
+ </listitem>
+ <listitem>
+ <para>Installez DKMS en utilisant
+ <screen>apt-get install dkms</screen></para>
+ </listitem>
+ <listitem>
+ <para>Redémarrez votre système invité afin d'activer les mises à
+ jour puis procédez comme décrit ci-dessus.</para>
+ </listitem>
+ </orderedlist></para></sect4>
+
+ <sect4><title>Fedora 13 (<quote>Goddard</quote>)</title><para>
+ <orderedlist>
+ <listitem>
+ <para>Pour mettre à jour votre système vers la dernière version des
+ paquets, ouvrez un terminal et, en tant qu'administrateur, exécutez
+ <screen>yum update</screen></para>
+ </listitem>
+ <listitem>
+ <para>Installez DKMS et le compilateur GNU C en utilisant
+ <screen>yum install dkms</screen>
+ suivi de
+ <screen>yum install gcc</screen></para>
+ </listitem>
+ <listitem>
+ <para>Redémarrez votre système invité afin d'activer les mises à
+ jour puis procédez comme décrit ci-dessus.</para>
+ </listitem>
+ </orderedlist></para></sect4>
+
+ <sect4><title>openSUSE 11.2</title><para>
+ <orderedlist>
+ <listitem>
+ <para>Pour mettre à jour votre système vers la dernière version des
+ paquets, ouvrez un terminal et, en tant qu'administrateur, exécutez
+ <screen>zypper update</screen></para>
+ </listitem>
+ <listitem>
+ <para>Installez l'outil make et le compilateur GNU C en utilisant
+ <screen>zypper install make gcc</screen></para>
+ </listitem>
+ <listitem>
+ <para>Redémarrez votre système invité afin d'activer les mises à
+ jour.</para>
+ </listitem>
+ <listitem>
+ <para>Cherchez quel est le noyau que vous exécutez en utilisant
+ <screen>uname -a</screen>
+ Un exemple serait <computeroutput>2.6.31.12-0.2-default</computeroutput>
+ qui se réfère au noyau par défaut. Puis, installez le bon paquet de
+ développement du noyau. Dans l'exemple ci-dessus, il s'agirait de
+ <screen>zypper install kernel-default-devel</screen></para>
+ </listitem>
+ <listitem>
+ <para>Assurez-vous que votre noyau en fonction (uname -a) et les
+ paquets du noyau que vous avez installés
+ (<computeroutput>uname -a</computeroutput>) ont exactement le même
+ numéro de version. Procédez comme décrit ci-dessus.</para>
+ </listitem>
+ </orderedlist></para></sect4>
+
+ <sect4><title>SuSE Linux Enterprise Desktop (SLED) 11</title><para>
+ <orderedlist>
+ <listitem>
+ <para>Pour mettre à jour votre système vers la dernière version des
+ paquets, ouvrez un terminal et, en tant qu'administrateur, exécutez
+ <screen>zypper update</screen></para>
+ </listitem>
+ <listitem>
+ <para>Installez le compilateur GNU C en utilisant
+ <screen>zypper install gcc</screen></para>
+ </listitem>
+ <listitem>
+ <para>Redémarrez votre système invité afin d'activer les mises à
+ jour.</para>
+ </listitem>
+ <listitem>
+ <para>Cherchez le noyau que vous exécutez en utilisant
+ <screen>uname -a</screen>
+ Un exemple serait <computeroutput>2.6.27.19-5.1-default</computeroutput>
+ qui se réfère au noyau <quote>default</quote>. Puis installez
+ le bon paquet de développement du noyau. Dans l'exemple ci-dessus,
+ il s'agirait de
+ <screen>zypper install kernel-syms kernel-source</screen></para>
+ </listitem>
+ <listitem>
+ <para>Assurez-vous que votre noyau actuel
+ (<computeroutput>uname -a</computeroutput>) et les paquets du
+ noyau que vous avez installés (<computeroutput>rpm -qa kernel\*</computeroutput>)
+ ont exactement le même numéro de version. Procédez comme décrit
+ ci-dessus.</para>
+ </listitem>
+ </orderedlist></para></sect4>
+
+ <sect4><title>Mandrake 2010</title><para>
+ <orderedlist>
+ <listitem>
+ <para>Mandrake inclut les additions invité de VirtualBox qui seront
+ remplacés si vous suivez ces étapes.</para>
+ </listitem>
+ <listitem>
+ <para>Pour mettre à jour votre système vers la dernière version des
+ paquets, ouvrez un terminal et, en tant qu'administrateur, exécutez
+ <screen>urpmi --auto-update</screen></para>
+ </listitem>
+ <listitem><para>Redémarrez votre système invité afin d'activer les
+ mises à jour.</para>
+ </listitem>
+ <listitem><para>Installez DKMS en utilisant
+ <screen>urpmi dkms</screen>
+ et assurez-vous de choisir le bon paquet kernel-devel lorsque
+ cela vous est demandé (utilisez <computeroutput>uname -a</computeroutput>
+ pour comparer).</para>
+ </listitem>
+ </orderedlist></para></sect4>
+
+ <sect4><title>CentOS 5.5, Red Hat Enterprise Linux 5.5 et Oracle Enterprise
+ Linux 5.5</title><para>
+ <orderedlist>
+ <listitem>
+ <para>Ajoutez <computeroutput>divider=10</computeroutput> aux options
+ de démarrage du noyau dans <computeroutput>/etc/grub.conf</computeroutput>
+ pour réduire la charge d'occupation du processeur.</para>
+ </listitem>
+ <listitem>
+ <para>Pour mettre à jour votre système vers la dernière version des
+ paquets, ouvrez un terminal et, en tant qu'administrateur, exécutez
+ <screen>yum update</screen></para>
+ </listitem>
+ <listitem>
+ <para>Installez le compilateur GNU C et les paquets de développement
+ du noyau en utilisant
+ <screen>yum install gcc</screen>
+ suivi de
+ <screen>yum install kernel-devel</screen></para>
+ </listitem>
+ <listitem>
+ <para>Redémarrez votre système invité afin d'activer les mises à
+ jour puis procédez comme décrit ci-dessus.</para>
+ </listitem>
+ <listitem>
+ <para>Remarquez que le support d'OpenGL n'est pas disponible, sauf
+ si vous mettez à jour vers un noyau Linux récent.</para>
+ <para>Si Oracle Enterprise Linux ne trruve pas les paquets requis,
+ vous devez les installer soit à partir d'une autre source (comme
+ un DVD) soit en utilisant le serveur public Yum d'Oracle qui se
+ trouve sur <ulink url="http://public-yum.oracle.com/">http://public-yum.oracle.com</ulink>.</para>
+ </listitem>
+ </orderedlist></para></sect4>
+
+ <sect4><title>Debian 5 (<quote>Lenny</quote>)</title><para>
+ <orderedlist>
+ <listitem>
+ <para>Pour mettre à jour votre système vers la dernière version des
+ paquets, ouvrez un terminal et, en tant qu'administrateur, exécutez
+ <screen>apt-get update</screen>
+ suivi de
+ <screen>apt-get upgrade</screen></para>
+ </listitem>
+ <listitem>
+ <para>Installez l'outil make et le compilateur GNU C en utilisant
+ <screen>apt-get install make gcc</screen></para>
+ </listitem>
+ <listitem>
+ <para>Redémarrez votre système invité afin d'activer les mises à
+ jour.</para>
+ </listitem>
+ <listitem>
+ <para>Déterminez la version exacte de votre noyau en utilisant
+ <computeroutput>uname -a</computeroutput> et installez la bonne
+ version du paquet linux-headers, en utilisant par exemple
+ <screen>apt-get install linux-headers-2.6.26-2-686</screen></para>
+
+ <listitem>
+ <para>Remarquez que le support d'OpenGL n'est pas disponible, sauf
+ si vous mettez à jour vers un noyau Linux récent.</para>
+ </listitem>
+ </listitem>
+ </orderedlist></para></sect4>
+ </sect3>
+
+ <sect3><title>Paramétrage manuel des services invité sélectionnés</title>
+ <para>Les additions invité de VirtualBox contiennent plusieurs pilotes
+ différents. Si pour une raison quelconque vous ne souhaitez pas tous les
+ initialiser, vous pouvez installer les additions invité en utilisant la
+ commande suivante&nbsp;:</para>
+
+ <screen> sh ./VBoxLinuxAdditions-x86.run no_setup</screen>
+
+ <para>(en remplaçant par <computeroutput>VBoxLinuxAdditions-amd64
+ </computeroutput> sur un invité 64 bits).</para>
+
+ <para>Après cela, vous devrez au moins compiler les modules noyau en
+ lançant la commande <screen> /usr/lib/VBoxGuestAdditions/vboxadd setup</screen>
+ en tant qu'administrateur (vous devrez remplacer <emphasis>lib</emphasis>
+ par <emphasis>lib64</emphasis> sur certains invités 64 bits), et sur les
+ invités anciens sans le service udev vous devrez ajouter le service
+ <emphasis>vboxadd</emphasis> au niveau d'exécution par défaut pour
+ garantir que les modules seront chargés.</para>
+
+ <para>Pour initialiser le service de synchronisation de temps, lancez la
+ commande
+ <screen> /usr/lib/VBoxGuestAdditions/vboxadd-service setup</screen>
+ et ajoutez le service vboxadd-service au niveau d'exécution par défaut.
+ Pour initialiser la partie OpenGL de X11 des additions invité, lancez la
+ commande <screen> /usr/lib/VBoxGuestAdditions/vboxadd-x11 setup</screen>
+ (vous n'avez besoin d'activer aucun service pour cela).</para>
+
+ <para>Pour recompiler les modules du noyau de l'invité, utilisez
+ cette commande&nbsp;:
+ <screen> /usr/lib/VBoxGuestAdditions/vboxadd setup</screen> Après la
+ compilation vous devriez redémarrer votre invité pour garantir que les
+ nouveaux modules seront bien utilisés.</para>
+ </sect3>
+
+ <sect3>
+ <title>Accélération vidéo et modes graphiques haute résolution</title>
+
+ <para>Sur les invités Linux, l'accélération graphique de VirtualBox est
+ disponible à travers le système X Window. En général, sur les
+ distributions Linux actuelles, il s'agira du serveur X.Org. Pendant le
+ processus d'installation, X sera initialisé pour utiliser le pilote
+ graphique fourni avec les additions invité.</para>
+
+ <para>Pour les invités Linux et Solaris, la version 1.3 du serveur X.org
+ est nécessaire pour le redimensionnement (la fonctionnalité a été
+ désactivée sur les invités Fedora 9 du fait d'un bogue dans leur serveur
+ X). La version du serveur peut être vérifiée avec <computeroutput>Xorg
+ -version</computeroutput>.</para>
+
+ <para>Vous pouvez aussi envoyer des astuces du mode graphique en utilisant l'outil
+ <computeroutput>VBoxManage</computeroutput>.</para>
+
+ <para>Si vous n'utilisez que des systèmes invités Linux récents, vous
+ pouvez sauter le reste de cette section. Sur les systèmes invités
+ anciens, tous les modes graphiques initialisés avant l'installation
+ seront utilisés. Si ces modes ne satisfont pas vos exigences, vous
+ pouvez modifier vos paramètres en éditant le fichier de configuration du
+ serveur X, situé en général dans <computeroutput>/etc/X11/xorg.conf</computeroutput>.</para>
+
+ <para>VirtualBox peut utiliser n'importe quel mode graphique X par défaut
+ adapté à la mémoire vidéo virtuelle allouée à la machine virtuelle comme
+ décrit au chapitre <xref linkend="generalsettings" />. Vous pouvez aussi
+ ajouter vos propres modes au fichier de configuration du serveur X. Vous
+ n'avez besoin que de les ajouter à la liste des <quote>modes</quote> de
+ la sous-section <quote>Display</quote> de la section <quote>Screen</quote>.
+ Par exemple, la section montrée ici a une résolution personnalisée en
+ mode ajouté 2048x800&nbsp;:</para>
+
+ <screen>Section "Screen"
+ Identifier "Default Screen"
+ Device "VirtualBox graphics card"
+ Monitor "Generic Monitor"
+ DefaultDepth 24
+ SubSection "Display"
+ Depth 24
+ Modes "2048x800" "800x600" "640x480"
+ EndSubSection
+EndSection</screen>
+ </sect3>
+
+ <sect3>
+ <title>Mettre à jour les additions Invité Linux</title>
+
+ <para>Vous pouvez simplement mettre à jour les additions invité en
+ refaisant la procédure d'installation avec une image de CD-ROM mise à
+ jour. Ceci remplacera les pilotes par les versions mises à jour. Vous
+ devriez redémarrer après la mise à jour des additions invité.</para>
+ </sect3>
+
+ <sect3>
+ <title>Désinstaller les additions invité Linux</title>
+
+ <para>Si vous avez installé une version des additions invité sur votre
+ machine virtuelle et si vous souhaitez la supprimer sans en installer
+ de nouvelles, vous pouvez le faire en insérant l'image du CD des additions
+ invité dans le lecteur de CD-ROM virtuel comme décrit ci-dessus et en
+ lançant l'installeur des additions invité actuelles avec le paramètre
+ <quote>uninstall</quote> depuis le chemin de l'invité où est monté
+ l'image de CD&nbsp;:
+ <screen>sh ./VBoxLinuxAdditions-x86.run uninstall</screen>
+ <para>(en remplaçant <computeroutput>VBoxLinuxAdditions-amd64</computeroutput>
+ sur un invité 64 bits). Si cela fonctionnera normalement sans problèmes,
+ il se peut que vous deviez faire du nettoyage manuel de l'invité (en
+ particulier du fichier XFree86Config ou xorg.conf) dans certains cas,
+ surtout si la version des additions installée ou si le système
+ d'exploitation invité était très vieux, ou si vous avez fait vos
+ propres modifications sur le réglage des additions invité après avoir
+ installé.</para>
+ </para>
+ <para>
+ À partir de la version 3.1.0, vous pouvez désinstaller les additions
+ en appelant
+ <screen>/opt/VBoxGuestAdditions-$VBOX_VERSION_STRING/uninstall.sh</screen>
+ en remplaçant <computeroutput>/opt/VBoxGuestAdditions-$VBOX_VERSION_STRING</computeroutput>
+ par le répertoire d'installation des additions invité.
+ </para>
+ </sect3>
+ </sect2>
+
+ <sect2>
+ <title>Additions Invité pour Solaris</title>
+
+ <para>Comme les additions invité Windows, les additions invité de Solaris
+ ont la forme de pilotes de périphériques et d'applications système qui
+ peuvent être installés sur le système d'exploitation invité.</para>
+
+ <para>Les distributions Solaris suivantes sont officiellement
+ supportées&nbsp;:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>OpenSolaris Nevada (construction 82 et supérieur&nbsp;; ceci
+ inclut OpenSolaris 2008.05, 2008.11 et 2009.06);</para>
+ </listitem>
+
+ <listitem>
+ <para>OpenSolaris Indiana (Developer Preview 2 et supérieur);</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris 10 (u5 et supérieur).</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Il se peut que d'autres distributions fonctionnent si elles se basent
+ sur des versions de logiciels comparables.</para>
+
+ <sect3>
+ <title>Installer les additions Solaris</title>
+
+ <para>Les additions invité VirtualBox pour Solaris sont fournis sur la
+ même ISO de CD-ROM que les additions pour Windows et Linux décrits
+ ci-dessus. Ils sont aussi fournis avec un programme d'installation vous
+ guidant à travers le processus d'initialisation.</para>
+
+ <para>L'installation implique les étapes suivantes&nbsp;:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>Monter le fichier
+ <computeroutput>VBoxGuestAdditions.iso</computeroutput> en tant que
+ votre lecteur de CD-ROM virtuel de votre invité Solaris, exactement
+ de la même façon que celle décrite pour un invité Windows au <xref
+ linkend="mountingadditionsiso" />.</para>
+
+ <para>Si le lecteur CD-ROM de l'invité n'est pas monté, (on le voit
+ sur certaines versions de Solaris 10), exécutez en tant
+ qu'administrateur&nbsp;:</para>
+
+ <screen>svcadm restart volfs</screen>
+ </listitem>
+
+ <listitem>
+ <para>Aller dans le répertoire où est monté votre lecteur CD-ROM et
+ exécutez en tant qu'administrateur&nbsp;:</para>
+
+ <screen>pkgadd -G -d ./VBoxSolarisAdditions.pkg</screen>
+ </listitem>
+
+ <listitem>
+ <para>Choisissez <quote>1</quote> et confirmer l'installation du
+ paquet des additions invité. Après que l'installation est terminée,
+ reconnectez le serveur X de votre invité pour activer les additions
+ invité X11.</para>
+ </listitem>
+ </orderedlist>
+ </sect3>
+
+ <sect3>
+ <title>Désinstaller les additions Solaris</title>
+
+ <para>Vous pouvez supprimer en toute sécurité les additions invité
+ Solaris en supprimant le paquet de l'invité. Ouvrez une session de
+ terminal administrateur et exécutez&nbsp;:</para>
+
+ <para><screen>pkgrm SUNWvboxguest</screen></para>
+ </sect3>
+
+ <sect3>
+ <title>Mettre à jour les additions Solaris</title>
+
+ <para>Les additions invité devraient être mis à jour en désinstallant
+ d'abord les additions invité existants puis en installant les nouveaux.
+ Tenter d'installer les nouvelles additions invité sans supprimer celles
+ existantes n'est pas possible.</para>
+ </sect3>
+ </sect2>
+
+ <sect2>
+ <title>Additions Invité pour OS/2</title>
+
+ <para>VirtualBox offre aussi un ensemble de pilotes qui améliorent le
+ fonctionnement d'OS/2 dans une machine virtuelle. Du fait de restrictions
+ d'OS/2 lui-même, cette variante des additions invité a un ensemble de
+ fonctionnalités limité&nbsp;; voir le <xref linkend="KnownIssues" /> pour
+ les détails.</para>
+
+ <para>Les additions invité OS/2 sont fournies sur la même ISO de CD-ROM
+ comme ceux pour les autres plateformes. Par conséquent, montez l'ISO sous
+ OS/2 comme décrit précédemment. Les additions invité OS/2 se situent dans
+ le répertoire <computeroutput>\32bit\OS2</computeroutput>.</para>
+
+ <para>Comme nous ne fournissons pas d'installateur automatique pour le
+ moment, merci de vous référer au fichier <computeroutput>readme.txt</computeroutput>
+ de ce répertoire qui décrit comment installer les additions invité OS/2 à
+ la main.</para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="sharedfolders">
+ <title>Dossiers partagés</title>
+
+ <para>Avec la fonctionnalité <quote>dossiers partagés</quote> de VirtualBox,
+ vous pouvez accéder à des fichiers de votre système hôte à partir de
+ l'intérieur du système invité, presque comme le feraient les partages
+ ordinaires sur les réseaux Windows -- sauf que les dossiers partagés, tant
+ que les additions invité sont installés, n'exigent pas de réseau --. Les
+ dossiers partagés sont supportés avec des invités Windows (2000 ou supérieur),
+ Linux et Solaris.</para>
+
+ <para>Les dossiers partagés doivent résider physiquement sur
+ <emphasis>l'hôte</emphasis> et sont alors partagés avec l'invité&nbsp;; le
+ partage se fait en utilisant un service spécial de l'hôte et un pilote de
+ système de fichiers pour l'invité, les deux étant fournis par VirtualBox.
+ Pour les invités Windows, les dossiers partagés sont implémentés comme un
+ redirecteur pseudo-réseau&nbsp;; pour les invités Linux et Solaris, les
+ additions invité fournissent un pilote de système de fichiers virtuel qui
+ gère la communication avec l'hôte.</para>
+
+ <para>Pour partager un dossier hôte avec une machine virtuelle dans
+ VirtualBox, vous devez spécifier le chemin vers ce dossiers et lui choisir
+ un <quote>nom de partage</quote> que l'invité peut utiliser pour y accéder.
+ Aussi, créez d'abord le dossier partagé sur l'hôte, puis à l'intérieur de
+ l'invité, connectez-vous-y.</para>
+
+ <para>Il y a plusieurs façons de paramétrer les dossiers partagés pour une
+ machine virtuelle particulière&nbsp;:<itemizedlist>
+ <listitem>
+ <para>Dans l'interface graphique de la machine virtuelle en fonction,
+ vous pouvez sélectionner <quote>Dossiers partagés</quote> depuis le
+ menu <quote>Périphériques</quote>, ou cliquer sur l'icône de dossier
+ de la barre de statut dans le coin en bas à droite de la fenêtre de
+ la machine virtuelle.</para>
+ </listitem>
+
+ <listitem>
+ <para>Si une machine virtuelle n'est pas actuellement en fonction,
+ vous pouvez configurer les dossiers partagés dans la boîte de dialogue
+ <quote>Paramètres</quote> de chaque machine virtuelle.</para>
+ </listitem>
+
+ <listitem>
+ <para>Depuis la ligne de commande, vous pouvez créer des dossiers
+ partagés en utilisant l'interface en ligne de commande VBoxManage&nbsp;;
+ voir le <xref linkend="vboxmanage" />. La commande est comme suit&nbsp;:
+ <screen>VBoxManage sharedfolder add "nom VM" --name "sharename" --hostpath "C:\test"</screen></para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>Il y a deux types de partages&nbsp;:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>Les partages de VM qui ne sont disponibles que pour la VM pour la
+ quelle ils ont été définis&nbsp;;</para>
+ </listitem>
+
+ <listitem>
+ <para>Les partages avec VM transitoires, qui peuvent être ajoutés et
+ supprimés au moment de l'exécution et qui ne demeurent pas après qu'une
+ VM a été arrêtée&nbsp;; pour ces derniers, ajoutez l'option
+ <computeroutput>--transient</computeroutput> à la ligne de commande
+ ci-dessus.</para>
+ </listitem>
+ </orderedlist>
+
+ <para>Les dossiers partagés ont un accès en lecture/écriture aux fichiers du
+ chemin de l'hôte par défaut. Pour obliger l'invité à n'avoir un accès qu'en
+ lecture seule, créez un répertoire partagé en lecture seule. Vous pouvez
+ faire cela, soit en utilisant la GUI, soit en indiquant le paramètre
+ <computeroutput>--readonly</computeroutput> lorsque vous créez le dossier
+ partagé avec VBoxManage.</para>
+
+ <sect2 id="sf_mount_manual">
+ <title>Montage manuel</title>
+
+ <para>Vous pouvez monter le dossier partagé depuis l'intérieur d'une VM
+ de la même façon que vous monteriez un partage réseau ordinaire&nbsp;:</para>
+
+ <para><itemizedlist>
+ <listitem>
+ <para>Sur un invité Windows, à partir de VirtualBox 1.5.0, on peut
+ naviguer dans les dossiers partagés et ils sont donc visibles dans
+ l'explorateur Windows. Donc, pour attacher le dossier partagé de l'hôte
+ à votre invité Windows, ouvrez l'explorateur Windows et cherchez-le
+ sous <quote>Mes emplacements réseau</quote> -&gt; <quote>Tout le
+ réseau</quote> -&gt; <quote>Dossiers partagés de VirtualBox</quote>.
+ En faisant un clic droit sur un dossier partagé et en cliquant sur
+ <quote>Connecter un lecteur réseau</quote> dans le menu qui s'affiche,
+ vous pouvez affecter une lettre de lecteur à ce dossier partagé.</para>
+
+ <para>En alternative, sur la ligne de commande Windows, utilisez ce
+ qui suit&nbsp;:</para>
+
+ <screen>net use x: \\vboxsvr\nom_partage</screen>
+
+ <para>Alors que <computeroutput>vboxsvr</computeroutput> est un nom
+ corrigé (notez que vboxsrv devrait aussi fonctionner), remplacez
+ <quote>x:</quote> par la lettre de lecteur que vous voulez utiliser
+ pour le partage, et <computeroutput>nom_partage</computeroutput> par
+ le nom partagé spécifié avec <computeroutput>VBoxManage</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para>Sur un invité Linux, utilisez la commande suivante&nbsp;:</para>
+
+ <screen>mount -t vboxsf [-o OPTIONS] nom_partage point_montage</screen>
+
+ <para>Pour monter un dossier partagé au démarrage, ajoutez
+ l'entrée suivante à /etc/fstab&nbsp;:</para>
+
+ <screen>sharename mountpoint vboxsf defaults 0 0</screen>
+ </listitem>
+
+ <listitem>
+ <para>Sur un invité Solaris, utilisez la commande suivante&nbsp;:</para>
+
+ <screen>mount -F vboxfs [-o OPTIONS] nom_partage point_montage</screen>
+
+ <para>Remplacez <computeroutput>nom_partage</computeroutput> (utilisez
+ des minuscules) par le nom réseau spécifié avec
+ <computeroutput>VBoxManage</computeroutput> ou la GUI, et point_montage
+ par le chemin où vous voulez que le partage soit monté sur l'invité
+ (comme <computeroutput>/mnt/share</computeroutput>). Les règles de
+ montage habituelles s'appliquent, à savoir créez ce répertoire au
+ préalable s'il n'existe pas encore.</para>
+
+ <para>Voici un exemple de montage de dossier partagé pour l'utilisateur
+ <quote>jack</quote> sur OpenSolaris&nbsp;:</para>
+
+ <screen>$ id
+uid=5000(jack) gid=1(other)
+$ mkdir /export/home/jack/mount
+$ pfexec mount -F vboxfs -o uid=5000,gid=1 jackshare /export/home/jack/mount
+$ cd ~/mount
+$ ls
+sharedfile1.mp3 sharedfile2.txt
+$</screen>
+
+ <para>Au-delà des options de montage fournies par la commande
+ <computeroutput>mount</computeroutput>, celles suivantes sont
+ disponibles&nbsp;:</para>
+
+ <screen>iocharset CHARSET</screen>
+
+ <para>pour régler l'encodage utilisé pour les opérations E/S (utf8 par
+ défaut) et</para>
+
+ <screen>convertcp CHARSET</screen>
+
+ <para>pour spécifier l'encodage utilisé pour le nom du dossier partagé
+ (utf8 par défaut).</para>
+
+ <para>Les options génériques de mount (documentées dans la page de
+ manuel de mount) s'appliquent également. Celles particulièrement
+ utiles sont les options <computeroutput>gid</computeroutput> et
+ <computeroutput>mode</computeroutput>, car elles autorisent l'accès
+ par des utilisateurs normaux (en mode lecture/écriture selon les
+ réglages) même si l'administrateur a monté le système de fichiers.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect2>
+
+ <sect2 id="sf_mount_auto">
+ <title>Montage automatique</title>
+
+ <para>À partir de la version 3.3.0, VirtualBox supporte le montage
+ automatique des dossiers partagés. Les additions invité installées prendront
+ en compte tous les dossiers partagés qui sont marqués comme devant être
+ montés automatiquement dès que l'utilisateur est connecté sur le système
+ d'exploitation invité. Cela le rend plus pratique, plutôt que de monter
+ les dossiers partagés à la main comme décrit au <xref
+ linkend="sf_mount_manual" />.</para>
+ <note>
+ <para>Le montage automatique n'est actuellement supporté que sur les
+ invités Windows, Linux et Solaris.</para>
+ </note>
+
+ <para>Sur les invités Windows, un dossier monté automatiquement sera
+ représenté par sa propre lettre de lecteur (comme <computeroutput>E:</computeroutput>),
+ selon les lettres de lecteur qui restent disponibles sur le système.</para>
+
+ <para>Sur les invités Linux et Solaris, les dossiers partagés automatiquement
+ montés sont montés dans le répertoire <computeroutput>/media</computeroutput>,
+ avec le préfixe <computeroutput>sf_</computeroutput>, donc le
+ dossier partagé <computeroutput>myfiles</computeroutput> serait monté dans
+ <computeroutput>/media/sf_myfiles</computeroutput> sur Linux
+ et dans <computeroutput>/mnt/sf_myfiles</computeroutput> sur Solaris.</para>
+
+ <para>Pour modifier le préfixe <computeroutput>sf_</computeroutput> d'une
+ machine virtuelle donnée, réglez la valeur de sa propriété invité
+ <computeroutput>/VirtualBox/GuestAdd/SharedFolders/MountPrefix</computeroutput>
+ sur une autre valeur&nbsp;; voir le <xref linkend="guestadd-guestprops" />
+ pour des détails.</para>
+
+ <para>Pour qu'un utilisateur ait accès complet aux dossiers partagés
+ automatiquement montés sur l'invité, cet utilisateur a besoin de faire
+ partie du groupe nouvellement créé <quote>vboxsf</quote>, qui est
+ créé par l'installeur des additions invité de VirtualBox. S'il n'est pas
+ dans ce groupe, il aura un accès en lecture seule.</para>
+
+ <para>Pour appliquer les modifications, par exemple l'ajout ou la
+ suppression d'un nouveau dossier monté automatiquement, alors qu'une VM est
+ en fonction, il faut redémarrer l'OS invité. Cependant, cela ne touche pas
+ <xref linkend="sf_mount_manual" />.</para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="seamlesswindows">
+ <title>Fenêtres intégrées</title>
+
+ <para>Avec la fonctionnalité <quote>fenêtres intégrées</quote> de
+ VirtualBox, vous pouvez faire apparaître les fenêtres affichées dans une
+ machine virtuelle côte à côte près des fenêtres de votre hôte. Cette
+ fonctionnalité est supportée pour les systèmes d'exploitation suivants
+ (fournis lorsque les additions invité sont installées)&nbsp;:<itemizedlist>
+ <listitem>
+ <para>Invités Windows (support ajoutés avec VirtualBox 1.5)&nbsp;;</para>
+ </listitem>
+
+ <listitem>
+ <para>Invités Linux ou Solaris/OpenSolaris avec une version 1.3 ou
+ supérieure du serveur X.org <footnote>
+ <para>La version du serveur X n'est pas la même que la version de
+ toute la suite X.org. Vous pouvez taper <computeroutput>X
+ -version</computeroutput> dans un terminal pour connaître le
+ niveau de version du serveur X.org actuellement installée.</para>
+ </footnote> (support ajouté avec VirtualBox 1.6).
+ L'exception est Fedora 9, du fait d'un bogue dans leur serveur X.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>Après que l'intégration des fenêtres a été activée (voir ci-dessous),
+ VirtualBox supprime l'affichage du fond d'écran du bureau de votre invité,
+ vous permettant de lancer les fenêtres de votre système d'exploitation
+ invité de façon intégrée à côté des fenêtres de votre hôte&nbsp;:</para>
+ <para><mediaobject>
+ <imageobject>
+ <imagedata align="center" fileref="images/seamless.png" width="10cm" />
+ </imageobject>
+ </mediaobject>Pour activer ce mode, après avoir démarré la machine
+ virtuelle, appuyez sur la touche Hôte (en principe la touche Contrôle
+ droite) simultanément avec <quote>L</quote>. Cela agrandira la taille de
+ l'affichage de la VM jusqu'à la taille de l'écran de votre hôte et
+ masquera le fond d'écran du système d'exploitation invité. Pour revenir à
+ l'affichage <quote>normal</quote> de la VM (désactivant ainsi l'intégration
+ des fenêtres), ré-appuyez sur les touches Hôte et <quote>L</quote>.</para>
+ </sect1>
+
+ <sect1>
+ <title>Le graphisme avec l'accélération matérielle</title>
+
+ <sect2 id="guestadd-3d">
+ <title>Accélération 3D matérielle (OpenGL et Direct3D 8/9)</title>
+
+ <para>Les additions invité de VirtualBox contiennent un support matériel
+ expérimental du 3D pour les invités Windows, Linux et Solaris.<footnote>
+ <para>Le support d'OpenGL pour les invités Windows a été ajouté avec
+ VirtualBox 2.1&nbsp;; le support pour Linux et Solaris a suivi avec
+ VirtualBox 2.2. Avec VirtualBox 3.0, le support Direct3D 8/9 a été
+ ajouté pour les invités Windows. OpenGL 2.0 est maintenant
+ également supporté.</para>
+ </footnote></para>
+
+ <para>Avec cette fonctionnalité, si une application à l'intérieur de votre
+ machine virtuelle utilise des fonctionnalités 3D passant par les interfa
+ ces de programmation d'OpenGL ou de Direct3D 8/9, au lieu de les émuler de
+ manière logicielle (ce qui serait lent), VirtualBox essaiera d'utiliser le
+ matériel 3D de votre hôte. Ceci fonctionne pour toutes les plateformes
+ supportées (Windows, Mac, Linux, Solaris), à condition que votre système
+ d'exploitation hôte puisse d'abord lui-même utiliser votre matériel 3D
+ accéléré.</para>
+
+ <para>L'accélération 3D nécessite actuellement les conditions suivantes&nbsp;:<orderedlist>
+ <listitem>
+ <para>Elle n'est disponible que pour certains invités Windows, Linux
+ et Solaris. En particulier&nbsp;:<itemizedlist>
+ <listitem>
+ <para>Pour les invités Windows, le support se réduit aux
+ versions 32 bits d'XP et de Vista. OpenGL et Direct3D 8/9 sont
+ supportés (expérimental).</para>
+ </listitem>
+
+ <listitem>
+ <para>OpenGL sur Linux exige un noyau 2.6.27 et supérieur
+ ainsi qu'une version du serveur X.org 1.5 et supérieure. Ubuntu
+ 8.10 et Fedora 10 ont été testées et confirmées comme
+ fonctionnant.</para>
+ </listitem>
+
+ <listitem>
+ <para>OpenGL sur les invités Solaris exige une version de X.org
+ 1.5 et supérieur.</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para>Les additions invité doivent être installés.<note>
+ <para>Pour que l'accélération Direct 3D fonctionne dans un invité
+ Windows, VirtualBox doit remplacer les fichiers du système
+ Windows de la machine virtuelle. Il en résulte que l'installation
+ du programme des additions invité offre l'accélération Direct
+ 3D en tant qu'option qui doit être explicitement activée.</para>
+
+ <para>Vous devez aussi installer les additions invité en
+ <quote>mode sécurisé</quote>&nbsp;; voir le <xref
+ linkend="KnownIssues" /> pour les détails.</para>
+ </note></para>
+ </listitem>
+
+ <listitem>
+ <para>Vu que le support 3D est encore pour l'instant expérimental,
+ il est désactivé par défaut et vous devez
+ <emphasis role="bold">l'activer à la main</emphasis> dans les
+ paramètres de la VM (voir le chapitre <xref linkend="generalsettings" />).<note>
+
+ <para>Il se peut que l'activation de l'accélération 3D expose des
+ trous de sécurité à des logiciels malveillants en fonction sur
+ l'invité. Le code tiers utilisé par VirtualBox à cette fin
+ (Chromium) n'est pas assez endurci pour empêcher n'importe quelle
+ opération 3D risquée sur l'hôte.</para>
+ </note></para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>Techniquement, VirtualBox implémente cela en installant un pilote 3D
+ matériel supplémentaire dans votre invité lorsque vous installez les
+ additions invité. Ce pilote agit comme un pilote de matériel 3D et signale
+ au système d'exploitation invité que le matériel (virtuel) est capable
+ d'une accélération 3D matérielle. Lorsqu'une application sur l'invité
+ demande l'accélération matérielle par les interfaces de programmation
+ d'OpenGL ou de Direct3D, les requêtes sont envoyées à l'hôte par un tunnel
+ de communication spécial implémenté par VirtualBox, puis l'hôte effectue
+ l'opération 3D demandée par les interfaces de programmation de l'hôte.</para>
+ </sect2>
+
+ <sect2 id="guestadd-2d">
+ <title>Accélération vidéo 2D pour Windows</title>
+
+ <para>À partir de la version 3.1, les additions invité de VirtualBox
+ contiennent le support expérimental de l'accélération 2D matérielle pour
+ les invités Windows.</para>
+
+ <para>Avec cette fonctionnalité, si une application (telle qu'un lecteur
+ vidéo) dans votre VM utilise les superpositions vidéos 2D pour jouer un
+ clip animé, VirtualBox essaiera alors d'utiliser le matériel d'accélération
+ graphique de votre hôte au lieu de l'étirement des superpositions ou la
+ conversion de couleurs logiciels (ce qui serait lent). Cela fonctionne
+ actuellement pour les plateformes d'hôtes Windows, Linux et Mac, à
+ condition que votre système d'exploitation puisse lui-même utiliser
+ l'accélération graphique 2D.</para>
+
+ <para>L'accélération graphique 2D fonctionne actuellement sous les
+ conditions suivantes&nbsp;:<orderedlist>
+ <listitem>
+ <para>Elle n'est disponible que pour les invités Windows (XP ou
+ supérieur).</para>
+ </listitem>
+
+ <listitem>
+ <para>Les additions invité doivent être installés.</para>
+ </listitem>
+
+ <listitem>
+ <para>Comme le support 2D est encore pour l'instant expérimental, il
+ est par défaut désactivé et vous devez <emphasis role="bold">l'activer
+ à la main</emphasis> dans les paramètres de la VM (voir le <xref
+ linkend="generalsettings" />).</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>Techniquement, VirtualBox implémente cela en offrant dans le pilote
+ graphique invité les capacités de superposition graphique DirectDraw. Le
+ pilote envoie toutes les commandes de superposition à l'hôte à travers un
+ tunnel de communication spécial implémenté par VirtualBox. De l'autre côté,
+ OpenGL est alors utilisé pour implémenter échelonnement de transformation
+ d'espace de couleurs</para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="guestadd-guestprops">
+ <title>Propriétés invité</title>
+
+ <para>À partir de la version 2.1, VirtualBox vous permet d'exiger certaines
+ propriétés de la part d'un invité en fonction, à condition que les additions
+ invité de VirtualBox soient installées et que la VM soit en fonction. Ceci
+ est intéressant pour deux choses&nbsp;:<orderedlist>
+ <listitem>
+ <para>Un certain nombre de caractéristiques prédéfinies d'une VM
+ peuvent être automatiquement maintenues par l'hôte et récupérées sur
+ l'hôte, comme la surveillance de performances et des statiques de la
+ VM.</para>
+ </listitem>
+
+ <listitem>
+ <para>Des chaînes de données de votre choix peuvent être échangées
+ entre l'invité et l'hôte. Cela fonctionne dans les deux sens.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>Pour faire cela, VirtualBox établit un canal de communication privé
+ entre les additions invité de VirtualBox et l'hôte, et le logiciel des deux
+ côtés peut utiliser ce canal pour échanger des chaînes de données à des fins
+ de votre choix. Les propriétés de l'invité sont simplement des chaînes de
+ touches auxquelles est attachée une valeur. Elles peuvent être paramétrées
+ (on peut écrire dessus) soit depuis l'hôte, soit depuis l'invité, et on peut
+ les lire des deux côtés.</para>
+
+ <para>En plus d'établir un mécanisme général de valeurs de lecture et
+ d'écriture, le paramétrage de propriétés d'invité prédéfinies est
+ automatiquement maintenu par les additions invité de VirtualBox pour
+ permettre de récupérer des données de l'invité intéressantes telles que le
+ système d'exploitation exact de l'invité et le niveau du pack service, la
+ version des additions invité installée, les utilisateurs actuellement
+ connectés à l'OS invité, les statistiques du réseau et davantage. Ces
+ propriétés prédéfinies sont toutes précédées de <computeroutput>/VirtualBox/</computeroutput>
+ et organisées dans une arborescence de clés hiérarchiques.</para>
+
+ <para>Certaines de ces informations apparaissent en fonctionnement quand vous
+ sélectionnez <quote>Boîte de dialogue d'informations de session</quote>
+ depuis le menu <quote>Machine</quote> d'une machine virtuelle.</para>
+
+ <para>Une façon plus flexible d'utiliser ce canal est de passer par la
+ commande de paramétrage <computeroutput>VBoxManage guestproperty</computeroutput>&nbsp;;
+ voir le <xref linkend="vboxmanage-guestproperty" /> pour les détails. Par
+ exemple, pour que toutes les propriétés invité soient disponibles pour une
+ VM en cours de fonctionnement donnée, listées avec leurs valeurs respectives,
+ utilisez ceci&nbsp;:<screen>$ VBoxManage guestproperty enumerate "Windows Vista III"
+VirtualBox Command Line Management Interface Version $VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILD
+(C) 2005-$VBOX_C_YEAR $VBOX_VENDOR
+All rights reserved.
+
+Name: /VirtualBox/GuestInfo/OS/Product, value: Windows Vista Business Edition,
+ timestamp: 1229098278843087000, flags:
+Name: /VirtualBox/GuestInfo/OS/Release, value: 6.0.6001,
+ timestamp: 1229098278950553000, flags:
+Name: /VirtualBox/GuestInfo/OS/ServicePack, value: 1,
+ timestamp: 1229098279122627000, flags:
+Name: /VirtualBox/GuestAdd/InstallDir,
+ value: C:/Program Files/Oracle/VirtualBox
+ Guest Additions, timestamp: 1229098279269739000, flags:
+Name: /VirtualBox/GuestAdd/Revision, value: 40720,
+ timestamp: 1229098279345664000, flags:
+Name: /VirtualBox/GuestAdd/Version, value: $VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILD,
+ timestamp: 1229098279479515000, flags:
+Name: /VirtualBox/GuestAdd/Components/VBoxControl.exe, value: $VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILDr40720,
+ timestamp: 1229098279651731000, flags:
+Name: /VirtualBox/GuestAdd/Components/VBoxHook.dll, value: $VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILDr40720,
+ timestamp: 1229098279804835000, flags:
+Name: /VirtualBox/GuestAdd/Components/VBoxDisp.dll, value: $VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILDr40720,
+ timestamp: 1229098279880611000, flags:
+Name: /VirtualBox/GuestAdd/Components/VBoxMRXNP.dll, value: $VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILDr40720,
+ timestamp: 1229098279882618000, flags:
+Name: /VirtualBox/GuestAdd/Components/VBoxService.exe, value: $VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILDr40720,
+ timestamp: 1229098279883195000, flags:
+Name: /VirtualBox/GuestAdd/Components/VBoxTray.exe, value: $VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILDr40720,
+ timestamp: 1229098279885027000, flags:
+Name: /VirtualBox/GuestAdd/Components/VBoxGuest.sys, value: $VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILDr40720,
+ timestamp: 1229098279886838000, flags:
+Name: /VirtualBox/GuestAdd/Components/VBoxMouse.sys, value: $VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILDr40720,
+ timestamp: 1229098279890600000, flags:
+Name: /VirtualBox/GuestAdd/Components/VBoxSF.sys, value: $VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILDr40720,
+ timestamp: 1229098279893056000, flags:
+Name: /VirtualBox/GuestAdd/Components/VBoxVideo.sys, value: $VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILDr40720,
+ timestamp: 1229098279895767000, flags:
+Name: /VirtualBox/GuestInfo/OS/LoggedInUsers, value: 1,
+ timestamp: 1229099826317660000, flags:
+Name: /VirtualBox/GuestInfo/OS/NoLoggedInUsers, value: false,
+ timestamp: 1229098455580553000, flags:
+Name: /VirtualBox/GuestInfo/Net/Count, value: 1,
+ timestamp: 1229099826299785000, flags:
+Name: /VirtualBox/HostInfo/GUI/LanguageID, value: C,
+ timestamp: 1229098151272771000, flags:
+Name: /VirtualBox/GuestInfo/Net/0/V4/IP, value: 192.168.2.102,
+ timestamp: 1229099826300088000, flags:
+Name: /VirtualBox/GuestInfo/Net/0/V4/Broadcast, value: 255.255.255.255,
+ timestamp: 1229099826300220000, flags:
+Name: /VirtualBox/GuestInfo/Net/0/V4/Netmask, value: 255.255.255.0,
+ timestamp: 1229099826300350000, flags:
+Name: /VirtualBox/GuestInfo/Net/0/Status, value: Up,
+ timestamp: 1229099826300524000, flags:
+Name: /VirtualBox/GuestInfo/OS/LoggedInUsersList, value: username,
+ timestamp: 1229099826317386000, flags:</screen></para>
+
+ <para>Pour chercher la valeur d'une seule propriété, utilisez la
+ sous-commande <quote>get</quote> comme ceci&nbsp;:<screen>$ VBoxManage guestproperty get "Windows Vista III"
+ "/VirtualBox/GuestInfo/OS/Product"
+VirtualBox Command Line Management Interface Version $VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILD
+(C) 2005-$VBOX_C_YEAR $VBOX_VENDOR
+All rights reserved.
+
+Value: Windows Vista Business Edition
+</screen></para>
+
+ <para>Pour ajouter ou modifier des propriétés depuis l'invité, utilisez
+ l'outil <computeroutput>VBoxControl</computeroutput>. Cet outil est inclu
+ avec les additions invité de VirtualBox 2.2 ou supérieur. Lorsqu'il est lancé
+ depuis un invité Linux, cet outil exige les privilèges administrateur pour
+ des raisons de sécurité&nbsp;:<screen>$ sudo VBoxControl guestproperty enumerate
+VirtualBox Guest Additions Command Line Management Interface Version $VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILD
+(C) 2009-$VBOX_C_YEAR $VBOX_VENDOR
+All rights reserved.
+
+Name: /VirtualBox/GuestInfo/OS/Release, value: 2.6.28-18-generic,
+ timestamp: 1265813265835667000, flags: &lt;NULL&gt;
+Name: /VirtualBox/GuestInfo/OS/Version, value: #59-Ubuntu SMP Thu Jan 28 01:23:03 UTC 2010,
+ timestamp: 1265813265836305000, flags: &lt;NULL&gt;
+ ...</screen></para>
+
+ <para>Pour des besoins plus complexes, vous pouvez utiliser les interfaces
+ de programmation de VirtualBox&nbsp;; voir le <xref linkend="VirtualBoxAPI" />.</para>
+ </sect1>
+
+ <sect1 id="guestadd-guestcontrol">
+ <title>Contrôle invité</title>
+
+ <para>À partir de la version 3.2, les additions invité de VirtualBox
+ permettent le démarrage d'applications à l'intérieur d'une VM depuis le
+ système hôte.</para>
+
+ <para>Pour que cela fonctionne, l'application doit être installée dans
+ l'invité&nbsp;; aucun logiciel supplémentaire ne doit être installé sur
+ l'hôte. En outre, la sortie en mode texte (sur stdout et stderr) peut être
+ affiché sur l'hôte pour un traitement ultérieur avec des options pour
+ spécifier les droits de l'utilisateur et une valeur de timeout (en
+ millisecondes) pour limiter le temps pendant lequel l'application peut
+ s'exécuter.</para>
+
+ <para>Cette fonctionnalité peut être utilisée pour automatiser le déploiement
+ de logiciels dans l'invité.</para>
+
+ <para>Pour utiliser cette fonctionnalité, utilisez la ligne de commande de
+ VirtualBox. Voir le <xref linkend="vboxmanage-guestcontrol" /> pour des
+ détails.</para>
+ </sect1>
+
+ <sect1 id="guestadd-balloon">
+ <title>Faire de la montgolfière avec la mémoire</title>
+
+ <para>À partir de la version 3.2, les additions invité de VirtualBox peuvent
+ modifier la quantité de mémoire d'une machine virtuelle alors que la machine
+ est en fonction. Vu la façon dont ceci est implémenté, cette fonctionnalité
+ est appelée <quote>faire de la montgolfière</quote>.</para>
+
+ <para>Normalement, pour modifier la quantité de mémoire allouée à une machine
+ virtuelle, il faut éteindre complètement la machine virtuelle et modifier les
+ paramètres de la machine virtuelle. Avec la pratique de la montgolfière, on
+ peut donner de la mémoire qui a été allouée à une machine virtuelle à une
+ autre machine virtuelle sans devoir éteindre la machine. Cela peut être
+ utile pour démarrer temporairement une autre machine virtuelle, ou dans des
+ environnements plus compliqués pour la gestion sophistiquée de la mémoire de
+ beaucoup de machines virtuelles qui peuvent être en fonction en même temps,
+ en fonction de la façon dont la mémoire est utilisée par les invités.</para>
+
+ <para>Quand on demande la mémoire en montgolfière, les additions invité de
+ VirtualBox (qui se lancent dans l'invité) allouent de la mémoire physique à
+ partir du système d'exploitation invité au niveau du noyau et verrouillent
+ vers le bas cette mémoire dans l'invité. Cela garantit que l'invité
+ n'utilisera plus cette mémoire&nbsp;: aucune application invitée ne peut
+ l'allouer, et le système d'exploitation invité ne l'utilisera pas non plus.
+ VirtualBox peut alors réutiliser cette mémoire et la donner à une seconde
+ machine.</para>
+
+ <para>La mémoire rendue disponible par le mécanisme de la montgolfière n'est
+ disponible que pour une réutilisation par VirtualBox. Elle n'est pas libérée
+ pour l'hôte. La demande de la montgolfière depuis un invité en fonction
+ n'augmentera donc pas la quantité de mémoire libre et non allouée de l'hôte.</para>
+
+ <para>En fait, la pratique de la montgolfière est donc un mécanisme de
+ réaffectation de mémoire pour plusieurs machines virtuelles alors qu'elles
+ sont en fonction.</para>
+
+ <para>Pour l'instant, la pratique de la montgolfière avec de la mémoire
+ n'est supportée que dans VBoxManage, l'outil de VirtualBox en ligne de
+ commande. Utilisez la commande suivante pour augmenter ou diminuer la taille
+ du ballon de la mémoire dans une machine virtuelle en fonction où les
+ additions invité sont installés&nbsp;:<screen>VBoxManage controlvm "nom VM" guestmemoryballoon &lt;n&gt;</screen>
+ où <computeroutput>"nom VM"</computeroutput> est le nom ou l'UUID de la
+ machine virtuelle en question et <computeroutput>&lt;n&gt;</computeroutput>
+ est la quantité de mémoire à allouer depuis l'invité, en mégaoctets&nbsp;;
+ voir le <xref linkend="vboxmanage-controlvm" /> pour plus d'informations..</para>
+
+ <para>Vous pouvez aussi régler un ballon par défaut qui sera automatiquement
+ demandée depuis la VM à chaque fois qu'elle a été démarrée avec la commande
+ suivante&nbsp;: <screen>VBoxManage modifyvm "nom VM" --guestmemoryballoon &lt;n&gt;</screen></para>
+
+ <para>Par défaut, aucun ballon de mémoire n'est alloué. C'est un paramètre
+ de la VM, comme d'autres paramètres de modifyvm, et il peut donc être réglé
+ alors que machine éteinte&nbsp;; voir le <xref
+ linkend="vboxmanage-modifyvm" />.</para>
+
+ <para><note>
+ <para>VirtualBox ne supporte la pratique de la montgolfière que sur les
+ hôtes 64 bits, la pratique de la montgolfière n'est pas supportée sur
+ les hôtes Mac OS X.</para>
+ </note></para>
+ </sect1>
+
+ <sect1 id="guestadd-pagefusion">
+ <title>Fusion de page</title>
+
+ <para>La fusion de page est une technologie nouvelle pour améliorer encore
+ plus la densité de la VM sur l'hôte, et donc une manière de partager les
+ ressources. Elle a été introduite tout d'abord avec VirtualBox 3.2 et est
+ actuellement limitée aux VMs qui utilisent Windows 2000 et supérieur. Dans
+ un scénario classique, des douzaines, voire des centaines de VMs très
+ similaires sont consolidées sur un ordinateur hôte puissant et le niveau de
+ consolidation est limité le plus souvent par la quantité de RAM qui peut
+ être installée sur un système pour un coût raisonnable. Souvent, du fait
+ d'un épuisement de RAM, on ne peut démarrer de VMs supplémentaires, bien que
+ les processeurs de l'hôte offrent encore de la capacité. Pour dépasser cette
+ limite, les hyperviseurs peuvent bénéficier du fait que souvent, les VMs se
+ ressemblent (comme plusieurs VMs exécutant Windows XP Pack Service 2) et
+ donc, elles contiennent une quantité de cellules de RAM identiques.
+ L'hyperviseur peut chercher de telles données en double en mémoire, éliminer
+ les redondances et libérer ainsi de la mémoire supplémentaire.</para>
+
+ <para>Les hyperviseurs traditionnels utilisent une technique souvent appelée
+ le <quote>partage de mémoire</quote> ou la <quote>synchronisation de la même
+ page</quote> quand ils parcourent toute la mémoire et calculent des sommes
+ de contrôle (hashes) pour chaque page de mémoire. Puis, ils cherchent des
+ pages avec des hashes identiques et ils comparent le contenu des pages (si
+ deux pages donnent le mêmes hash, c'est très vraisemblablement que les pages
+ ont un contenu identique). Les pages identiques sont éliminées afin que
+ toutes les VMs pointent vers la même page tant qu'aucune VM n'essaie de
+ modifier la page. Si une telle page est modifiée, le doublon précédemment
+ éliminé est à nouveau alloué. Tout cela est complètement transparent pour la
+ machine virtuelle. Cependant, l'algorithme classique comporte plusieurs
+ inconvénients. Avant tout, il est plutôt long pour scanner la mémoire
+ complète (surtout lorsque le système n'est pas en veille) donc la mémoire
+ supplémentaire ne devient disponibles qu'après du temps (cela peut prendre
+ plusieurs jours&nbsp;!). En outre, tout l'algorithme de partage de page
+ consomme en général des ressources processeur significatives et augmente la
+ surcharge de virtualisation de 10 à 20%.</para>
+
+ <para>La fusion de page dans VirtualBox utilise les additions invité de
+ VirtualBox pour identifier les cellules de mémoire qui sont le plus
+ vraisemblablement identiques entre les VMs et donc effectue la plupart des
+ sauvegardes possibles de partage de mémoire presque immédiatement et presque
+ sans surcharge. La fusion de page a également beaucoup moins de chances
+ d'être faussée par de la mémoire identique en l'éliminant pour apprendre
+ quelques secondes plus tard que la mémoire a maintenant changé, devant alors
+ effectuer une ré-allocation très coûteuse et souvent perturbatrice.</para>
+
+ <para>Vous pouvez activer la fusion de page pour une VM en utilisant&nbsp;:
+ <screen>VBoxManage modifyvm "nom VM" --pagefusion on</screen>
+ </para>
+
+ <para>Vous pouvez observer l'opération de fusion de page en utilisant
+ certaines unités. <computeroutput>RAM/VMM/Shared</computeroutput>
+ affiche la quantité totale de pages fusionnées alors que l'unité
+ <computeroutput>Guest/RAM/Usage/Shared</computeroutput> par VM retournera la
+ quantité de mémoire fusionnée pour une machine donnée. Merci de vous reporter
+ au <xref linkend="metrics" /> pour des informations sur la façon de demander
+ des unités.</para>
+
+ <para><note>
+ <para>VirtualBox ne supporte la fusion de page que sur des systèmes
+ d'exploitation hôtes 64 bits. Les hôtes Mac OS X ne sont pas actuellement
+ supportés. La fusion de page n'est disponible que pour les invités Windows
+ 2000 et supérieur avec les additions invité actuelles.</para>
+ </note></para>
+ </sect1>
+</chapter>
diff --git a/doc/manual/fr_FR/user_Installation.xml b/doc/manual/fr_FR/user_Installation.xml
new file mode 100644
index 00000000..d249850d
--- /dev/null
+++ b/doc/manual/fr_FR/user_Installation.xml
@@ -0,0 +1,892 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+ "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<chapter id="installation">
+ <title>Détails d'installation</title>
+
+ <para>Étant donné que l'installation de VirtualBox varie selon votre système
+ d'exploitation hôte, nous fournissons des instructions d'installation dans
+ quatre chapitres distincts, respectivement pour Windows, Mac OS X, Linux et
+ Solaris.</para>
+
+ <sect1 id="installation_windows">
+ <title>Installation sur des hôtes Windows</title>
+
+ <sect2>
+ <title>Prérequis</title>
+
+ <para>Pour les différentes versions de Windows que nous supportons comme
+ systèmes d'exploitation hôtes, merci de vous référer au <xref
+ linkend="hostossupport" />.</para>
+
+ <para>En outre, l'installateur de Windows 1.1 ou supérieur doit être
+ présent sur votre système. Cela devrait être le cas si vous avez installé
+ toutes les dernières mises à jour.</para>
+ </sect2>
+
+ <sect2>
+ <title>Effectuer l'installation</title>
+
+ <para>Vous pouvez démarrer l'installation de VirtualBox <itemizedlist>
+ <listitem>
+ <para>soit en double-cliquant sur son fichier exécutable (contenant
+ les architectures 32 bits et 64 bits)</para>
+ </listitem>
+
+ <listitem>
+ <para>ou en entrant <screen>VirtualBox.exe -extract</screen></para>
+
+ <para>sur la ligne de commande. Ceci va extraire les deux
+ installateurs dans un répertoire temporaire dans lequel vous trouverez
+ ensuite les fichiers .MSI habituels. Puis, vous pouvez faire un
+ <screen>msiexec /i VirtualBox-&lt;version&gt;-MultiArch_&lt;x86|amd64&gt;.msi</screen>
+ pour effectuer l'installation.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>Dans tous les cas, ceci affichera la boîte de dialogue de bienvenue
+ de l'installation et vous permettra de choisir où installer VirtualBox et
+ quels composants installer. Outre l'application VirtualBox, les composants
+ suivants sont disponibles&nbsp;:<glosslist>
+ <glossentry>
+ <glossterm>Support USB</glossterm>
+
+ <glossdef>
+ <para>Ce paquet contient des pilotes spéciaux pour votre hôte
+ Windows dont VirtualBox a besoin pour supporter complètement les
+ périphériques USB à l'intérieur de vos machines virtuelles.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Réseau</glossterm>
+
+ <glossdef>
+ <para>Ce paquet contient des pilotes supplémentaires de réseau pour
+ votre hôte Windows dont VirtualBox a besoin pour supporter Host
+ Interface Networking (réseau interface hôte) (pour rendre les
+ cartes réseau virtuelles accessibles depuis les autres machines
+ de votre réseau physique).</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Support Python</glossterm>
+
+ <glossdef>
+ <para>Ce paquet contient le support de scripts Python pour l'API
+ de VirtualBox (voir le chapitre <xref linkend="VirtualBoxAPI" />).
+ Pour que cette fonctionnalité soit installée, une installation de
+ Python opérationnelle sur le système est nécessaire.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+
+ <para>En fonction de votre configuration de Windows, il se peut que vous
+ voyez des avertissements sur des <quote>pilotes non signés</quote> ou
+ quelque chose de ce genre. Merci de sélectionner <quote>Continuer</quote>
+ sur ces avertissements car sans cela, VirtualBox pourrait ne pas fonctionner
+ correctement après l'installation.</para>
+
+ <para>L'installateur va créer le groupe <quote>VirtualBox</quote> dans le
+ répertoire Démarrer Les programmes qui vous permet de lancer l'application
+ et d'accéder à sa documentation.</para>
+
+ <para>Avec des paramètres standards, VirtualBox sera installé pour tous
+ les utilisateurs du système local. Au cas où vous ne le voulez pas, vous
+ devez invoquer l'installateur en l'extrayant d'abord en utilisant
+ <screen>VirtualBox.exe -extract</screen> puis faites comme suit&nbsp;:
+ <screen>VirtualBox.exe -msiparams ALLUSERS=2</screen>
+ ou <screen>msiexec /i VirtualBox-&lt;version&gt;-MultiArch_&lt;x86|amd64&gt;.msi ALLUSERS=2</screen>
+ sur les fichiers .MSI extraits. Ceci ne va installer VirtualBox que pour
+ l'utilisateur actuel.</para>
+
+ <para>Pour ne pas installer certaines fonctionnalités de VirtualBox, vous
+ pouvez spécifier aussi un paramètre <computeroutput>ADDLOCAL</computeroutput>
+ pour nommer explicitement les fonctionnalités à installer. Les
+ fonctionnalités suivantes sont disponibles&nbsp;:
+
+ <glosslist>
+ <glossentry>
+ <glossterm>VBoxApplication</glossterm>
+
+ <glossdef>
+ <para>Binaires principaux de VirtualBox.
+ <note>Cette fonctionnalité ne peut jamais être absente puisqu'elle
+ contient l'ensemble de fichiers minimum pour que l'installation
+ de VirtualBox fonctionne&nbsp;!</note>
+ </para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>VBoxUSB</glossterm>
+
+ <glossdef>
+ <para>Support USB.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>VBoxNetwork</glossterm>
+
+ <glossdef>
+ <para>Tout le support réseau&nbsp;; inclut les fonctionnalités
+ VBoxNetworkFlt et VBoxNetworkAdp (voir ci-dessous).</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>VBoxNetworkFlt</glossterm>
+
+ <glossdef>
+ <para>Support réseau bridgé.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>VBoxNetworkAdp</glossterm>
+
+ <glossdef>
+ <para>Support réseau Host-only.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>VBoxPython</glossterm>
+
+ <glossdef>
+ <para>Support Python.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist>
+
+ Pour n'installer que le support USB avec les binaires principaux, faites
+ un&nbsp;: <screen>VirtualBox.exe -msiparams ADDLOCAL=VBoxApplication,VBoxUSB</screen>
+ ou un <screen>msiexec /i VirtualBox-&lt;version&gt;-MultiArch_&lt;x86|amd64&gt;.msi ADDLOCAL=VBoxApplication,VBoxUSB</screen></para>
+
+ </sect2>
+
+ <sect2>
+ <title>Désinstallation</title>
+
+ <para>Comme nous utilisons l'installateur Windows, vous pouvez désinstaller
+ VirtualBox en sécurité n'importe quand en choisissant l'entrée du programme
+ dans la fonction <quote>Ajout/suppression de programmes</quote> dans le
+ panneau de configuration Windows.</para>
+ </sect2>
+
+ <sect2>
+ <title>Installation sans efforts</title>
+
+ <para>Vous pouvez faire des installations sans effort en utilisant le
+ support MSI standard.</para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Installation sur des hôtes Mac OS X</title>
+
+ <sect2>
+ <title>Effectuer l'installation</title>
+
+ <para>Pour les hôtes Mac OS X, VirtualBox est emballé dans une fichier
+ image de disque (dmg). Effectuez les étapes suivantes&nbsp;: <orderedlist>
+ <listitem>
+ <para>Double-cliquez sur ce fichier pour monter son contenu.</para>
+ </listitem>
+
+ <listitem>
+ <para>Une fenêtre va s'ouvrir vous disant de double-cliquer sur le
+ fichier installateur <computeroutput>VirtualBox.mpkg</computeroutput>
+ affiché dans la fenêtre.</para>
+ </listitem>
+
+ <listitem>
+ <para>Ceci démarrera l'installateur, ce qui vous permettra de
+ sélectionner où installer VirtualBox.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>Après l'installation, vous pouvez trouver une icône VirtualBox dans
+ le menu <quote>Applications</quote> dans le <quote>Finder</quote>.</para>
+ </sect2>
+
+ <sect2>
+ <title>Désinstallation</title>
+
+ <para>Pour désinstaller VirtualBox, ouvrez à nouveau le fichier image (dmg)
+ et double-cliquez sur l'icône Désinstaller contenue dedans.</para>
+ </sect2>
+
+ <sect2>
+ <title>Installation sans efforts</title>
+
+ <para>Pour effectuer une installation non interactive de VirtualBox, vous
+ pouvez utiliser la version en ligne de commande de l'application
+ installateur.</para>
+
+ <para>Montez le fichier image de disque (dmg) comme décrit dans
+ l'installation normale. Puis, ouvrez une session de terminal et exécutez&nbsp;:</para>
+
+ <screen>sudo installer -pkg /Volumes/VirtualBox/VirtualBox.mpkg \
+ -target /Volumes/Macintosh\ HD</screen>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title id="install-linux-host">Installation sur des hôtes Linux</title>
+
+ <sect2>
+ <title>Prérequis</title>
+
+ <para>Pour les diverses versions de Linux que nous supportons en tant que
+ systèmes d'exploitation hôtes, merci de vous référer au <xref
+ linkend="hostossupport" />.</para>
+
+ <para>Vous aurez besoin d'installer les paquets suivants sur votre système
+ Linux avant de commencer l'installation (certains systèmes feront cela
+ pour vous automatiquement quand vous installerez VirtualBox)&nbsp;:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Qt 4.4.0 ou supérieur&nbsp;;</para>
+ </listitem>
+
+ <listitem>
+ <para>SDL 1.2.7 ou supérieur (cette bibliothèque graphique est en
+ général appelée <computeroutput>libsdl</computeroutput>
+ ou quelque chose du genre).</para>
+ </listitem>
+ </itemizedlist>
+
+ <note>
+ <para>Pour être précis, ces paquets ne sont nécessaires que si vous
+ voulez lancer les interfaces graphiques de VirtualBox. En particulier,
+ <computeroutput>VirtualBox</computeroutput>, notre interface graphique
+ principale, exige à la fois Qt et SDL&nbsp;; <computeroutput>VBoxSDL</computeroutput>,
+ notre interface graphique simplifiée, n'exige que SDL. À l'inverse, si
+ vous ne voulez qu'exécuter le serveur VRDP headless fourni avec VirtualBox,
+ ni Qt ni SDL ne sont nécessaires.</para>
+ </note>
+ </sect2>
+
+ <sect2 id="externalkernelmodules">
+ <title>Le module noyau de VirtualBox</title>
+
+ <para>VirtualBox utilise un module noyau spécial pour effectuer
+ l'allocation de la mémoire physique et pour obtenir le contrôle du
+ processeur pour l'exécution du système invité. Sans ce module noyau, vous
+ pourrez travailler avec des machines virtuelles dans l'interface de
+ configuration mais vous ne pourrez lancer aucune machine virtuelle.</para>
+
+ <para>Le module noyau de VirtualBox est automatiquement installé sur votre
+ système quand vous installez VirtualBox. Pour le maintenir avec les futures
+ mises à jour du noyau, pour les distributions Linux qui le fournissent --
+ la plupart des distributions actuelles --, nous recommandons d'installer
+ le Dynamic Kernel Module Support (DKMS) (support de module noyau dynamique)<footnote>
+ <para>Voir <ulink
+ url="http://en.wikipedia.org/wiki/Dynamic_Kernel_Module_Support">http://en.wikipedia.org/wiki/Dynamic_Kernel_Module_Support</ulink>
+ pour une introduction.</para>
+ </footnote>. Cet environnement aide à construire des modules de noyau et
+ à gérer les mises à jour du noyau.</para>
+
+ <para>Si DKMS n'est pas déjà installé, exécutez une des étapes suivantes&nbsp;:
+ <itemizedlist>
+ <listitem>
+ <para>Sur un système Ubuntu&nbsp;:</para>
+
+ <screen>sudo apt-get install dkms</screen>
+ </listitem>
+
+ <listitem>
+ <para>Sur un système Fedora&nbsp;:<screen>yum install dkms</screen></para>
+ </listitem>
+
+ <listitem>
+ <para>Sur un système Mandriva ou Mageia&nbsp;:<screen>urpmi dkms</screen></para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>Si DKMS est disponible et installé, le module noyau de VirtualBox
+ devrait toujours fonctionner automatiquement et il sera automatiquement
+ reconstruit si votre noyau hôte est mis à jour.</para>
+
+ <para>Sinon, il n'y a que deux situations où vous devrez vous inquiéter du
+ module noyau&nbsp;:<orderedlist>
+ <listitem>
+ <para>L'installation échoue dès le départ. Cela signifie probablement
+ que votre système Linux n'est pas préparé à construire des modules
+ noyau externes.</para>
+
+ <para>La plupart des distributions Linux peuvent être paramétrées
+ simplement en installant les bons paquets -- normalement il s'agira
+ du compilateur GNU (GCC), GNU Make (make) et des paquets contenant
+ les fichiers d'en-tête de votre noyau - et en vous assurant que toutes
+ les mises à jour du système sont installées et que le système
+ exécute le noyau le plus récent inclus dans la distribution.
+ <emphasis>Les numéros de version des paquets de fichiers d'en-tête
+ doivent être les mêmes que ceux du noyau que vous utilisez.</emphasis></para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Avec les versions de Debian et d'Ubuntu, vous devez
+ installer la bonne version de <computeroutput>linux-headers</computeroutput>
+ et, s'il existe, du paquet <computeroutput>linux-kbuild</computeroutput>.
+ Les versions actuelles d'Ubuntu devraient avoir les bons paquets
+ installés par défaut.</para>
+ </listitem>
+
+ <listitem>
+ <para>Dans des versions de Debian et d'Ubuntu encore plus
+ anciennes, vous devez installer la bonne version du paquet
+ <computeroutput>kernel-headers</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para>Sur les systèmes Fedora et Redhat, le paquet s'appelle
+ <computeroutput>kernel-devel</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para>Sur SUSE et openSUSE Linux, vous devez installer la bonne
+ version des paquets <computeroutput>kernel-source</computeroutput>
+ et <computeroutput>kernel-syms</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para>Sinon, si vous avez construit votre propre noyau,
+ <computeroutput>/usr/src/linux</computeroutput> devrait pointer
+ vers les sources de votre noyau. Si vous n'avez pas supprimé les
+ fichiers créés pendant le processus de construction, alors votre
+ système sera déjà paramétré correctement.</para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+
+ <listitem>
+ <para>Le noyau de votre hôte Linux a été mis à jour. Dans ce cas le
+ module noyau aura besoin d'être réinstallé en exécutant (en tant
+ qu'administrateur)&nbsp;:</para>
+
+ <screen>/etc/init.d/vboxdrv setup</screen>
+ </listitem>
+ </orderedlist></para>
+ </sect2>
+
+ <sect2>
+ <title>Support de l'USB et du réseau avancé</title>
+
+ <para>Afin d'utiliser le support USB de VirtualBox, le compte utilisateur
+ sous lequel vous entendez lancer VirtualBox doit avoir l'accès en lecture
+ et en écriture au système de fichiers USB (<computeroutput>usbfs</computeroutput>).</para>
+
+ <para>En outre, l'accès à
+ <computeroutput>/dev/net/tun</computeroutput> sera requis si vous voulez
+ utiliser le Host Interface Networking (réseau d'interface hôte), ce qui
+ est décrit en détail au <xref linkend="network_bridged" />.</para>
+
+ <!--TODO Write a couple of notes about hardened kernels. If PaX is installed, VBox presently doesn't start. I tried with a
+gentoo hardened kernel that had PaX enabled, and VBoxHeadless failed with really funny VERR_NO_MEMORY messages. Discussing
+it with Knut revealed that PaX might be the problem, and running paxctl to disable these protections actually
+helped. For reference:
+First run paxctl -C VBoxVDRP to have the executable modified to support PaX flags in the first place.
+Then paxctl -pemrxs VBoxHeadless to disable all protections. TODO: Figure out which ones are really needed.-->
+ </sect2>
+
+ <sect2>
+ <title>Effectuer l'installation</title>
+
+ <para>VirtualBox est disponible dans un grand nombre de formats de paquets
+ de base pour de nombreuses distributions Linux (voir le
+ <xref linkend="hostossupport" /> pour les détails). En outre, il y a un
+ installateur générique alternatif (.run) qui devrait fonctionner sur la
+ plupart des distributions Linux.</para>
+
+ <sect3>
+ <title>Installer VirtualBox à partir d'un paquet Debian/Ubuntu</title>
+
+ <para>Tout d'abord, téléchargez le paquet adapté à votre distribution.
+ Les exemples suivants supposent que vous installez sur un système 32
+ bits Ubuntu Karmic. Utilisez <computeroutput>dpkg</computeroutput> pour
+ installer le paquet Debian&nbsp;:</para>
+
+ <screen>sudo dpkg -i VirtualBox-3.2_$VBOX_VERSION_STRING_Ubuntu_karmic_i386.deb</screen>
+
+ <para>On vous demandera d'accepter la licence VirtualBox Personal Use
+ and Evaluation License (licence d'évaluation et d'utilisation
+ personnelle de VirtualBox). Sauf si vous répondez <quote>Yes</quote> ici,
+ l'installation sera arrêtée.</para>
+
+ <para>Le groupe <computeroutput>vboxusers</computeroutput> sera créé
+ pendant l'installation. Notez qu'un utilisateur qui va exécuter
+ VirtualBox doit être membre de ce groupe. Un utilisateur peut devenir
+ membre du groupe <computeroutput>vboxusers</computeroutput> à travers la
+ gestion des utilisateurs/groupes en graphique ou en ligne de commande
+ avec</para>
+
+ <screen>sudo usermod -a -G vboxusers nom_utilisateur</screen>
+
+ <para>Remarquez aussi qu'ajouter un utilisateur actif à ce groupe
+ exigera que l'utilisateur se déconnecte puis revienne. Cela devrait se
+ faire à la main après une installation réussie du paquet.</para>
+
+ <para>L'installateur cherchera aussi un module noyau VirtualBox qui
+ convient à votre noyau. Le paquet comprend des modules précompilés pour
+ la plupart des configurations du noyau. Si aucun module noyau convenable
+ n'est trouvé, le script d'installation essaie de construire un module
+ lui-même. Si le processus de construction ne réussit pas, on vous montrera
+ un avertissement et le paquet sera laissé non configuré. Merci de jeter
+ un &oelig;il sur <computeroutput>/var/log/vbox-install.log</computeroutput>
+ pour trouver pourquoi la compilation a échoué. Il se peut que vous deviez
+ installer les en-têtes du noyau Linux adéquat (voir le <xref
+ linkend="externalkernelmodules" />). Après avoir corrigé les
+ problèmes, faites
+
+ <screen>sudo /etc/init.d/vboxdrv setup</screen>Ceci démarrera une
+ nouvelle tentative de construire le module.</para>
+
+ <para>Si un module noyau convenable est trouvé dans le paquet ou si le
+ module a été construit avec succès, le script d'installation va tenter
+ de charger le module. Si ceci échoue, merci de voir le chapitre <xref
+ linkend="linuxkernelmodulefailstoload" /> pour de plus amples informations.</para>
+
+ <para>Une fois que VirtualBox a été installé avec succès et configuré,
+ vous pouvez le démarrer en sélectionnant <quote>VirtualBox</quote> dans
+ votre menu de démarrage ou depuis la ligne de commande (voir le
+ <xref linkend="startingvboxonlinux" />).</para>
+ </sect3>
+
+ <sect3>
+ <title>Utiliser l'installateur alternatif (VirtualBox.run)</title>
+
+ <para>L'installateur alternatif effectue les étapes suivantes&nbsp;:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Il déballe les fichiers de l'application vers un répertoire
+ cible de votre choix. Par défaut, <screen>/opt/VirtualBox/</screen>
+ sera utilisé.</para>
+ </listitem>
+
+ <listitem>
+ <para>Il construit le module noyau VirtualBox
+ (<computeroutput>vboxdrv</computeroutput>) et l'installe.</para>
+ </listitem>
+
+ <listitem>
+ <para>Il crée
+ <computeroutput>/etc/init.d/vboxdrv</computeroutput>, un script de
+ démarrage pour démarrer le module noyau de VirtualBox.</para>
+ </listitem>
+
+ <listitem>
+ <para>Il crée un nouveau groupe système appelé
+ <computeroutput>vboxusers</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para>Il crée des liens symboliques vers
+ <computeroutput>VirtualBox</computeroutput>,
+ <computeroutput>VBoxSDL</computeroutput>,
+ <computeroutput>VBoxVRDP</computeroutput>,
+ <computeroutput>VBoxHeadless</computeroutput> et
+ <computeroutput>VBoxManage</computeroutput> dans
+ <computeroutput>/usr/bin</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para>Il crée
+ <computeroutput>/etc/udev/60-vboxdrv.rules</computeroutput>, un
+ fichier de description pour udev, s'il est présent ce qui rend le
+ module accessible à n'importe qui dans le groupe
+ <computeroutput>vboxusers</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para>Il écrit le répertoire d'installation dans
+ <computeroutput>/etc/vbox/vbox.cfg</computeroutput>.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>L'installateur doit être exécuté en tant qu'administrateur avec
+ <computeroutput>install</computeroutput> ou <computeroutput>uninstall</computeroutput>
+ en premier paramètre. Si vous ne voulez pas que l'installateur vous
+ demande si vous acceptez ou non l'accord de licence (par exemple pour
+ effectuer une installation sans efforts), vous pouvez ajouter le
+ paramètre <computeroutput>license_accepted_unconditionally</computeroutput>.
+ Enfin, si vous voulez utiliser un autre répertoire que celui
+ d'installation par défaut, ajoutez le chemin désiré en paramètre
+ supplémentaire.</para>
+
+ <screen>sudo ./VirtualBox.run install /opt/VirtualBox</screen>
+
+ <para>Ou si vous n'avez pas de commande <quote>sudo</quote> disponible,
+ lancez plutôt ce qui suit en tant
+ qu'administrateur&nbsp;:<screen>./VirtualBox.run install /opt/VirtualBox</screen></para>
+
+ <para>Après quoi vous devez mettre tout utilisateur qui devrait pouvoir
+ utiliser VirtualBox dans le groupe <computeroutput>vboxusers</computeroutput>,
+ soit avec les outils graphiques de gestion d'utilisateur soit en
+ lançant la commande suivante en tant qu'administrateur&nbsp;:</para>
+
+ <screen>sudo usermod -a -G vboxusers username</screen>
+
+ <para><note>
+ <para>La commande <computeroutput>usermod</computeroutput> de
+ certaines distributions Linux anciennes ne supporte pas l'option
+ <computeroutput>-a</computeroutput> (qui ajoute l'utilisateur au
+ groupe donné sans modifier sa qualité de membre d'autres groupes).
+ Dans ce cas, cherchez les appartenances de groupe avec la commande
+ <computeroutput>groups</computeroutput> et ajoutez tous ces groupes
+ dans une liste séparée par des virgules à la ligne de commande après
+ l'option <computeroutput>-G</computeroutput>, comme ceci par
+ exemple&nbsp;:
+ <computeroutput>usermod -G group1,group2,vboxusers
+ nom_utilisateur</computeroutput>.</para>
+ </note>Si un utilisateur sur votre système devrait pouvoir accéder
+ aux périphériques USB de l'hôte, depuis vos invités VirtualBox, vous
+ devriez aussi les ajouter au groupe utilisateur utilisé par votre
+ distribution pour l'accès USB (comme <computeroutput>usb</computeroutput>
+ ou <computeroutput>usbusers</computeroutput>.</para>
+ </sect3>
+
+ <sect3>
+ <title>Effectuer une installation manuelle</title>
+
+ <para>Si pour une raison quelconque vous ne pouvez pas utiliser le
+ script shell d'installation décrit précédemment, vous pouvez aussi
+ effectuer une installation manuelle. Invoquez l'installateur comme ceci&nbsp;:</para>
+
+ <screen>./VirtualBox.run --keep --noexec</screen>
+
+ <para>Cela va déballer tous les fichiers nécessaires à l'installation
+ dans le répertoire <computeroutput>install</computeroutput> sous le
+ répertoire cohérent. Les fichiers de l'application VirtualBox sont
+ contenus dans <computeroutput>VirtualBox.tar.bz2</computeroutput> que
+ vous pouvez déballer dans n'importe quel répertoire sur votre système.
+ Par exemple&nbsp;:</para>
+
+ <screen>sudo mkdir /opt/VirtualBox
+sudo tar jxf ./install/VirtualBox.tar.bz2 -C /opt/VirtualBox</screen>
+
+ <para>ou en tant qu'administrateur&nbsp;:<screen>mkdir /opt/VirtualBox
+tar jxf ./install/VirtualBox.tar.bz2 -C /opt/VirtualBox</screen></para>
+
+ <para>Les sources du module noyau de VirtualBox sont fournies dans le
+ répertoire <computeroutput>src</computeroutput>. Pour construire le
+ module, allez dans ce répertoire et exécutez</para>
+
+ <screen>make</screen>
+
+ <para>Si tout se construit correctement, exécutez la commande suivante
+ pour installer le module dans le répertoire de modules aqéquats&nbsp;:</para>
+
+ <screen>sudo make install</screen>
+
+ <para>Au cas où vous n'avez pas sudo, allez du compte utilisateur vers
+ celui administrateur et effectuez<screen>make install</screen></para>
+
+ <para>Le module noyau de VirtualBox a besoin d'un n&oelig;ud de
+ périphérique pour fonctionner. La commande make ci-dessus vous dira
+ comment créer le n&oelig;ud de périphérique en fonction de votre système
+ Linux. La procédure est légèrement différente pour une installation
+ Linux classique avec un répertoire <computeroutput>/dev</computeroutput>,
+ un système avec un répertoire <computeroutput>devfs</computeroutput>,
+ maintenant obsolète, et un système Linux moderne avec
+ <computeroutput>udev</computeroutput>.</para>
+
+ <para>Sur certaines distributions Linux, vous pourriez rencontrer des
+ difficultés pour construire le module. Vous devrez analyser les messages
+ d'erreur du système de construction pour diagnostiquer la cause des
+ problèmes. De façon générale, assurez-vous d'utiliser les bonnes sources
+ du noyau Linux pour le processus de construction.</para>
+
+ <para>Remarquez que l'utilisateur qui va lancer VirtualBox a besoin des
+ droits de lecture et d'écriture sur le n&oelig;ud de périphérique du
+ module noyau <computeroutput>/dev/vboxdrv</computeroutput>. Vous pouvez
+ soit définir un groupe <computeroutput>vboxusers</computeroutput> en
+ entrant <screen>groupadd vboxusers
+chgrp vboxusers /dev/vboxdrv
+chmod 660 /dev/vboxdrv</screen>soit, alternativement, simplement donner à tous
+les utilisateurs l'accès (non sécurisé, non recommandé&nbsp;!)<screen>chmod 666 /dev/vboxdrv</screen>Vous
+ devriez aussi ajouter les utilisateurs qui seront autorisés à utiliser
+ les périphériques USB de l'hôte des invités de VirtualBox au groupe
+ d'utilisateurs USB adéquat pour votre distribution. Ce groupe s'appelle
+ souvent <computeroutput>usb</computeroutput> ou
+ <computeroutput>usbusers</computeroutput>.</para>
+
+ <para>Ensuite, vous devrez installer le script de démarrage système du
+ module noyau&nbsp;:<screen>cp /opt/VirtualBox/vboxdrv.sh /etc/init.d/vboxdrv</screen>(en
+ supposant que vous avez installé VirtualBox dans le répertoire
+ <computeroutput>/opt/VirtualBox</computeroutput>) et activer le script
+ de démarrage en utilisant la méthode adaptée à votre distribution. Vous
+ devriez créer le fichier de configuration de VirtualBox&nbsp;:<screen>mkdir /etc/vbox
+echo INSTALL_DIR=/opt/VirtualBox &gt; /etc/vbox/vbox.cfg</screen>et, par souci
+de pratique, créer les liens symboliques suivants&nbsp;:</para>
+
+ <screen>ln -sf /opt/VirtualBox/VBox.sh /usr/bin/VirtualBox
+ln -sf /opt/VirtualBox/VBox.sh /usr/bin/VBoxSVC
+ln -sf /opt/VirtualBox/VBox.sh /usr/bin/VBoxManage
+ln -sf /opt/VirtualBox/VBox.sh /usr/bin/VBoxHeadless
+ln -sf /opt/VirtualBox/VBox.sh /usr/bin/VBoxSDL</screen>
+ </sect3>
+
+ <sect3>
+ <title>Mettre à jour et désinstaller VirtualBox</title>
+
+ <para>Avant de mettre à jour ou de désinstaller VirtualBox, vous devez
+ arrêter toutes les machines virtuelles qui sont actuellement en fonction
+ et quitter les applications VirtualBox ou VboxSVC. Pour mettre à jour
+ VirtualBox, lancez simplement l'installateur de la version de mise à
+ jour. Pour désinstaller VirtualBox, appelez l'installateur comme
+ ceci&nbsp;: <screen>sudo ./VirtualBox.run uninstall</screen>
+ ou en tant qu'administrateur<screen>./VirtualBox.run uninstall</screen>.
+ À partir de la version 2.2.2, vous pouvez désinstaller le paquet .run
+ en appelant <screen>/opt/VirtualBox/uninstall.sh</screen>Pour
+ désinstaller VirtualBox à la main, effectuez simplement les étapes
+ d'installation manuelle dans l'ordre inverse.</para>
+ </sect3>
+
+ <sect3>
+ <title>Installation automatique des paquets Debian</title>
+
+ <para>Les paquets Debian exigeront quelques retours d'utilisateurs
+ lorsqu'ils seront installés pour la première fois. Le système debconf
+ est utilisé pour effectuer cette tâche. Pour éviter toute action de
+ l'utilisateur pendant l'installation, vous pouvez définir des valeurs
+ par défaut. Un fichier <computeroutput>vboxconf</computeroutput> peut
+ contenir les réglages debconf suivants&nbsp;: <screen>virtualbox virtualbox/module-compilation-allowed boolean true
+virtualbox virtualbox/delete-old-modules boolean true</screen>La première ligne
+ permet de compiler le module noyau vboxdrv si aucun module n'a été
+ trouvé pour le noyau actuel. La deuxième ligne permet au paquet
+ d'effacer n'importe quel ancien module noyau vboxdrv compilé par les
+ installations précédentes.</para>
+
+ <para>Ces réglages par défaut peuvent être appliqués avec <screen>debconf-set-selections vboxconf</screen>
+ avant l'installation du paquet Debian VirtualBox.</para>
+
+ <para>Il y a au surplus des options de configuration courantes que vous
+ pouvez régler avant l'installation, décrites au <xref linkend="linux_install_opts" />.</para>
+ </sect3>
+
+ <sect3>
+ <title>Installation automatique de paquets .rpm</title>
+
+ <para>Le format .rpm n'offre pas de système de configuration comparable
+ au système debconf. Voir le <xref linkend="linux_install_opts" /> pour
+ savoir comment régler des options d'installation courantes fournies par
+ VirtualBox.</para>
+ </sect3>
+
+ <sect3>
+ <title id="linux_install_opts">Options d'installation automatique</title>
+ <para>Pour configurer le processus d'installation de nos paquets .rpm et
+ .deb, un fichier <computeroutput>/etc/default/virtualbox</computeroutput>
+ est interprété. La génération automatique de la règle udev peut être
+ empêcher avec le paramétrage suivant&nbsp;:
+ <screen>INSTALL_NO_UDEV=1</screen> La création du groupe vboxusers peut
+ être empêchée par <screen>INSTALL_NO_GROUP=1</screen> Si la ligne
+
+ <screen>INSTALL_NO_VBOXDRV=1</screen> est spécifiée, l'installateur du
+ paquet n'essaiera pas de construire le module noyau
+ <computeroutput>vboxdrv</computeroutput> si aucun module correspond au
+ noyau actuel n'a été trouvé.</para>
+ </sect3>
+
+ </sect2>
+
+ <sect2 id="startingvboxonlinux">
+ <title>Démarrer VirtualBox sur Linux</title>
+
+ <para>La manière la plus facile de démarrer un programme VirtualBox est de
+ lancer le programme de votre choix (<computeroutput>VirtualBox</computeroutput>,
+ <computeroutput>VBoxManage</computeroutput>,
+ <computeroutput>VBoxSDL</computeroutput> ou <computeroutput>VBoxHeadless</computeroutput>),
+ à partir d'un terminal. Ce sont des liens symboliques vers
+ <computeroutput>VBox.sh</computeroutput> qui démarrent le programme requis
+ pour vous.</para>
+
+ <para>Les instructions détaillées suivantes ne devraient vous intéresser
+ que si vous souhaitez lancer VirtualBox sans l'installer au préalable. Vous
+ devriez commencer par compiler le module noyau <computeroutput>vboxdrv</computeroutput>
+ (voir ci-dessus) et l'insérer dans le noyau Linux. VirtualBox consiste en
+ un service démon (<computeroutput>VBoxSVC</computeroutput>) et plusieurs
+ programmes d'application. Le démon est automatiquement démarré si
+ nécessaire. Toutes les applications VirtualBox vont communiquer avec le
+ démon par les sockets du domaine local Unix. Il peut y avoir plusieurs
+ instances de démon sous différents comptes utilisateur et les applications
+ ne peuvent communiquer qu'avec le démon qui fonctionne sous le compte de
+ l'utilisateur en tant qu'application. Le socket du domaine local réside
+ dans un sous-répertoire de votre répertoire système pour les fichiers
+ temporaires appelé <computeroutput>.vbox-&lt;nom_utilisateur&gt;-ipc</computeroutput>.
+ En cas de problème de communication ou de démarrage du serveur, vous pouvez
+ essayer de supprimer ce répertoire.</para>
+
+ <para>Toutes les applications de VirtualBox
+ (<computeroutput>VirtualBox</computeroutput>,
+ <computeroutput>VBoxSDL</computeroutput>,
+ <computeroutput>VBoxManage</computeroutput> et
+ <computeroutput>VBoxHeadless</computeroutput>) exigent que le répertoire
+ VirtualBox soit dans le chemin de la bibliothèque&nbsp;:</para>
+
+ <screen>LD_LIBRARY_PATH=. ./VBoxManage showvminfo "Windows XP"</screen>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title id="install-solaris-host">Installation sur des hôtes Solaris</title>
+
+ <para>Pour les diverses solutions de Solaris que nous supportons comme
+ systèmes d'exploitation hôtes, merci de vous référer au <xref
+ linkend="hostossupport" />.</para>
+
+ <para>Si vous avez une session de VirtualBox préalablement installée sur
+ votre hôte Solaris, merci de la désinstaller avant d'installer une nouvelle
+ session. Reportez-vous au <xref linkend="uninstallsolhost" /> pour les
+ instructions de désinstallation.</para>
+
+ <sect2>
+ <title>Effectuer l'installation</title>
+
+ <para>VirtualBox est disponible comme paquet Solaris standard. Téléchargez
+ le paquet VirtualBox SunOS qui comprend à la fois les versions 32 bits et
+ 64 bits de VirtualBox. <emphasis>Vous devez effectuer l'installation en tant
+ qu'administrateur et depuis la zone globale</emphasis> car l'installateur
+ de VirtualBox charge des pilotes du noyau, ce qui ne peut pas se faire
+ depuis des zones non globales. Pour vérifier dans quelle zone vous vous
+ trouvez, exécutez la commande <computeroutput>zonename</computeroutput>.
+ Exécutez les commandes suivantes&nbsp;:</para>
+
+ <screen>gunzip -cd VirtualBox-$VBOX_VERSION_STRING-SunOS.tar.gz | tar xvf -</screen>
+
+ <para>À partir de VirtualBox 3.1, le paquet du noyau VirtualBox n'est plus
+ séparé et a été intégré au paquet principal. Installez le paquet VirtualBox
+ en utilisant&nbsp;:</para>
+
+ <screen>pkgadd -d VirtualBox-$VBOX_VERSION_STRING-SunOS.pkg</screen>
+
+ <note>
+ <para>Si vous utilisez les Zones Solaris, pour n'installer que dans la
+ zone actuelle et dans aucune autre zone, utilisez
+ <computeroutput>pkgadd -G</computeroutput>. Pour plus
+ d'informations reportez-vous au manuel de
+ <computeroutput>pkgadd</computeroutput>&nbsp;; voir aussi le
+ <xref linkend="solariszones" />.</para>
+ </note>
+
+ <para>L'installateur vous demandera alors d'entrer le paquet que vous
+ souhaitez installer. Choisissez <quote>1</quote> ou <quote>tout</quote>
+ et poursuivez. Ensuite, l'installateur vous demandera si vous voulez
+ autoriser le script post installation à se lancer. Choisissez
+ <quote>y</quote> et poursuivez, vu qu'il est essentiel d'exécuter ce
+ script qui installe le module noyau VirtualBox. Suite à cette confirmation,
+ l'installateur va installer VirtualBox et exécuter le script
+ d'initialisation postinstall.</para>
+
+ <para>Une fois que le script postinstall a été exécuté, votre installation
+ est à présent terminée. Vous pouvez maintenant effacer en toute sécurité
+ de votre système le paquet décompressé et les fichiers
+ d'<computeroutput>auto-réponse</computeroutput>. VirtualBox devrait être
+ installé dans <computeroutput>/opt/VirtualBox</computeroutput>.</para>
+ </sect2>
+
+ <sect2>
+ <title>Démarrer VirtualBox sur Solaris</title>
+
+ <para>La façon la plus facile de démarrer un programme VirtualBox est de
+ lancer le programme de votre choix (<computeroutput>VirtualBox</computeroutput>,
+ <computeroutput>VBoxManage</computeroutput>, <computeroutput>VBoxSDL</computeroutput>
+ ou <computeroutput>VBoxHeadless</computeroutput>) à partir du terminal.
+ Ce sont des liens symboliques vers <computeroutput>VBox.sh</computeroutput>
+ qui démarre le programme requis pour vous.</para>
+
+ <para>Vous pouvez alternativement invoquer les programmes requis à partir
+ de <computeroutput>/opt/VirtualBox</computeroutput>. L'utilisation des
+ liens fournis est plus facile puisque vous n'êtes pas obligé de taper le
+ chemin complet.</para>
+
+ <para>Vous pouvez configurer certains éléments du GUI Qt de
+ <computeroutput>VirtualBox</computeroutput> tels que les polices et les
+ couleurs en exécutant <computeroutput>VBoxQtconfig</computeroutput> depuis
+ le terminal.</para>
+ </sect2>
+
+ <sect2>
+ <title id="uninstallsolhost">Désinstallation</title>
+
+ <para>La désinstallation de VirtualBox sur Solaris exige les droits
+ administrateur. Pour effectuer la désinstallation, démarrez une session
+ de terminal administrateur et exécutez&nbsp;:</para>
+
+ <screen>pkgrm SUNWvbox</screen>
+
+ <para>Après confirmation, ceci supprimera VirtualBox de votre système.</para>
+
+ <para>Si vous désinstallez la version 3.0 de VirtualBox ou inférieure,
+ vous devez supprimer le paquet d'interface noyau de VirtualBox, exécutez
+ donc&nbsp;:</para>
+
+ <para><screen>pkgrm SUNWvboxkern</screen></para>
+ </sect2>
+
+ <sect2>
+ <title>Installation sans efforts</title>
+
+ <para>Pour effectuer une installation non interactive de VirtualBox, nous
+ avons fourni un fichier de réponse nommé <computeroutput>autoresponse</computeroutput>
+ que l'installateur utilisera pour entrer les réponses aux questions plutôt
+ que de vous les demander.</para>
+
+ <para>Extrayez le paquet .tar.gz comme décrit dans l'installation normale.
+ Puis ouvrez une session de terminal administrateur et exécutez&nbsp;:</para>
+
+ <screen>pkgadd -d VirtualBox-$VBOX_VERSION_STRING-SunOS-x86 -n -a autoresponse SUNWvbox</screen>
+
+ <para>Pour effectuer une désinstallation non interactive, ouvrez une
+ session de terminal administrateur et exécutez&nbsp;:</para>
+
+ <screen>pkgrm -n -a /opt/VirtualBox/autoresponse SUNWvbox</screen>
+ </sect2>
+
+ <sect2>
+ <title id="solariszones">Configurer une zone pour faire fonctionner
+ VirtualBox</title>
+
+ <para>À partir de VirtualBox 1.6, il est possible de lancer VirtualBox
+ depuis des zones Solaris. Pour une introduction aux zones Solaris, merci
+ de vous référer à <ulink
+ url="http://www.sun.com/bigadmin/features/articles/solaris_zones.jsp">http://www.sun.com/bigadmin/features/articles/solaris_zones.jsp</ulink>.</para>
+
+ <para>En supposant que VirtualBox a déjà été installé dans votre zone,
+ vous devez donner à la zone l'accès au noeud de périphérique de VirtualBox.
+ Ceci se fait en effectuant les étapes suivantes. Démarrez un terminal
+ administrateur et exécutez&nbsp;:</para>
+
+ <screen>zonecfg -z vboxzone</screen>
+
+ <para>À l'intérieur de l'invite <computeroutput>zonecfg</computeroutput>,
+ ajoutez la ressource de <computeroutput>périphérique</computeroutput> et
+ les propriétés correspondantes à la zone. Voici comment vous pouvez faire
+ cela&nbsp;:</para>
+
+ <screen>zonecfg:vboxzone&gt;add device
+zonecfg:vboxzone:device&gt;set match=/dev/vboxdrv
+zonecfg:vboxzone:device&gt;end
+zonecfg:vboxzone&gt;verify
+zonecfg:vboxzone&gt;exit</screen>
+
+ <para>Si vous exécutez VirtualBox 2.2.0 ou supérieur sur des hôtes
+ OpenSolaris ou Nevada, vous devriez ajouter aussi un périphérique pour
+ <computeroutput>/dev/vboxusbmon</computeroutput>, comme montré ci-dessus.
+ Cela ne s'applique pas aux hôtes Solaris 10 du fait de l'absence du support
+ USB.</para>
+
+ <para>Remplacez <quote>vboxzone</quote> par le nom de la zone 4ans
+ la quelle vous souhaitez faire fonctionner VirtualBox. Ensuite, redémarrez
+ la zone en utilisant <computeroutput>zoneadm</computeroutput> et vous
+ devriez pouvoir lancer VirtualBox depuis l'intérieur de la zone
+ configurée.</para>
+ </sect2>
+ </sect1>
+</chapter>
diff --git a/doc/manual/fr_FR/user_Introduction.xml b/doc/manual/fr_FR/user_Introduction.xml
new file mode 100644
index 00000000..e36ba429
--- /dev/null
+++ b/doc/manual/fr_FR/user_Introduction.xml
@@ -0,0 +1,1662 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+ "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<chapter>
+ <title id="Introduction">Premières étapes</title>
+
+ <para>Bienvenu sur $VBOX_PRODUCT!</para>
+
+ <para>VirtualBox est une application de virtualisation de machines
+ inter-plateformes. Qu'est-ce que cela veut dire&nbsp;? Premièrement, il
+ s'installe sur vos ordinateurs existants basés sur Intel ou AMD, qu'ils
+ exécutent les systèmes d'exploitation Windows, Mac, Linux ou Solaris.
+ Deuxièmement, il augmente les capacités de votre ordinateur existant de
+ telle sorte qu'il puisse exécuter plusieurs systèmes d'exploitation à la fois
+ (au sein de plusieurs machines virtuelles). Donc, par exemple, vous pouvez
+ lancer Windows et Linux sur votre Mac, lancer Windows Server 2008 sur votre
+ serveur Linux, lancer Linux sur votre PC Windows, etc., tout en laissant
+ ouvertes vos applications existantes. Vous pouvez installer et exécuter
+ autant de machines virtuelles que vous le voulez&nbsp;; les seules limites
+ pratiques sont l'espace disque et la mémoire.</para>
+
+ <para>VirtualBox est tout autant simple que puissant. Il peut se lancer
+ depuis n'importe où, sur de petits systèmes embarqués ou des machines de
+ bureau jusqu'au déploiement tout autant que sur des centres de données de
+ développement et mêmes dans des environnements <quote>Cloud</quote> dit en
+ nuages.</para>
+
+ <para>L'aperçu suivant vous montre comment VirtualBox, installé sur une machine
+ Linux, lance Windows 7 dans une fenêtre de machine virtuelle&nbsp;:</para>
+
+ <para><mediaobject>
+ <imageobject>
+ <imagedata align="center" fileref="../en_US/images/vm-vista-running.png"
+ width="10cm" />
+ </imageobject>
+ </mediaobject></para>
+
+ <para>Dans ce manuel de l'utilisateur, nous allons simplement commencer par une
+ rapide introduction à la virtualisation et sur la façon de lancer votre
+ première machine virtuelle avec l'interface graphique VirtualBox facile à
+ utiliser. Les chapitres suivants donneront beaucoup plus de détails
+ concernant des outils et des fonctionnalités plus puissants, mais heureusement,
+ il n'est pas nécessaire de lire tout le manuel de l'utilisateur avant de
+ pouvoir utiliser VirtualBox.</para>
+
+ <para>Vous pouvez trouver un résumé des possibilités de VirtualBox au <xref
+ linkend="features-overview" />. Pour les utilisateurs qui ont déjà VirtualBox
+ et qui veulent seulement savoir ce qu'il y a de nouveau dans cette version, il
+ y a une liste détaillée au <xref linkend="ChangeLog" />.</para>
+
+ <sect1>
+ <title>Pourquoi la virtualisation est-elle utile&nbsp;?</title>
+
+ <para>Les techniques et les fonctionnalités fournies par VirtualBox sont
+ utiles pour plusieurs scénarii&nbsp;:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">Support du système d'exploitation.</emphasis>
+ Avec VirtualBox, on peut lancer un logiciel écrit pour un système
+ d'exploitation sur un autre (par exemple, un logiciel Windows sur Linux
+ ou un Mac) sans avoir à redémarrer pour l'utiliser. Comme vous pouvez
+ configurer les types de matériel qui devraient être présentés à chaque
+ machine virtuelle, vous pouvez même installer un vieux système
+ d'exploitation comme DOS ou OS/2 dans une machine virtuelle si le
+ matériel de votre ordinateur n'est plus supporté par ce système
+ d'exploitation.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Tester et réparer un dommage.</emphasis>
+ Une fois installée, on peut considérer une machine virtuelle et ses
+ disques virtuels comme un <quote>container</quote> que vous pouvez de
+ façon arbitraire figer, réveiller, copier, sauvegarder et transporter
+ entre les hôtes.</para>
+
+ <para>Au surplus, avec l'utilisation d'une autre
+ caractéristique de VirtualBox appelée <quote>instantané</quote>, vous pouvez
+ sauvegarder un état particulier de la machine virtuelle et revenir vers
+ à cet état si nécessaire. De cette façon, vous pouvez expérimenter
+ librement en divers environnements de travail. Si quelque chose ne va
+ pas (comme un logiciel qui ne se comporte pas bien après avoir été
+ installé ou un virus qui a infecté la machine invité), vous pouvez
+ facilement revenir à un dépôt précédent et éviter de devoir sauvegarder
+ et restaurer souvent.</para>
+
+ <para>Vous pouvez créer n'importe quel nombre de dépôts,
+ ce qui vous permet de voyager en arrière et dans le temps des machines
+ virtuelles. Vous pouvez effacer des dépôts alors qu'une VM est en
+ fonction pour récupérer de l'espace disque.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Consolidation de l'infrastructure..</emphasis>
+ La virtualisation peut réduire significativement les coûts de matériel
+ et d'électricité. Aujourd'hui, les serveurs tournent se lancent
+ typiquement avec des charges système très faibles et sont rarement
+ utilisés dans leur plein potentiel. Beaucoup de potentiel du matériel et
+ d'électricité est ainsi gaspillé. Alors, au lieu de lancer plusieurs
+ ordinateurs physiques qui ne sont que partiellement utilisés, vous pouvez
+ englober beaucoup de machines virtuelles au sein de quelques hôtes
+ puissants et équilibrer les charges entre eux.</para>
+
+ <para>Avec VirtualBox, vous
+ pouvez même lancer des machines virtuelles en tant que purs serveurs
+ pour le VirtualBox Remote Desktop Protocol (VRDP) (protocole de bureau
+ distant de VirtualBox), avec un support complet du client USB. Cela
+ permet de consolider les machines de bureau dans une entreprise sur à
+ peine quelques serveurs RDP, tandis que les clients finals ne doivent
+ qu'être capables d'afficher des données VRDP.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Installations plus faciles de logiciels.</emphasis>
+ Les machines virtuelles peuvent être utilisées par des vendeurs de
+ logiciels pour livrer porter des configurations globales entières de
+ logiciels. Par exemple, la solution d'installer un serveur de messagerie
+ complet sur une machine réelle peut être une tâche ennuyeuse. Avec la
+ virtualisation, il devient possible de livrer une solution logicielle
+ globale entière, consistant éventuellement en plusieurs composants
+ différents, dans une machine virtuelle, ce qui s'appelle alors le plus
+ souvent l'<quote>appliance</quote>. Installer et lancer un serveur de
+ messagerie devient aussi facile que d'importer un tel service (appliance)
+ dans VirtualBox.</para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title id="virtintro">Un peu de terminologie</title>
+
+ <para>Quand on parle de virtualisation (et aussi pour comprendre les
+ chapitres suivants de cette documentation), il est utile de se familiariser
+ un peu avec une terminologie fondamentale, surtout les termes suivants&nbsp;:</para>
+
+ <glosslist>
+ <glossentry>
+ <glossterm>Système d'exploitation hôte (host OS)&nbsp;:</glossterm>
+
+ <glossdef>
+ <para>le système d'exploitation de l'ordinateur physique sur lequel
+ VirtualBox a été installé. Il existe des versions de VirtualBox pour
+ les hôtes Windows, Mac OS X, Linux et Solaris&nbsp;; pour plus de
+ détails, merci de consulter le <xref linkend="hostossupport" />.
+ Tandis que les diverses versions de VirtualBox sont généralement
+ traitées ensemble dans ce document, il peut y avoir des différences
+ propres aux plateformes sur lesquelles nous reviendrons aux endroits
+ adéquats.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Système d'exploitation invité (guest OS)&nbsp;:</glossterm>
+
+ <glossdef>
+ <para>le système d'exploitation qui est exécuté à l'intérieur de la
+ machine virtuelle. En théorie, VirtualBox peut exécuter n'importe quel
+ système d'exploitation x86 (DOS, Windows, OS/2, FreeBSD, OpenBSD), mais
+ pour obtenir du code invité les performances les plus proches d'une
+ installation native sur votre machine, nous avons dû effectuer un grand
+ nombre d'optimisations spécifiques à certains systèmes d'exploitation.
+ Donc si votre système d'exploitation <emphasis>peut</emphasis>
+ s'exécuter comme un invité,
+ nous supportons et optimisons officiellement quelques uns qui sont
+ sélectionnés (ce qui comprend néanmoins la plupart de ceux courants).</para>
+
+ <para>Voir <xref linkend="guestossupport" /> pour des détails.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Machine virtuelle (VM).</glossterm>
+
+ <glossdef>
+ <para>Lorsqu'elle est exécutée, une VM est l'environnement spécial
+ que VirtualBox crée pour votre système d'exploitation invité. Donc, en
+ d'autres termes, vous lancez votre système d'exploitation invité
+ <quote>dans</quote> une VM. Normalement, une VM apparaîtra comme une
+ fenêtre sur le bureau de votre ordinateur, mais selon le front-ends
+ de VirtualBox que vous utilisez, il peut être affiché en mode plein
+ écran ou à distance en utilisant le VirtualBox Remote Desktop Protocol
+ (VRDP).</para>
+
+ <para>Parfois nous utilisons aussi le terme <quote>machine virtuelle</quote> d'une
+ façon plus abstraite&nbsp;: en interne, VirtualBox considère comme une
+ VM un ensemble de paramètres qui déterminent son comportement. Ils
+ comprennent tant les réglages matériels (combien de mémoire doit avoir
+ la VM, quels disques durs VirtualBox doit virtualiser parmi les
+ containers de fichiers, quel CDs sont montés etc.) que des informations
+ d'état (si la VM est actuellement en fonction, sauvegardée, ses instantanés
+ etc.).</para>
+
+ <para>Ces paramètres se reflètent aussi bien dans l'interface graphique
+ que dans le programme <computeroutput>VBoxManage</computeroutput> en
+ ligne de commande&nbsp;; voir le chapitre <xref linkend="vboxmanage" />.
+ En d'autres termes, une VM est aussi ce que vous pouvez voir dans la
+ boîte de dialogue de ses paramètres.</para>
+
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Additions invité.</glossterm>
+
+ <glossdef>
+ <para>Avec les <quote>Additions invité</quote>, nous faisons
+ référence à des paquets de logiciel spéciaux qui sont fournis avec
+ VirtualBox. Même s'ils font partie de VirtualBox, ils sont faits pour
+ être installés à l'intérieur d'une VM pour améliorer la performance de
+ l'OS invité et pour ajouter des fonctionnalités supplémentaires. Ceci
+ est décrit en détail au chapitre <xref linkend="guestadditions" />.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist>
+ </sect1>
+
+ <sect1 id="features-overview">
+ <title>Aperçu des fonctionnalités</title>
+
+ <para>Voici un bref résumé des principales fonctionnalités de
+ VirtualBox&nbsp;:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">Portabilité.</emphasis> VirtualBox s'exécute
+ sur un grand nombre de systèmes d'exploitation hôtes 32 bits et 64 bits
+ (de nouveau, voir le <xref linkend="hostossupport" /> pour des détails).
+ VirtualBox est ce qu'on appelle un hyperviseur <quote>hébergé</quote>
+ (parfois désigné comme un hyperviseur de <quote>type 2</quote>). Alors
+ qu'un hyperviseur <quote>bare-metal</quote> ou de <quote>type 1</quote>
+ s'exécuterait directement sur du matériel, VirtualBox exige qu'un système
+ d'exploitation soit installé. Il peut ainsi s'exécuter avec aux côtés
+ d'applications existantes sur cet hôte.</para>
+
+ <para>Dans une large mesure, VirtualBox
+ est, au plan fonctionnel, identique sur toutes les plateformes hôtes et
+ les mêmes formats de fichiers et d'images sont utilisés. Cela vous permet
+ de lancer des machines virtuelles créées sur un hôte sur un autre hôte
+ au système d'exploitation hôte différent&nbsp;; par exemple vous pouvez
+ créer une machine virtuelle sur Windows puis la lancer sous Linux.</para>
+
+ <para>En outre, les machines virtuelles peuvent être importées et exportées
+ facilement en utilisant l'Open Virtualization Format (OVF, voir
+ <xref linkend="ovf" />), une technologie standard créée à cette fin.
+ Vous pouvez même importer des OVFs qui ont été créés avec un logiciel de
+ virtualisation différent.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Pas besoin de virtualiser du matériel.</emphasis>
+ Dans la plupart des scénarii, VirtualBox n'exige pas que les
+ fonctionnalités du processeur soit construites dans le nouveau matériel
+ comme Intel VT-x ou AMD-V. Contrairement à bien d'autres solutions de
+ virtualisation, vous pouvez ainsi utiliser VirtualBox même sur du
+ matériel ancien où ces fonctionnalités ne sont pas présentes. Vous
+ pouvez trouver plus de détails au chapitre <xref
+ linkend="hwvirt" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Additions invité&nbsp;: dossiers partagés,
+ fenêtres intégrées, virtualisation 3D.</emphasis> Les additions
+ invité de VirtualBox sont des paquets de logiciels qui peuvent être
+ installés <emphasis>à l'intérieur</emphasis> des systèmes invité
+ supportés pour améliorer leur performance et pour offrir une meilleure
+ intégration supplémentaire et une communication avec le système hôte.
+ Après avoir installé les additions invité, une machine virtuelle
+ supportera l'ajustement automatique des résolutions graphiques, les
+ fenêtres intégrées seamless, l'accélération 3D graphique et davantage.
+ Les additions invité sont décrits en détail au chapitre <xref
+ linkend="guestadditions" />.</para>
+
+ <para>En particulier, les additions invité offrent les
+ <quote>répertoires partagés</quote> qui vous permettent d'accéder à des
+ fichiers à partir du système hôte à partir de l'intérieur de la machine
+ invitée. Les dossiers partagés sont décrits au chapitre <xref
+ linkend="sharedfolders" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Excellent support matériel.</emphasis> Entre
+ autres, VirtualBox supporte&nbsp;:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">Multitâches invité
+ (SMP).</emphasis> VirtualBox peut présenter jusqu'à 32 processeurs
+ virtuels à une machine virtuelle, indépendamment du nombre de cœurs
+ présents effectivement sur le processeur de votre hôte.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Support du périphérique USB 2.0.</emphasis>
+ VirtualBox implémente un contrôleur USB virtuel et vous permet de
+ connecter à vos machines virtuelles des périphériques USB de votre
+ choix sans devoir installer de pilotes spécifiques aux
+ périphériques sur l'hôte. Le support USB n'est pas limité à certaines
+ catégories de périphériques. Pour des détails, voir le <xref
+ linkend="settings-usb" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Compatibilité matérielle.</emphasis>
+ VirtualBox virtualise une large gamme de périphériques, dont beaucoup
+ de périphériques qui sont en général fournis par d'autres plateformes
+ de virtualisation. Cela inclut les contrôleurs de disque IDE, SCSI
+ et SATA, plusieurs cartes réseau et cartes sons virtuelles, ports
+ série et parallèle virtuels et Input/Output Advanced Programmable
+ Interrupt Controller (I/O APIC) (contrôleur d'interruption
+ programmable avancé entrée/sortie), que l'on trouve dans beaucoup
+ de systèmes PC modernes. Cela facilite le clonage d'images de PC à
+ partir de machines réelles et l'importation de machines virtuelles
+ tierces dans VirtualBox.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Support ACPI complet.</emphasis>
+ L'Advanced Configuration and Power Interface (ACPI) (interface de
+ configuration et d'énergie avancée) est pleinement supportée par
+ VirtualBox. Avec son <emphasis role="bold">support unique de statut
+ d'énergie ACPI</emphasis>, VirtualBox peut même signaler à des
+ systèmes d'exploitation invités gérant l'ACPI le statut de l'énergie
+ de l'hôte. Pour les systèmes portables fonctionnant sur batterie,
+ l'invité peut ainsi activer l'économie d'énergie et notifier
+ l'utilisateur de la charge restante (par exemple en modes plein
+ écran).</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Résolutions de plusieurs écrans..</emphasis>
+ Les machines virtuelles de VirtualBox supportent les résolutions
+ d'écran autant importantes qu'avec un écran physique, leur permettant
+ d'être étendus à un grand nombre d'écrans attachés au système hôte.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Support iSCSI inclu.</emphasis>
+ Cette fonctionnalité unique vous permet de connecter une machine
+ virtuelle directement à un serveur de stockage iSCSI sans passer
+ par le système hôte. La VM accède la cible iSCSI directement sans
+ la charge intermédiaire requise pour des disques durs de
+ virtualisation dans des fichiers de container. Pour des détails,
+ voir chapitre <xref linkend="storage-iscsi" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Amorçage par réseau PXE.</emphasis>
+ Les cartes réseau virtuelles intégrées de VirtualBox supportent
+ complètement l'amorçage à distance à travers le Preboot Execution
+ Environment (PXE (environnement d'exécution préamorçage).</para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Multigénération de prises branchées.</emphasis>
+ VirtualBox peut sauvegarder des instantanés de votre choix de l'état de la
+ machine virtuelle. Vous pouvez revenir en arrière au moment voulu et
+ rétablir la machine virtuelle dans n'importe quel des dépôts et démarrer
+ une configuration de VM alternative à partir de là, en créant de fait
+ une arborescence de dépôts. Pour des détails, voir le <xref linkend="snapshots" />.
+ Vous pouvez supprimer un instantané alors que la VM tourne.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Architecture propre&nbsp;; modularité sans
+ précédent.</emphasis> VirtualBox a un aspect extrêmement modulaire avec
+ des interfaces de programmation internes bien définies et une séparation
+ claire du code client du code serveur. Cela facilite son contrôle à
+ partir de plusieurs interfaces en une seule fois&nbsp;: par exemple,
+ vous pouvez démarrer une VM simplement en cliquant sur un bouton dans
+ l'interface graphique de VirtualBox puis contrôler cette machine à
+ partir de la ligne de commande ou même à distance.
+ Voir le chapitre <xref linkend="frontends" />.</para>
+
+ <para>Du fait de son architecture modulaire, VirtualBox peut montrer
+ toutes ses fonctionnalités et son caractère configurable à travers un
+ <emphasis role="bold">kit de développement de logiciel (SDK)</emphasis>
+ complet, ce qui permet d'intégrer tous les aspects de VirtualBox à
+ d'autres systèmes de logiciels. Merci de voir le chapitre <xref
+ linkend="VirtualBoxAPI" /> pour des détails.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Affichage de machine distante.</emphasis>
+ Vous pouvez lancer n'importe quelle machine virtuelle dans un programme
+ VirtualBox spécial qui agit comme un serveur pour le protocole de bureau
+ distant de VirtualBox ((VRDP), une extension rétro-compatible en fond
+ du protocole de bureau distant. Avec cette fonctionnalité unique,
+ VirtualBox fournit un accès à distance à haute performance à n'importe
+ quelle machine virtuelle.</para>
+
+ <para>Le support VRDP de VirtualBox ne se base pas sur le serveur RDP
+ qui est construit sur Microsoft Windows. Un serveur VRDP personnalisé a
+ plutôt été directement construit dans la couche (layer) de virtualisation.
+ Il en résulte qu'il fonctionne avec n'importe quel système d'exploitation
+ (même en mode texte) et n'exige pas le support d'une application dans
+ l'autre machine virtuelle.</para>
+
+ <para>Le support VRDP est décrit en détail au chapitre <xref
+ linkend="vrde" />.</para>
+
+ <para>En plus de cette fonctionnalité particulière, VirtualBox vous
+ offre d'autres fonctionnalités uniques&nbsp;:<itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">Authentification RDP extensible.</emphasis>
+ VirtualBox supporte déjà Winlogon sur Windows et PAM sur Linux
+ l'authentification RDP. En outre, il inclut un SDK facile à
+ utiliser qui vous permet de créer des interfaces de votre choix
+ pour d'autres méthodes d'authentification&nbsp;; voir le <xref
+ linkend="vbox-auth" /> pour des détails.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">L'USB à travers RDP.</emphasis>
+ À travers le support de canaux virtuels RDP virtuel de canaux
+ USB, VirtualBox vous permet également de connecter localement des
+ périphériques USB de votre choix sur une machine virtuelle qui est
+ exécutée à distance sur un serveur RDP VirtualBox&nbsp;; voir le
+ <xref linkend="usb-over-rdp" /> pour les détails.</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title id="hostossupport">Systèmes d'exploitation hôtes supportés</title>
+
+ <para>Actuellement, VirtualBox se lance sur les systèmes d'exploitation hôtes
+ suivants&nbsp;:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Hôtes <emphasis role="bold">Windows</emphasis>&nbsp;:<itemizedlist>
+ <listitem>
+ <para>Windows XP, tous les packs service (32 bits)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Server 2003 (32 bits)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Vista (32 bits et 64 bits<footnote>
+ <para>Le support de Windows 64 bits a été ajouté avec VirtualBox
+ 1.5.</para>
+ </footnote>).</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Server 2008 (32 bits et 64 bits)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows 7 (32 bits et 64 bits)</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para>Hôtes <emphasis role="bold">Mac OS X</emphasis>&nbsp;:<footnote>
+ <para>Le support préliminaire de Mac OS X (au stade beta) a été
+ ajouté avec VirtualBox 1.4, le support complet avec la 1.6. Le
+ support de Mac OS X 10.4 (Tiger) a été supprimé avec VirtualBox 3.1.</para>
+ </footnote></para>
+
+ <itemizedlist>
+ <listitem>
+ <para>10.5 (Leopard, 32 bits)</para>
+ </listitem>
+
+ <listitem>
+ <para>10.6 (Snow Leopard, 32 bits et 64 bits)</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Il faut du matériel Intel&nbsp;; merci de voir le <xref
+ linkend="KnownIssues" /> also.</para>
+ </listitem>
+
+ <listitem>
+ <para>Hôtes <emphasis role="bold">Linux</emphasis> (32 bits et
+ 64 bits<footnote>
+ <para>Le support de Linux 64 bits a été ajouté à VirtualBox
+ 1.4.</para>
+ </footnote>). Cela comprend entre autres&nbsp;:<itemizedlist>
+ <listitem>
+ <para>Ubuntu 6.06 ("Dapper Drake"), 6.10 ("Edgy Eft"), 7.04
+ ("Feisty Fawn"), 7.10 ("Gutsy Gibbon"), 8.04 ("Hardy Heron"),
+ 8.10 ("Intrepid Ibex"), 9.04 ("Jaunty Jackalope"), 9.10 ("Karmic
+ Koala"), 10.04 ("Lucid Lynx").</para>
+ </listitem>
+
+ <listitem>
+ <para>Debian GNU/Linux 3.1 ("sarge"), 4.0 ("etch") and 5.0
+ ("lenny")</para>
+ </listitem>
+
+ <listitem>
+ <para>Oracle Enterprise Linux 4 et 5</para>
+ </listitem>
+
+ <listitem>
+ <para>Redhat Enterprise Linux 4 et 5</para>
+ </listitem>
+
+ <listitem>
+ <para>Fedora Core 4 à 12</para>
+ </listitem>
+
+ <listitem>
+ <para>Gentoo Linux</para>
+ </listitem>
+
+ <listitem>
+ <para>SUSE Linux 9 et 10, openSUSE 10.3, 11.0, 11.1,
+ 11.2</para>
+ </listitem>
+
+ <listitem>
+ <para>Mandriva 2007.1, 2008.0, 2009.1, 2010.0</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>Il devrait être possible d'utiliser VirtualBox sur la plupart des
+ systèmes basés sur un noyau Linux 2.6 en utilisant soit l'installeur
+ VirtualBox, soit en effectuant une installation manuelle&nbsp;; voir
+ <xref linkend="install-linux-host" />.</para>
+
+ <para>Remarquez que à partir de VirtualBox 2.1, les systèmes
+ d'exploitation basés sur Linux 2.4 ne sont plus supportés.</para>
+ </listitem>
+
+ <listitem>
+ <para>Les hôtes <emphasis role="bold">Solaris</emphasis> (32 bits et
+ 64 bits<footnote>
+ <para>Le support d'OpenSolaris a été ajouté avec VirtualBox
+ 1.6.</para>
+ </footnote>) sont supportés avec les restrictions listées au <xref
+ linkend="KnownIssues" />:<itemizedlist>
+ <listitem>
+ <para>OpenSolaris (2008.05 et supérieur, construction "Nevada" et
+ supérieur)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris 10 (u5 et supérieur)</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1 id="intro-installing">
+ <title>Installer et lancer VirtualBox</title>
+
+ <para>VirtualBox est fourni sous différents paquetages avec beaucoup de
+ paquets différents et son installation dépend de votre plateforme hôte. Si
+ vous avez déjà installé un logiciel, l'installation devrait être transparente
+ puisque selon la plateforme, VirtualBox utilise la méthode
+ d'installation la plus courante et la plus facile à utiliser. Si vous
+ rencontrez un problème ou si vous avez des exigences particulières, merci de
+ vous référer au <xref linkend="installation" /> pour des détails sur les
+ diverses méthodes d'installation.</para>
+
+ <para>Après l'installation, vous pouvez démarrer VirtualBox comme suit&nbsp;:<itemizedlist>
+ <listitem>
+ <para>Sur un hôte Windows, dans le menu <quote>Programmes</quote>
+ habituel, cliquez sur l'icône dans le groupe <quote>VirtualBox</quote>.
+ Sur Vista ou Windows 7, vous pouvez aussi taper <quote>VirtualBox</quote>
+ dans la boîte de recherche du menu <quote>Démarrer</quote>.</para>
+ </listitem>
+
+ <listitem>
+ <para>Sur un hôte Mac OS, dans le Finder, double-cliquez sur l'icône
+ <quote>VirtualBox</quote> dans le dossier <quote>Applications</quote>.
+ (Vous pouvez déplacer cet icône sur votre bureau Dock.)</para>
+ </listitem>
+
+ <listitem>
+ <para>Sur un hôte Linux ou Solaris, selon votre environnement de bureau,
+ un icône <quote>VirtualBox</quote> peut avoir été placé soit dans le
+ groupe <quote>Système</quote> soit dans celui <quote>Outils système</quote>
+ de votre menu <quote>Applications</quote>. Vous pouvez aussi taper
+ <computeroutput>VirtualBox</computeroutput> dans un terminal.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>Quand vous lancez VirtualBox pour la première fois, une fenêtre comme
+ celle qui suit devrait apparaître&nbsp;:</para>
+
+ <para><mediaobject>
+ <imageobject>
+ <imagedata align="center" fileref="../en_US/images/virtualbox-main-empty.png"
+ width="10cm" />
+ </imageobject>
+ </mediaobject>Sur la gauche, vous pouvez voir un panneau qui listera plus
+ tard toutes vos machines virtuelles. Comme vous n'en avez pas créées, la
+ liste est vide. Une groupe de boutons au-dessus d'elle vous permet de
+ créer de nouvelles VMs et de travailler sur les VMs existantes, une fois
+ que vous en avez. Le panneau à droite affiche les propriétés de la machine
+ virtuelle actuellement sélectionnée s'il y en a. De même, comme vous
+ n'avez pas encore créé de machine, le panneau affiche un message de
+ bienvenue.</para>
+
+ <para>Pour vous donner une idée de ce à quoi VirtualBox peut ressembler
+ plus tard, après avoir créé beaucoup de machines, voici un autre exemple&nbsp;:</para>
+
+ <para><mediaobject>
+ <imageobject>
+ <imagedata align="center" fileref="../en_US/images/virtualbox-main.png"
+ width="10cm" />
+ </imageobject>
+ </mediaobject></para>
+ </sect1>
+
+ <sect1 id="gui-createvm">
+ <title>Créer votre première machine virtuelle</title>
+
+ <para>Cliquez sur le bouton <quote>Nouveau</quote> en haut de la fenêtre
+ VirtualBox. Un assistant va apparaître pour vous guider à travers le
+ paramétrage d'une nouvelle machine virtuelle (VM)&nbsp;:</para>
+
+ <para><mediaobject>
+ <imageobject>
+ <imagedata align="center" fileref="../en_US/images/create-vm-1.png"
+ width="10cm" />
+ </imageobject>
+ </mediaobject>Dans les pages qui suivent, l'assistant vous demandera le
+ minimum d'informations nécessaires pour créer une VM, en particulier&nbsp;:<orderedlist>
+ <listitem>
+ <para>Un <emphasis role="bold">nom</emphasis> pour votre VM et le
+ <emphasis role="bold">type de système d'exploitation</emphasis> (OS)
+ que vous voulez installer.</para>
+
+ <para>Le nom est celui que vous verrez plus tard dans la fenêtre
+ principale de VirtualBox et sous lequel vos paramètres vont se stocker.
+ Il est purement informatif, mais une fois que vous avez créé quelques
+ VMs, vous apprécierez d'avoir donné des noms de VMs parlants.
+ <quote>Ma VM</quote> n'est ainsi probablement pas aussi utile que
+ <quote>Windows XP SP2</quote>.</para>
+
+ <para>Pour le <quote>Type de système d'exploitation</quote>,
+ sélectionnez le système d'exploitation que vous voulez installer plus
+ tard. En fonction de votre sélection, VirtualBox activera ou
+ désactivera certains paramètres que votre système d'exploitation
+ invité peut exiger. C'est particulièrement important pour les invités
+ 64 bits (voir le <xref linkend="intro-64bitguests" />). Il est ainsi
+ recommandé de toujours mettre la bonne valeur.</para>
+ </listitem>
+
+ <listitem>
+ <para>La <emphasis role="bold">taille de la mémoire (RAM)</emphasis>
+ de la machine virtuelle pour elle-même. Chaque fois qu'une machine
+ virtuelle démarre, VirtualBox allouera cette mémoire à partir de votre
+ machine hôte et la présentera au système d'exploitation, qui verra
+ cette mémoire comme la RAM installée de l'ordinateur (virtuel).</para>
+
+ <para><note>
+ <para>Faites attention en choisissant ce paramètre. La mémoire que
+ vous donnez à la VM ne sera pas disponible pour votre OS hôte tant
+ que la VM sera en fonction, donc ne spécifiez pas plus que ce dont
+ vous pouvez disposer. Par exemple, si votre machine hôte a 1 Gio
+ de RAM et si vous entrez 512 Mio comme quantité de RAM pour une
+ machine virtuelle en particulier, pendant que la VM sera en
+ fonction, vous n'aurez plus que 512 Mio pour tous les autres
+ logiciels sur votre hôte. Si vous lancez deux VMs en même temps,
+ plus de mémoire sera alloué pour la seconde VM (qui peut même ne
+ pas être en mesure de démarrer si cette mémoire n'est pas
+ disponible). D'un autre côté, vous devriez spécifier autant de
+ mémoire que l'OS invité (et vos applications) exigeront pour
+ s'exécuter correctement.</para>
+ </note></para>
+
+ <para>Un invité Windows XP exigera au moins quelques centaines de Mio
+ de RAM pour s'exécuter correctement, et Windows Vista va même refuser
+ de s'installer avec moins de 512 Mio. Bien sûr, si vous voulez lancer
+ des applications gourmandes en graphique dans votre VM, vous pouvez
+ avoir besoin d'encore plus de RAM.</para>
+
+ <para>Alors, la règle de conduite est que si vous avez 1 Gio de RAM ou
+ plus dans votre ordinateur hôte, il est en général sûr d'allouer 512
+ Mio à chaque VM. Mais dans tous les cas, assurez-vous toujours de
+ libérer au moins 256 à 512 Mio de RAM sur votre système d'exploitation
+ hôte. Sans cela vous pourriez obliger votre système à utiliser la
+ mémoire d'échange de votre disque dur de façon excessive, ce qui ferait
+ planter votre système.</para>
+
+ <para><note>
+ <para>VirtualBox limite la quantité de RAM invitée à 1500 Mio sur
+ les hôtes Windows 32 bits et à 2560 Mio sur les hôtes Linux et
+ Solaris 32 bits, à cause des limites de l'espace d'adressage. Ces
+ restrictions ne s'appliquent pas aux hôtes 64 bits.</para>
+ </note></para>
+
+ <para>Comme tous les paramètres, vous pouvez modifier ce paramètre
+ plus tard, après avoir créé la VM.</para>
+ </listitem>
+
+ <listitem>
+ <para>Ensuite, vous devez spécifier un <emphasis role="bold">disque dur
+ virtuel</emphasis> pour votre VM.</para>
+
+ <para>Il y a plusieurs façons, potentiellement complexes, de fournir
+ un espace de disque dur à une VM (voir le <xref linkend="storage" />
+ pour des détails), mais la plus courante est d'utiliser un gros
+ fichier image sur votre disque dur <quote>réel</quote> dont VirtualBox
+ présente le contenu à votre VM comme s'il s'agissait d'un disque dur
+ complet.</para>
+
+ <para>L'assistant vous montre la fenêtre suivante&nbsp;:</para>
+
+ <para><mediaobject>
+ <imageobject>
+ <imagedata align="center" fileref="../en_US/images/create-vm-2.png"
+ width="10cm" />
+ </imageobject>
+ </mediaobject></para>
+
+ <para>L'assistant vous permet de créer un fichier image ou d'en
+ utiliser un existant. Remarquez aussi que les images de disque peuvent
+ être distinctes d'une VM particulière, donc même si vous effacez une
+ VM, vous pouvez garder l'image, ou la copier vers un autre hôte et lui
+ créer une nouvelle VM dessus.</para>
+
+ <para>Dans l'assistant, vous avez les options suivantes&nbsp;:</para>
+
+ <para><itemizedlist>
+ <listitem>
+ <para>Si vous avez préalablement créé des disques durs qui n'ont
+ pas été rattachés à d'autres machines virtuelles, vous pouvez
+ les sélectionner à partir de la liste déroulante dans la fenêtre
+ de l'assistant.</para>
+ </listitem>
+
+ <listitem>
+ <para>Sinon, pour créer un nouveau disque dur virtuel, appuyez
+ sur le bouton <emphasis role="bold">"Nouveau"</emphasis>.</para>
+ </listitem>
+
+ <listitem>
+ <para>Enfin, pour des opérations plus compliquées avec les
+ disques virtuels, le bouton <emphasis role="bold">"Existant..."</emphasis>
+ lancera le gestionnaire de médias virtuels, qui est décrit de
+ façon plus détaillée au <xref linkend="vdis" />.</para>
+ </listitem>
+ </itemizedlist>Très probablement, si vous utilisez VirtualBox pour
+ la première fois, vous voudrez créer une nouvelle image de disque.
+ Pour cela, appuyez sur le bouton <quote>Nouveau</quote>.</para>
+
+ <para>Cela ouvre une nouvelle fenêtre,
+ l'<emphasis role="bold">"assistant de création de nouveaux disques virtuels".</emphasis></para>
+
+ <para>VirtualBox supporte deux types de fichiers images&nbsp;:<itemizedlist>
+ <listitem>
+ <para>Un <emphasis role="bold">fichier extensible de façon
+ dynamique</emphasis> ne grossira que lorsque l'invité stockera
+ réellement les données sur son disque dur virtuel. Il sera donc
+ au début petit sur le disque dur de l'hôte et ne grossira
+ jusqu'à la taille spécifiée seulement que quand on lui fournira
+ des données.</para>
+ </listitem>
+
+ <listitem>
+ <para>Un <emphasis role="bold">fichier à taille fixe</emphasis>
+ occupera immédiatement le fichier spécifié, même si une fraction
+ seulement de l'espace disque dur virtuel est utilisée en réalité.
+ Tout en occupant beaucoup plus d'espace, un fichier à taille
+ fixe nécessite moins d'accès et s'avère donc légèrement plus
+ rapide qu'un fichier extensible de façon dynamique.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>Pour des détails sur les différences, merci de vous reporter au
+ <xref linkend="vdidetails" />.</para>
+
+ <para>Pour empêcher que votre disque dur physique ne soit plein,
+ VirtualBox limite la taille d'une image de fichier. Elle doit toutefois
+ être assez grande pour accueillir le contenu de votre système
+ d'exploitation et les applications que vous souhaitez installer -- pour
+ un invité Windows ou Linux récent, vous aurez probablement besoin de
+ plusieurs gigaoctets pour toute utilisation sérieuse&nbsp;:</para>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" fileref="../en_US/images/create-vdi-1.png"
+ width="10cm" />
+ </imageobject>
+ </mediaobject>
+
+ <para>Après avoir sélectionné ou créé votre fichier image, appuyez à
+ nouveau sur <emphasis role="bold">"Suivant"</emphasis>, pour aller à
+ la page suivante.</para>
+ </listitem>
+
+ <listitem>
+ <para>Après avoir cliqué sur <emphasis role="bold">"Terminer"</emphasis>,
+ votre nouvelle machine virtuelle sera créée. Vous la verrez alors dans
+ la liste du côté gauche de la fenêtre principale, avec le nom que vous
+ avez entré.</para>
+ </listitem>
+ </orderedlist></para>
+ </sect1>
+
+ <sect1>
+ <title>Lancer votre machine virtuelle</title>
+
+ <para>Vous allez maintenant voir votre nouvelle machine dans la liste des
+ machines virtuelles, sur la gauche de la fenêtre principale de VirtualBox.
+ Pour démarrer la machine virtuelle, double-cliquez simplement dessus, ou
+ sélectionnez-la puis appuyez sur le bouton Lancer en haut.</para>
+
+ <para>Ceci ouvre une nouvelle fenêtre et la machine virtuelle sélectionnée
+ va démarrer. Tout ce que vous devriez voir normalement sur le moniteur du
+ système virtuel est montré dans la fenêtre, comme vous pouvez le voir dans
+ l'image au <xref linkend="virtintro" />.</para>
+
+ <para>Puisque c'est la première fois que exécutez cette VM, un autre
+ assistant apparaîtra pour vous aider à sélectionner un média d'installation.
+ Puisque la VM est créée vide, elle devrait se comporter comme un ordinateur
+ réel sans système d'exploitation installé&nbsp;: elle ne fera rien et affichera
+ un message d'erreur selon lequel elle ne peut pas démarrer de système
+ d'exploitation.</para>
+
+ <para>C'est pourquoi l' <quote>assistant premier démarrage</quote> vous aide
+ à sélectionner un média de système d'exploitation à partir duquel on peut
+ installer un système d'exploitation. Dans la plupart des cas, soit il s'agira
+ d'un CD ou d'un DVD réel (VirtualBox peut alors configurer la machine
+ virtuelle pour utiliser le lecteur de votre hôte), soit vous pourriez avoir
+ l'image ISO d'un CD ou d'un DVD sous la main, que VirtualBox peut alors
+ présenter à la machine virtuelle.</para>
+
+ <para>Dans les deux cas, après avoir fait vos choix dans l'assistant, vous
+ pourrez installer votre système d'exploitation.</para>
+
+ <para>En général, vous pouvez vraiment utiliser votre machine virtuelle
+ comme vous utiliseriez un ordinateur réel. Quelques points méritent cependant
+ d'être mentionnés.</para>
+
+ <sect2>
+ <title>Support du clavier et de la souris dans les machines virtuelles</title>
+
+ <sect3>
+ <title id="keyb_mouse_normal">1.7.1.1 Capturer et utiliser le clavier et
+ la souris</title>
+
+ <para>À partir de la version 3.2. VirtualBox fournit un périphérique USB
+ virtuel de tablette aux nouvelles machines virtuelles, à travers laquelle
+ les événements de la souris sont communiqués au système d'exploitation
+ invité. Il s'en suit que si vous lancez un système d'exploitation invité
+ très récent qui peut gérer de tels périphériques, le support de la souris
+ peut être assuré directement sans que la souris ne soit <quote>capturée</quote>
+ comme décrit ci-dessous&nbsp;; voir le chapitre <xref linkend="settings-motherboard" />
+ pour plus d'informations.</para>
+
+ <para>Sinon, si la machine virtuelle ne voit que les périphériques de
+ souris et de clavier PS/2 standards, étant donné que le système
+ d'exploitation de la machine virtuelle ne <quote>sait</quote> pas qu'il
+ ne fonctionne pas sur un ordinateur réel, il s'attend à bénéficier d'un
+ contrôle exclusif sur votre clavier et votre souris. Mais ce n'est pas
+ le cas puisque, sauf si lancez la VM en mode plein-écran, votre VM a
+ besoin de partager le clavier et la souris avec d'autres applications
+ et, éventuellement, avec d'autres VMs sur votre hôte.</para>
+
+ <para>Il s'en suit que, d'emblée après avoir installé un système
+ d'exploitation invité et avant que vous installiez les additions
+ invité (nous vous expliquerons cela dans une minute), seule une des deux
+ -- votre VM ou le reste de votre ordinateur -- peut « posséder » le
+ clavier et la souris. Vous verrez un second pointeur de souris qui sera
+ toujours confiné aux limites de la fenêtre de la VM. De façon basique,
+ vous activez la VM en cliquant à l'intérieur.</para>
+
+ <para>Pour redonner le clavier et de la souris à votre système
+ d'exploitation hôte, VirtualBox réserve une touche spéciale de votre
+ clavier pour cela&nbsp;: la <emphasis role="bold">"touche hôte".</emphasis>
+ Par défaut, il s'agit de la touche Contrôle droite sur votre clavier ;
+ sur un hôte Mac, la touche hôte par défaut est la touche Commande gauche.
+ Vous pouvez modifier ce paramètre par défaut dans les paramètres globaux
+ de VirtualBox. Dans tous les cas, le réglage actuel de la touche hôte
+ est toujours affiché en bas à droite de la fenêtre de votre VM, au cas
+ où vous l'auriez oubliée&nbsp;:</para>
+
+ <para><mediaobject>
+ <imageobject>
+ <imagedata align="center" fileref="../en_US/images/vm-hostkey.png"
+ width="7cm" />
+ </imageobject>
+ </mediaobject>En détail, tout ceci se transcrit comme suit&nbsp;:</para>
+
+ <para><itemizedlist>
+ <listitem>
+ <para>Votre <emphasis role="bold">clavier</emphasis> appartient à
+ la VM si la fenêtre de la VM sur votre bureau hôte contient le
+ focus (et aussi, si vous avez plusieurs fenêtres ouvertes dans
+ votre système d'exploitation invité, la fenêtre qui contient le
+ focus dans la VM). Ceci signifie que si vous voulez taper quelque
+ chose à l'intérieur de votre VM, cliquez d'abord sur
+ la barre de titre de votre fenêtre de VM.</para>
+
+ <para>Pour rendre le clavier, appuyez sur la touche hôte (comme expliqué
+ ci-dessus, en général la touche Contrôle droite).</para>
+
+ <para>Remarquez que tandis que la VM dispose du clavier, certaines
+ séquences de touches (comme par exemple Alt-Tab) ne seront plus
+ vues par l'hôte, mais iront à la place vers l'invité. Après que
+ vous ayez appuyé sur la touche hôte pour réactiver le clavier de
+ l'hôte, tous les appuis sur une touche retournent à l'hôte, si bien
+ que les séquences comme Alt-Tab n'atteindront plus l'invité.</para>
+ </listitem>
+
+ <listitem>
+ <para>Votre <emphasis role="bold">souris</emphasis> n'appartient
+ à la VM qu'après que vous ayez cliqué dans la fenêtre de la VM. Le
+ pointeur de la souris hôte va disparaître et la souris va piloter
+ le pointeur de l'invité au lieu de votre pointeur de souris normal.</para>
+
+ <para>Remarquez que l'appartenance de la souris est indépendante
+ de celle du clavier&nbsp;: même après que vous ayez cliqué sur la
+ barre de titre pour pouvoir taper quelque chose à l'intérieur de
+ la fenêtre de la VM, votre souris n'appartient pas nécessairement
+ encore à la VM.</para>
+
+ <para>Pour que la VM rende disponible la souris, appuyez aussi sur
+ la touche Hôte.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>Comme ce comportement peut être gênant, VirtualBox fournit un
+ ensemble d'outils et de pilotes de périphérique pour les systèmes invités
+ appelé <quote>Additions invité VirtualBox</quote> qui rendent les
+ opérations du clavier et de la souris avec la VM beaucoup plus
+ transparentes. En particulier, les additions vont vous débarrasser du
+ deuxième pointeur de souris <quote>invité</quote> et faire fonctionner
+ le pointeur de votre souris hôte directement dans l'invité.</para>
+
+ <para>Ceci sera décrit plus tard au <xref linkend="guestadditions" />.</para>
+
+ </sect3>
+
+ <sect3>
+ <title>Entrer des caractères spéciaux</title>
+
+ <para>Les systèmes d'exploitation s'attendent à ce que certaines
+ combinaisons de touches démarrent certaines procédures. Il se peut que
+ certaines de ces combinaisons de touches soient difficiles à entrer dans
+ une machine virtuelle, vu qu'il y a trois candidats pour recevoir
+ l'entrée clavier&nbsp;: le système d'exploitation hôte, VirtualBox ou le
+ système d'exploitation invité. Qui des trois reçoit les appuis de touches
+ dépend d'un certain nombre de facteurs, parmi lesquels la touche
+ elle-même.</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Les systèmes d'exploitation hôte réservent certaines
+ combinaisons de touches pour eux. Par exemple, il est impossible
+ d'entrer la combinaison <emphasis role="bold">Ctrl+Alt+Delete</emphasis>
+ si vous voulez redémarrer le système d'exploitation invité dans votre
+ machine virtuelle, car cette combinaison de touches est en général
+ rattachée à l'OS hôte (Windows comme Linux l'interceptent), et si vous faites cette
+ combinaison de touches, elle redémarrera votre
+ <emphasis>hôte</emphasis>.</para>
+
+ <para>En outre, sur Linux et Solaris, qui utilisent le système X
+ Window, la combinaison de touches <emphasis role="bold">Ctrl+Alt+Backspace</emphasis>
+ réinitialise normalement le serveur X (pour redémarrer toute
+ l'interface graphique au cas où elle plante). Comme le serveur X
+ intercepte cette combinaison, l'appui sur celle-ci va en général
+ redémarrer votre interface graphique hôte (et tuer tous les
+ programmes en fonction, y compris VirtualBox, dans l'opération).</para>
+
+ <para>Troisièmement, sur les hôtes Linux qui supportent les terminaux
+ virtuels, la combinaison de touches <emphasis role="bold">Ctrl+Alt+Fx</emphasis>
+ (où Fx est une des touches de fonction de F1 à F12) permet normalement
+ de basculer entre les terminaux virtuels. Comme avec Ctrl+Alt+Supp,
+ ces combinaisons sont interceptées par le système d'exploitation
+ hôte et donc, basculent toujours entre les terminaux de
+ l'<emphasis>hôte</emphasis>.</para>
+
+ <para>Si vous voulez plutôt envoyer ces combinaisons de touches au
+ système d'exploitation invité dans la machine virtuelle, vous devrez
+ utiliser une des méthodes suivantes&nbsp;:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Utilisez les icônes dans le menu <quote>Machine</quote>
+ de la fenêtre de la machine virtuelle. Vous y trouverez
+ <quote>Insertion Ctrl+Alt+Supp</quote> et
+ <quote>Ctrl+Alt+Effacement</quote>&nbsp;; toutefois ces dernières
+ n'auront d'effet qu'avec des invités Linux ou Solaris.</para>
+ </listitem>
+
+ <listitem>
+ <para>Appuyez sur des combinaisons de touches spéciales avec la
+ touche Hôte (normalement la touche Contrôle droite), alors
+ VirtualBox traduira pour la machine virtuelle&nbsp;:<itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">Touche hôte + Supp</emphasis>
+ pour envoyer Ctrl+Alt+Del (pour redémarrer l'invité)&nbsp;;</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Touche hôte +
+ Effacement</emphasis> pour envoyer Ctrl+Alt+Backspace (pour
+ redémarrer l'interface graphique d'un invité Linux ou
+ Solaris)&nbsp;;</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Touche hôte + F1</emphasis> (ou
+ d'autres touches de fonction) pour simuler Ctrl+Alt+F1 (ou
+ d'autres touches de fonction, à savoir pour basculer entre
+ des terminaux virtuels dans un invité Linux).</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+
+ <listitem>
+ <para>Pour d'autres combinaisons de touches comme Alt-Tab (pour
+ basculer entre des fenêtres ouvertes), VirtualBox vous permet de
+ configurer si ces combinaisons affecteront l'hôte ou l'invité, si
+ une machine virtuelle contient actuellement le focus. C'est un
+ réglage global pour toutes les machines virtuelles et vous pouvez
+ le trouver sous <quote>Fichier</quote> -&gt; <quote>Préférences</quote>
+ -&gt; <quote>Entrée</quote> -&gt; <quote>Auto-capture du clavier</quote>.</para>
+ </listitem>
+ </itemizedlist>
+ </sect3>
+ </sect2>
+
+ <sect2>
+ <title>Changer de média amovible</title>
+
+ <para>Pendant qu'une machine virtuelle est en fonction, vous pouvez changer
+ de média amovible dans le menu <quote>Périphériques</quote> de la fenêtre
+ de la VM. Vous pouvez y sélectionner en détail ce que VirtualBox présente
+ à votre VM comme un CD, un DVD, ou une disquette.</para>
+
+ <para>Les paramètres sont les mêmes que ceux qui seraient disponibles pour
+ la VM dans la boîte de dialogue <quote>Paramètres</quote> de la fenêtre
+ principale de VirtualBox, mais puisque cette boîte de dialogue est
+ désactivée lorsque la VM est dans l'état <quote>En fonction</quote>
+ ou <quote>sauvegardée</quote>, ce menu supplémentaire vous évite de devoir
+ arrêter et redémarrer la VM chaque fois que vous voulez changer de média.</para>
+
+ <para>Donc, dans le menu « Périphériques », VirtualBox vous permet
+ d'attacher le lecteur hôte à l'invité ou de sélectionner l'image d'une
+ disquette ou d'un DVD en utilisant le gestionnaire d'images de disque,
+ tout comme il est décrit au <xref linkend="configbasics" />.</para>
+ </sect2>
+
+ <sect2 id="intro-resize-window">
+ <title>Resizing the machine's window</title>
+
+ <para>You can resize the virtual machine's window when it is running. In
+ that case, one of three things will happen:<orderedlist>
+ <listitem>
+ <para>If you have <emphasis role="bold">"scale mode"</emphasis>
+ enabled, then the virtual machine's screen will be scaled to the
+ size of the window. This can be useful if you have many machines
+ running and want to have a look at one of them while it is running
+ in the background. Alternatively, it might be useful to enlarge a
+ window if the VM's output screen is very small, for example
+ because you are running an old operating system in it.</para>
+
+ <para>To enable scale mode, press the <emphasis role="bold">host
+ key + C</emphasis>, or select "Scale mode" from the "Machine" menu
+ in the VM window. To leave scale mode, press the host key + C
+ again.</para>
+
+ <para>The aspect ratio of the guest screen is preserved when
+ resizing the window. To ignore the aspect ratio, press Shift
+ during the resize operation.</para>
+
+ <para>Please see <xref linkend="KnownIssues" /> for additional
+ remarks.</para>
+ </listitem>
+
+ <listitem>
+ <para>If you have the Guest Additions installed and they support
+ automatic <emphasis role="bold">resizing</emphasis>, the Guest
+ Additions will automatically adjust the screen resolution of the
+ guest operating system. For example, if you are running a Windows
+ guest with a resolution of 1024x768 pixels and you then resize the
+ VM window to make it 100 pixels wider, the Guest Additions will
+ change the Windows display resolution to 1124x768.</para>
+
+ <para>Please see <xref linkend="guestadditions" /> for more
+ information about the Guest Additions.</para>
+ </listitem>
+
+ <listitem>
+ <para>Otherwise, if the window is bigger than the VM's screen, the
+ screen will be centered. If it is smaller, then scroll bars will
+ be added to the machine window.</para>
+ </listitem>
+ </orderedlist></para>
+ </sect2>
+
+ <sect2>
+ <title>Sauvegarder l'état de la machine</title>
+
+ <para>Quand vous cliquez sur le bouton <quote>Fermer</quote> de la fenêtre
+ de votre machine virtuelle (en haut à droite de la fenêtre, comme vous
+ fermeriez n'importe quelle autre fenêtre sur votre système) (ou quand vous
+ appuyez à la fois sur la touche Hôte et <quote>Q</quote>), VirtualBox vous
+ demande si vous voulez <quote>Sauvegarder</quote> ou <quote>couper</quote>
+ la VM.</para>
+
+ <para><mediaobject>
+ <imageobject>
+ <imagedata align="center" fileref="../en_US/images/vm-close.png"
+ width="7cm" />
+ </imageobject>
+
+ </mediaobject>La différence entre ces trois options est fondamentale.
+ Elles signifient&nbsp;:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">Sauvegarder l'état de la machine&nbsp;:</emphasis>
+ Avec cette option, VirtualBox « gèle » la machine virtuelle en
+ sauvegardant complètement son état sur votre disque local. Quand vous
+ restaurerez plus tard la VM (en cliquant à nouveau sur le bouton
+ <quote>Démarrer</quote> de la fenêtre principale de VirtualBox), vous
+ trouverez que la VM continue exactement là où vous l'aviez quittée.
+ Tous vos programmes seront encore ouverts, et votre ordinateur reprend
+ son travail.</para>
+
+ <para>Sauvegarder l'état de la machine virtuelle est ainsi dans
+ certains cas équivalent à la suspension d'un ordinateur portable (en
+ fermant son écran par exemple).</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Envoyer le signal de fin.</emphasis>
+ Ceci enverra le signal de fin ACPI à la machine virtuelle, ce qui a le
+ même effet que si vous aviez appuyé sur le bouton marche/arrêt d'un
+ ordinateur réel. Selon la modernité du système d'exploitation en
+ fonction dans la VM, ceci devrait faire appel au bon mécanisme d'arrêt
+ dans la VM.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Couper la machine&nbsp;:</emphasis> Avec
+ cette option, VirtualBox s'arrête d'exécuter la machine virtuelle, mais
+ <emphasis>sans</emphasis> sauvegarder son état.</para>
+
+ <para>Cela revient à retirer la prise électrique d'un ordinateur réel
+ sans l'arrêter correctement. Si vous redémarrez la machine virtuelle
+ après l'avoir coupée, votre système d'exploitation devra redémarrer
+ complètement et il se peut qu'il se lance dans une longue vérification
+ de ses disques systèmes (virtuels).</para>
+
+ <para>Vous ne devriez donc normalement pas le faire, puisque cela peut
+ potentiellement entraîner une perte de données ou un état incohérent
+ du système invité sur le disque.</para>
+
+ <para>Par exception, si votre machine virtuelle a un dépôt (voir le
+ chapitre suivant), vous pouvez utiliser cette option pour restaurer
+ rapidement le dépôt actuel de la machine virtuelle. Seulement dans ce
+ cas, couper la machine n'est pas risqué.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Le bouton <emphasis role="bold">"Désactiver"</emphasis> de la
+ fenêtre principale de VirtualBox désactive l'état de sauvegarde de la
+ machine virtuelle. Ceci a le même effet que de l'éteindre, et cela produira
+ les mêmes avertissements.</para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="snapshots">
+ <title>Instantanés</title>
+
+ <para>Avec les instantanés, vous pouvez sauvegarder un état en particulier
+ d'une machine virtuel pour l'utiliser plus tard. À tout moment, vous pourrez
+ plus tard revenir à l'état, même si vous avez énormément changé la VM
+ entre-temps.</para>
+
+ <para>Vous pouvez voir les instantanés d'une machine virtuelle en
+ sélectionnant une machine à partir de la liste à gauche dans la fenêtre
+ principale de VirtualBox, puis en sélectionnant l'onglet <quote>instantanés</quote>
+ à droite. Au départ, jusqu'à ce que vous enregistriez le instantané d'une
+ machine, cette liste est vide sauf pour l'objet « État actuel » qui
+ représente le point <quote>Présent</quote> dans le temps de la vie de la
+ machine virtuelle.</para>
+
+ <para>Trois opérations sont liées aux instantanés&nbsp;:<orderedlist>
+ <listitem>
+ <para>Vous pouvez <emphasis role="bold">faire un
+ instantané</emphasis>.<itemizedlist>
+ <listitem>
+ <para>Si votre VM est actuellement en fonction, sélectionnez
+ <quote>Prendre un instantané</quote> depuis le menu déroulant
+ <quote>Machine</quote> de la fenêtre de la VM.</para>
+ </listitem>
+
+ <listitem>
+ <para>Si votre VM est actuellement dans l'état <quote>Sauvegardée</quote>
+ ou <quote>Éteinte</quote>, (comme affiché à côté de la VM dans la
+ fenêtre principale de VirtualBox), cliquez sur l'onglet
+ <quote>instantanés</quote> en haut à droite, puis<itemizedlist>
+ <listitem>
+ <para>Soit sur l'icône représentant un petit appareil
+ photo (pour <quote>Prendre un instantané</quote>), soit</para>
+ </listitem>
+
+ <listitem>
+ <para>faites un clic droit sur l'icône <quote>État actuel</quote>
+ dans la liste et sélectionnez <quote>Prendre un instantané</quote>
+ depuis le menu.</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>Dans tous les cas, une fenêtre s'affichera vous demandant un
+ nom d'instantané. Ce nom a un but exclusivement de référencement pour
+ vous aider à vous souvenir de l'état du instantané. Par exemple, un
+ nom utile serait <quote>Installation toute neuve à partir de rien,
+ aucun lecteur externe</quote>. Vous pouvez aussi ajouter un texte plus
+ long dans le champ <quote>Description</quote> si vous le voulez.</para>
+
+ <para>Votre nouvel instantané apparaîtra alors dans la liste des
+ instantanés sous l'onglet <quote>instantanés</quote>. En-dessous, vous
+ verrez une icône appelée <quote>État actuel</quote>, signifiant que
+ l'état actuel de votre VM est une variante basée sur le instantané que
+ vous avez pris tout à l'heure. Si vous prenez plus tard un autre
+ instantané, vous verrez qu'ils seront affichés en sections, et que
+ chaque instantané en sous-sections est un dérivé du premier&nbsp;:<mediaobject>
+ <imageobject>
+ <imagedata align="center" fileref="../en_US/images/snapshots-1.png"
+ width="10cm" />
+ </imageobject>
+ </mediaobject></para>
+
+ <para>VirtualBox vous permet de prendre un nombre illimité de
+ instantanés -- la seule limite étant la taille de vos disques. Gardez à
+ l'esprit que chaque instantané stocke l'état de la machine virtuelle
+ et, ainsi, prend de l'espace disque.</para>
+ </listitem>
+
+ <listitem>
+ <para>Vous pouvez <emphasis role="bold">restaurer un instantané</emphasis>
+ en faisant un clic droit sur un instantané que vous avez pris dans la
+ liste des instantanés. En restaurant un instantané, vous revenez (ou
+ voyagez) dans le temps&nbsp;: l'état actuel de la machine est perdu,
+ et la machine est restaurée exactement dans le même état où elle se
+ trouvait lorsque vous avez pris l'instantané.<footnote>
+ <para>La terminologie et la fonctionnalité de restauration des
+ instantanés a changé avec VirtualBox 3.1. Avant cette version,
+ il était seulement possible de revenir en arrière sur le dernier
+ instantané que vous avez pris -- pas ceux précédents, et l'opération
+ s'appelait <quote>Désactiver l'état actuel</quote> et non
+ <quote>Restaurer le dernier instantané</quote>. La limitation a été
+ surmontée avec la version 3.1. Il est maintenant possible de
+ restaurer <emphasis>n'importe quel</emphasis> instantané, de
+ revenir en arrière et en avant dans le temps.</para>
+ </footnote></para>
+
+ <note>
+ <para>La restauration d'un instantané affectera les disques durs
+ virtuels qui sont connectés à votre VM, vu que l'état complet du
+ disque dur virtuel sera rétabli. Cela signifie aussi que tous les
+ fichiers qui ont été créés depuis l'instantané et toutes les autres
+ modifications de fichiers <emphasis>seront perdus</emphasis>. Afin
+ d'empêcher une telle perte de données tout en utilisant la
+ fonctionnalité d'instantané, il est possible d'ajouter un deuxième
+ disque dur en mode <quote>write-through</quote> en utilisant
+ l'interface <computeroutput>VBoxManage</computeroutput> et de
+ l'utiliser pour stocker vos données. Comme les disques durs
+ write-through <emphasis>ne sont pas </emphasis> inclus dans les
+ instantanés, il restent inchangés quand une machine est rétablie.
+ Voir le <xref linkend="hdimagewrites" os="" /> pour des détails.</para>
+ </note>
+
+ <para>En restaurant un instantané précédent et en prenant des
+ instantanés à partir de celui-ci, il est même possible de créer une
+ espèce de réalité alternative et de basculer entre ces différents
+ historiques de la machine virtuelle. Il peut en résulter un véritable
+ arbre de instantanés de machine virtuelle, comme montrée dans la
+ capture d'écran ci-dessous.</para>
+ </listitem>
+
+ <listitem>
+ <para>Vous pouvez aussi <emphasis role="bold">effacer un
+ instantané</emphasis>, ce qui n'affectera pas l'état de la machine
+ virtuelle mais seulement les fichiers du disque que VirtualBox
+ utilisait pour stocker les données du instantané, libérant ainsi de
+ l'espace disque. Pour effacer un instantané, faites un clic droit
+ dessus dans l'arborescence des instantanés et sélectionnez
+ <quote>Effacer</quote>. Depuis VirtualBox 3.2, vous pouvez effacer
+ des instantanés même lorsqu'une machine est en fonction.<note>
+ <para>Si prendre et restaurer des instantanés sont des opérations
+ très rapides, effacer un instantané peut prendre un temps
+ considérable étant donné qu'il se peut qu'il faille copier une
+ grande quantité de données entre plusieurs fichiers images de
+ disque. Il se peut que les fichiers de disques temporaires
+ nécessitent beaucoup d'espace disque pendant que l'opération est
+ en cours.</para>
+ </note></para>
+
+ <para>Certaines opérations ne sont pas faisables lorsqu'une VM est en
+ fonction et vous obtiendrez un message spécifique selon lequel vous
+ devez effectuer la suppression du instantané quand la VM sera éteinte.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>Considérez un instantané comme un moment dans le temps que vous avez
+ préservé. Plus formellement, un instantané consiste en trois choses&nbsp;:<itemizedlist>
+ <listitem>
+ <para>Il contient une copie complète des paramètres de la VM, de sorte
+ que quand vous restaurez un instantané, les paramètres de la VM sont
+ également restaurés. (Par exemple, si vous avez changé la configuration
+ du disque dur, ce changement est écrasé quand vous restaurez
+ l'instantané.)</para>
+ </listitem>
+
+ <listitem>
+ <para>L'état de tous les disques virtuels attachés à la machine est
+ préservé. Retourner à un instantané signifie que toutes les modifications,
+ bit par bit, qui ont été effectuées sur les disques de la machine
+ seront entièrement annulées.</para>
+
+ <para>(Plus exactement, cela n'est vrai que pour les disques durs
+ virtuels en mode <quote>normal</quote>. Comme précisé ci-dessus, vous
+ pouvez configurer les disques pour qu'ils se comportent différemment
+ avec les instantanés&nbsp;; voir le <xref linkend="hdimagewrites" />.
+ De façon encore plus formelle et plus exact au plan technique, ce
+ n'est pas le disque virtuel lui-même qui est restauré quand on
+ restaure un instantané. Quand on prend un instantané, VirtualBox crée
+ plutôt des images de différenciation qui ne contiennent que les
+ modifications depuis que l'instantané a été pris, et lorsqu'on
+ restaure l'instantané, VirtualBox envoie cette image de différenciation,
+ revenant ainsi à l'état précédent. Non seulement cela est plus rapide
+ mais cela utilise moins d'espace disque. Pour les détails, qui peuvent
+ être complexes, merci de vous reporter au chapitre <xref
+ linkend="diffimages" />.)</para>
+ </listitem>
+
+ <listitem>
+ <para>Enfin, si vous avez pris un instantané alors que la machine
+ était en fonction, l'état de la mémoire de la machine est également
+ sauvegardé dans l'instantané (comme la mémoire peut être sauvegardée
+ quand vous fermez la fenêtre de la VM) de sorte que quand vous
+ restaurerez l'instantané, l'exécution reprend très exactement à
+ l'endroit où l'instantané a été pris.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect1>
+
+ <sect1>
+ <title id="configbasics">Configuration de la machine virtuelle</title>
+
+ <para>Quand vous sélectionnez une machine virtuelle à partir de la liste
+ dans la fenêtre principale de VirtualBox, vous verrez un résumé des paramètres
+ de cette machine à droite sur la fenêtre, sous l'onglet <quote>Détails</quote>.</para>
+
+ <para>Cliquer sur le bouton <quote>Paramètres</quote> de la barre d'outil en
+ haut de la fenêtre principale de VirtualBox ouvre une fenêtre détaillée où
+ vous pouvez configurer un grand nombre de propriétés de la VM actuellement
+ sélectionnée. Mais soyez prudent: même s'il est possible de modifier tous les
+ paramètres de la VM après avoir installé un système d'exploitation invité,
+ certaines modifications pourraient empêcher un système d'exploitation invité
+ de fonctionner correctement si cela est fait après l'installation.</para>
+
+ <note>
+ <para>Le bouton <quote>Paramètres</quote> est désactivé quand une VM est
+ dans l'état <quote>En fonction</quote> ou <quote>sauvegardé</quote>. Ceci
+ simplement car la boîte de dialogue de paramètres vous permet de modifier
+ des aspects fondamentaux de l'ordinateur virtuel créé pour votre système
+ d'exploitation, et il se peut que ce système d'exploitation gère mal le
+ fait que, par exemple, on lui enlève la moitié de sa mémoire sous les
+ pieds. Il s'en suit que si le bouton <quote>Paramètres</quote> est
+ désactivé, coupez d'abord la VM actuelle.</para>
+ </note>
+
+ <para>VirtualBox fournit une pléthore de paramètres que vous pouvez modifier
+ pour une machine virtuelle. Les divers paramètres que vous pouvez modifier
+ dans la fenêtre <quote>Paramètres</quote> sont décrits en détail au
+ <xref linkend="BasicConcepts" />. Et davantage de paramètres sont disponibles
+ avec l'interface en ligne de commande&nbsp;; voir le <xref linkend="vboxmanage" />.</para>
+
+ <para>Pour l'instant, si vous venez de créer une VM vide, vous serez
+ probablement très intéressé par les paramètres présentés dans la section
+ <quote>CD/DVD-ROM</quote> si vous voulez rendre disponible un CD ou un DVD
+ la première fois que vous la lancerez, afin d'installer votre système
+ d'exploitation invité.</para>
+
+ <para>Pour cela, vous avez deux options&nbsp;:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Si vous avez un média CD ou DVD physique final à partir duquel vous
+ voulez installer votre système d'exploitation invité (comme dans le cas
+ d'un CD ou d'un DVD d'installation de Windows), mettez le média dans le
+ lecteur de CD ou de DVD de votre hôte.</para>
+
+ <para>Puis dans la boîte de dialogue des paramètres, allez à la section
+ <quote>CD/DVD-ROM</quote> et sélectionnez <quote>Lecteur hôte</quote>
+ avec la bonne lettre de lecteur (ou, s'il s'agit d'un hôte Linux, le
+ fichier de périphérique). Cela permettra à votre VM d'accéder au média
+ de votre lecteur hôte et vous pourrez effectuer l'installation à partir
+ de là.</para>
+ </listitem>
+
+ <listitem>
+ <para>Si vous avez téléchargé un média d'installation sur Internet sous
+ la forme d'un fichier image ISO (le plus vraisemblablement dans le cas
+ d'une distribution Linux), en principe vous graveriez ce fichier sur un
+ CD ou un DVD vide puis procéderiez comme il vient d'être décrit. Mais
+ avec VirtualBox, vous pouvez sauter cette étape et monter le fichier ISO
+ directement. VirtualBox présentera alors ce fichier comme un lecteur CD
+ ou un DVD-ROM à la machine virtuelle, exactement comme avec des images
+ de disque dur virtuel.</para>
+
+ <para>Dans ce cas, dans la boîte de dialogue des paramètres, aller à la
+ section <quote>CD/DVD-ROM</quote> et sélectionnez <quote>Fichier image
+ ISO</quote>. Ceci ouvre le gestionnaire de médias virtuels où vous
+ effectuez les étapes suivantes&nbsp;:</para>
+
+ <para><orderedlist>
+ <listitem>
+ <para>Appuyez sur le bouton <quote>Ajouter</quote> pour ajouter
+ votre fichier ISO à la liste des images enregistrées. Ceci
+ présentera une boîte de dialogue de fichier ordinaire qui vous
+ permet de chercher votre fichier ISO sur votre machine hôte.</para>
+ </listitem>
+
+ <listitem>
+ <para>De retour à la fenêtre du gestionnaire, sélectionnez le
+ fichier ISO que vous venez d'ajouter et appuyez sur le bouton
+ <quote>Sélectionner</quote>. Ceci sélectionne le fichier ISO pour
+ votre VM.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>Le gestionnaire de médias virtuels est décrit en détail au <xref
+ linkend="vdis" />.</para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Effacer des machines virtuelles</title>
+
+ <para>Pour supprimer une machine virtuelle dont vous n'avez plus besoin,
+ faites un clic droit dessus dans la liste des machines virtuelles de la
+ fenêtre principale et sélectionnez <quote>Supprimer</quote> depuis le menu
+ contextuel qui apparaît. Tous les paramètres de cette machine seront perdus.</para>
+
+ <para>L'option <quote>Supprimer</quote> du menu est désactivée lorsqu'une
+ machine est dans l'état <quote>Sauvegardé</quote>. Pour effacer une telle
+ machine, désactivez d'abord l'état de sauvegardé en appuyant sur le bouton
+ <quote>Désactiver</quote>.</para>
+
+ <para>Néanmoins, toutes les images de disque dur attachées à la machine
+ seront conservées&nbsp;; vous pouvez les effacer séparément en utilisant le
+ gestionnaire de médias virtuels&nbsp;; voir le <xref linkend="vdis" />.</para>
+
+ <para>Vous ne pouvez supprimer une machine qui a des instantanés ou qui est
+ en état de sauvegardée, donc vous devez d'abord les désactiver.</para>
+ </sect1>
+
+ <sect1 id="clone">
+ <title>Cloning virtual machines</title>
+
+ <para>To experiment with a VM configuration, test different guest OS levels
+ or to simply backup a VM, VirtualBox can create a full copy of an existing
+ VM.<footnote>Cloning support was introduced with VirtualBox
+ 4.1.</footnote></para>
+
+ <para>A wizard will guide you through the clone process:</para>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" fileref="images/clone-vm.png"
+ width="10cm" />
+ </imageobject>
+ </mediaobject>
+
+ <para>This wizard can be invoked from the context menu of the Manager's VM
+ list (select "Clone") or the "Snapshots" view of the selected VM. You have
+ the choice to create a exact copy of the current state without any
+ snapshots or with all snapshots included.<!-- If you
+ invoke the clone VM wizard from the latter place and have selected a
+ specific snapshot you can additional decide if you want to clone that
+ snapshot including all child's, but without any independent snapshots in
+ the tree.--></para>
+
+ <para>The clone operation itself can be a lengthy operation depending on
+ the size and count of the attached disk images. Also keep in mind that
+ every snapshot has differencing disk images attached, which need to be cloned
+ as well.</para>
+
+ <para>The "Clone" menu item is disabled while a machine is running.</para>
+
+ <para>For how to clone a VM at the command line, please see <xref
+ linkend="vboxmanage-clonevm" />.</para>
+ </sect1>
+
+ <sect1 id="ovf">
+ <title>Importer et exporter des machines virtuelles</title>
+
+ <para>À partir de la version 2.2, VirtualBox peut importer et exporter une
+ machine virtuelle au format standard Open Virtualization Format (OVF).</para>
+
+ <para>OVF est un standard de plateforme croisée supporté par beaucoup de
+ produits de virtualisation qui permettent de créer des machines virtuelles
+ toutes faites que vous pouvez ensuite importer dans un virtualiseur tel que
+ VirtualBox. Contrairement aux autres produits de virtualisation, VirtualBox
+ supporte maintenant l'OVF avec une interface graphique facile à utiliser ou
+ en utilisant la ligne de commande. Cela permet d'empaqueter ce qu'on appelle
+ des <emphasis role="bold">des outils virtuels</emphasis>&nbsp;: images de
+ disque avec des paramètres de configuration qui peuvent être distribués
+ facilement. De cette façon, n'importe qui peut proposer des paquets de
+ logiciel prêts à l'emploi (systèmes d'exploitation avec les applications)
+ qui n'exigent pas de configuration ou d'installation autre que l'importation
+ dans VirtualBox.<note>
+ <para>Le standard OVF est complexe, et son support dans VirtualBox est
+ une processus en perpétuelle évolution. En particulier, il n'est pas
+ garanti que VirtualBox supporte toutes les applications créées par
+ d'autres logiciels de virtualisation. Pour une liste des limites connues,
+ merci de voir le <xref linkend="KnownIssues" />.</para>
+ </note></para>
+
+ <para>Un paquet au format OVF consistera en général en plusieurs fichiers&nbsp;:<orderedlist>
+ <listitem>
+ <para>une ou plusieurs images de disque, en général au format VMDK
+ largement répandu (voir le <xref linkend="vdidetails" />) et</para>
+ </listitem>
+
+ <listitem>
+ <para>un fichier de description texte en langage XML avec une extension
+ <computeroutput>.ovf</computeroutput>.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>Ces fichiers doivent se trouver dans le même répertoire pour que
+ VirtualBox puisse les importer.</para>
+
+ <para>Une version future de VirtualBox supportera aussi les paquets qui
+ comprennent un fichier XML OVF et les images de disque enpaquetées ensemble
+ dans une seule archive.</para>
+
+ <para>Pour <emphasis role="bold">importer</emphasis> une paquet au format
+ OVF, sélectionnez <quote>Fichier</quote> -&gt; <quote>Importer une
+ application</quote> depuis la fenêtre principale de l'interface graphique de
+ VirtualBox. Ouvrez alors une boîte de dialogue de fichier et cherchez le
+ fichier texte OVF avec l'extension de fichier
+ <computeroutput>.ovf</computeroutput>.</para>
+
+ <para>Si VirtualBox interprète le fichier, une boîte de dialogue similaire à
+ celle qui suit apparaîtra &nbsp;:</para>
+
+ <para><mediaobject>
+ <imageobject>
+ <imagedata align="center" fileref="../en_US/images/ovf-import.png"
+ width="10cm" />
+ </imageobject>
+ </mediaobject>Celle-ci présente les machines virtuelles décrites dans le
+ fichier OVF et vous permet de modifier les paramètres de la machine
+ virtuelle en double-cliquant sur les options de description. Une fois que
+ vous cliquez sur <quote>Importer</quote>, VirtualBox copie les images et
+ crée les machines virtuelles locales avec les paramètres décrits dans la
+ boîte de dialogue. Celles-ci apparaîtront alors dans la liste des machines
+ virtuelles.</para>
+
+ <para>Remarquez que vu que les images de disque ont tendance à être grosses,
+ et que les images VMDK fournies avec les applications virtuelles sont en
+ général emballées dans un format compressé qui ne peut pas être utilisé
+ directement par les machines virtuelles, les images devront être d'abord
+ déballées et copiées, ce qui peut prendre quelques minutes.</para>
+
+ <para>Pour savoir comment importer une image en ligne de commande, merci de
+ voir le <xref linkend="vboxmanage-import" />.</para>
+
+ <para>Inversement, pour exporter des machines virtuelles que vous avez dans
+ VirtualBox, sélectionnez les machines et <quote>Fichier</quote> -&gt;
+ <quote>Exporter une application</quote>. Une fenêtre de dialogue différente
+ apparaît et vous permet de combiner plusieurs machines virtuelles vers une
+ application OVF. Puis, vous sélectionnez l'emplacement de la cible où les
+ fichiers OVF et VMDK devraient être stockées, et le processus de conversion
+ commence. Ceci peut également prendre du temps.</para>
+
+ <para>Pour savoir comment exporter une image en ligne de commande, merci de
+ voir le <xref linkend="vboxmanage-export" />.<note>
+ <para>OVF ne peut pas décrire les instantanés qui ont été pris pour une
+ machine virtuelle. Il en résulte que quand vous exportez une machine
+ virtuelle ayant des instantanés, seul l'état actuel de la machine sera
+ exporté et les images de disque de l'export auront un état « aplati »
+ identique à l'état actuel de la machine virtuelle.</para>
+ </note></para>
+ </sect1>
+
+ <sect1 id="frontends">
+ <title>Interfaces alternatives</title>
+
+ <para>Comme indiqué brièvement au <xref linkend="features-overview" />,
+ VirtualBox a un système de présentation interne flexible qui vous permet
+ d'utiliser différentes interfaces pour contrôler les mêmes machines virtuelles.
+ Pour l'illustrer, vous pouvez, par exemple, lancer une machine virtuelle
+ avec l'interface graphique facile à utiliser de VirtualBox puis l'arrêter
+ depuis la ligne de commande. Avec le support de VirtualBox du Remote
+ Desktop Protocol (VRDP) (protocole de bureau à distance), vous pouvez même
+ lancer des machines virtuelles à distance sur un serveur <quote>headless</quote>
+ et rediriger tous les sorties graphiques à travers le réseau.</para>
+
+ <para>En détail, les interfaces suivantes sont incluses dans le paquet
+ VirtualBox standard&nbsp;:</para>
+
+ <para><orderedlist>
+ <listitem>
+ <para><computeroutput>VirtualBox</computeroutput> est notre graphical
+ user interface (GUI) (interface graphique), à la description de
+ laquelle se consacre la plupart de ce manuel de l'utilisateur, en
+ particulier au chapitre <xref linkend="BasicConcepts" />. Bien qu'étant
+ la plus facile de nos interfaces à utiliser, elle ne couvre pas (encore)
+ toutes les fonctionnalités fournies par VirtualBox. Cela reste encore
+ la meilleure façon de connaître VirtualBox au début.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>VBoxManage</computeroutput> VBoxManage est notre
+ interface en ligne de commande pour un contrôle automatisé et très
+ détaillé de tous les aspects de VirtualBox. Il est décrit au chapitre
+ <xref linkend="vboxmanage" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>VBoxSDL</computeroutput> est une interface
+ alternative, simple et graphique avec des fonctionnalités volontairement
+ limitées, destiné uniquement à afficher des machines virtuelles
+ contrôlées dans le détail par <computeroutput>VBoxManage</computeroutput>.
+ C'est intéressant pour les environnements d'entreprise où l'affichage
+ de toutes les fioritures d'une interface graphique n'est pas
+ souhaitable. <computeroutput>VBoxSDL</computeroutput> est décrit
+ au <xref linkend="vboxsdl" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>Enfin, <computeroutput>VBoxHeadless</computeroutput> est une
+ autre interface qui ne produit aucune sortie visible sur l'hôte, mais
+ qui agit simplement comme un serveur VRDP. Maintenant, même si les
+ autres interfaces graphiques (VirtualBox et VBoxSDL) ont aussi
+ d'intégré le support de VRDP et peuvent agir comme un serveur VRDP,
+ cette interface particulière n'exige aucun support graphique. C'est
+ utile, par exemple, si vous voulez héberger vos machines virtuelles
+ sur un serveur Linux headless n'ayant pas de X Window system installé.
+ Pour des détails, voir le <xref linkend="vboxheadless" />.</para>
+ </listitem>
+ </orderedlist>Si les interfaces ci-dessus ne satisfont toujours pas vos
+ besoins particuliers, il est relativement indolore de créer une interface
+ au moteur complexe de virtualisation qui est le c&oelig;ur de VirtualBox,
+ étant donné que le c&oelig;ur de VirtualBox présente clairement toutes ses
+ fonctionnalités dans une API claire&nbsp;; merci de vous référer au <xref
+ linkend="VirtualBoxAPI" />.</para>
+ </sect1>
+</chapter>
diff --git a/doc/manual/fr_FR/user_KnownIssues.xml b/doc/manual/fr_FR/user_KnownIssues.xml
new file mode 100644
index 00000000..763a73f4
--- /dev/null
+++ b/doc/manual/fr_FR/user_KnownIssues.xml
@@ -0,0 +1,252 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+ "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<chapter id="KnownIssues">
+ <title>Known limitations</title>
+
+ <para>This sections describes known problems with VirtualBox
+ $VBOX_VERSION_STRING. Unless marked otherwise, these issues are planned to
+ be fixed in later releases.</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>The following <emphasis role="bold">Guest SMP (multiprocessor)
+ limitations</emphasis> exist:<itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">Poor performance</emphasis> with
+ 32-bit guests on AMD CPUs. This affects mainly Windows and Solaris
+ guests, but possibly also some Linux kernel revisions. Partially
+ solved in 3.0.6 for 32 bits Windows NT, 2000, XP and 2003 guests.
+ Requires 3.0.6 or higher Guest Additions to be installed.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Poor performance</emphasis> with
+ 32-bit guests on certain Intel CPU models that do not include
+ virtual APIC hardware optimization support. This affects mainly
+ Windows and Solaris guests, but possibly also some Linux kernel
+ revisions. Partially solved in 3.0.12 for 32 bits Windows NT,
+ 2000, XP and 2003 guests. Requires 3.0.12 or higher Guest
+ Additions to be installed.</para>
+ </listitem>
+
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">64-bit guests on some 32-bit host systems
+ with VT-x</emphasis> can cause instabilities to your system. If you
+ experience this, do not attempt to execute 64-bit guests. Refer to the
+ VirtualBox user forum for additional information.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Direct 3D support in Windows
+ guests.</emphasis> For this to work, the Guest Additions must be
+ installed in Windows "safe mode". Press F8 when the Windows guest is
+ booting and select "Safe mode", then install the Guest Additions.
+ Otherwise Windows' file protection mechanism will interfere with the
+ replacement DLLs installed by VirtualBox and keep restoring the original
+ Windows system DLLs.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Guest control.</emphasis> On
+ Windows guests, a process lauched via the guest control execute support is
+ only able to display a graphical user interface if the user account it is
+ started under, is currently logged in and has a desktop
+ session. Otherwise, the process will not be able to display its user
+ interface. </para>
+ <para>Also, for using accounts without or with an empty password specified,
+ the group policy needs to be changed on the guest. To do so, open the
+ group policy editor on the command line by typing
+ <computeroutput>gpedit.msc</computeroutput>, open the key
+ <emphasis>Computer Configuration\Windows Settings\Security Settings\Local Policies\Security Options</emphasis>
+ and change the value of <emphasis>Accounts: Limit local account use of blank passwords to console logon only</emphasis>
+ to <emphasis>Disabled</emphasis>.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Guest multi-monitor support.</emphasis> This
+ feature is currently only supported with Windows guests.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Deleting the only snapshot with a running VM
+ is not implemented.</emphasis> Trying to perform this operation will
+ result in an error message. This feature will be added in one of the
+ next maintenance releases. It is possible to delete the only snapshot
+ when the VM is not running, e.g. in "poweroff" or "saved" state.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Disabled host I/O caches.</emphasis>
+ Disabling the host I/O cache (see <xref linkend="iocaching" />) will
+ yield poor performance with VHD and sparse VMDK files as these do not
+ currently support asynchronous I/O. This does not apply to VDI files and
+ raw disk/partition VMDK files, which do support async I/O. This
+ restriction will be lifted in a future maintenance update.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Compacting virtual disk images is limited to
+ VDI files.</emphasis> The <code>VBoxManage modifyhd --compact</code>
+ command is currently only implemented for VDI files. At the moment the
+ only way to optimize the size of a virtual disk images in other formats
+ (VMDK, VHD) is to clone the image and then use the cloned image in the
+ VM configuration.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">OVF import/export:</emphasis><itemizedlist>
+ <listitem>
+ <para>When importing an OVF that was previously exported by
+ VirtualBox 3.2 or higher which contains a complete VirtualBox machine
+ configuration in the &lt;vbox:Machine&gt; element, some of the
+ import customizations that can be specified (in either the GUI or
+ on the VBoxManage command line) are presently ignored. In
+ particular, customizations of the imported storage configuration
+ are ignored. This will be fixed in the next release.</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF localization (multiple languages in one OVF file) is not
+ yet supported.</para>
+ </listitem>
+
+ <listitem>
+ <para>Some OVF sections like StartupSection,
+ DeploymentOptionSection and InstallSection are ignored.</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF environment documents, including their property sections
+ and appliance configuration with ISO images, are not yet
+ supported.</para>
+ </listitem>
+
+ <listitem>
+ <para>OVA archives (TAR containers) are not yet supported.</para>
+ </listitem>
+
+ <listitem>
+ <para>Remote files via HTTP or other mechanisms are not yet
+ supported.</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Seamless mode</emphasis> does not work
+ correctly with Linux guests that have 3D effects enabled (such as with
+ compiz-enabled window managers).</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Mac OS X hosts.</emphasis> The following
+ restrictions apply (all of which will be resolved in future
+ versions):<itemizedlist>
+ <listitem>
+ <para>The numlock emulation has not yet been implemented.</para>
+ </listitem>
+
+ <listitem>
+ <para>The CPU frequency metric is not supported.</para>
+ </listitem>
+
+ <listitem>
+ <para>3D OpenGL acceleration, in particular with Linux guests that
+ have 3D effects enabled (such as with compiz-enabled window
+ managers).</para>
+ </listitem>
+
+ <listitem>
+ <para>Memory ballooning is not supported.</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Mac OS X Server guests.</emphasis>
+ <itemizedlist>
+ <listitem>
+ <para>Mac OS X Server guests can only run on a certain host
+ hardware. For details about license and host hardware limitations,
+ please see <xref linkend="intro-macosxguests" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox does not provide Guest Additions for Mac OS X
+ Server at this time.</para>
+ </listitem>
+
+ <listitem>
+ <para>The graphics resolution currently defaults to 1024x768 as
+ Mac OS X Server falls back to the built-in EFI display support.
+ See <xref linkend="efividmode" /> for more information on how to
+ change EFI video modes.</para>
+ </listitem>
+
+ <listitem>
+ <para>Even when idle, Mac OS X Server guests currently burn 100%
+ CPU. This is a power management issue that will be addressed in a
+ future release.</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X Server guests only work with one CPU assigned to
+ the VM. Support for SMP will be provided in a future
+ release.</para>
+ </listitem>
+
+ <listitem>
+ <para>Depending on your system and version of Mac OS X Server, you
+ might experience guest hangs after some time. This can be fixed by
+ turning off energy saving (set timeout to "Never") in the system
+ preferences.</para>
+ </listitem>
+
+ <listitem>
+ <para>By default, the VirtualBox EFI enables debug output of the
+ Mac OS X Server kernel to help you diagnose boot problems. Note
+ that there is a lot of output and not all errors are fatal (they
+ would also show on your physical Mac). You can turn off these
+ messages by issuing this command:<screen>VBoxManage setextradata "VM name" "VBoxInternal2/EfiBootArgs" " "</screen>To
+ revert to the previous behavior, use:<screen>VBoxManage setextradata "VM name" "VBoxInternal2/EfiBootArgs" ""</screen></para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Solaris hosts.</emphasis> The following
+ restrictions apply for OpenSolaris and Solaris 10:<itemizedlist>
+ <listitem>
+ <para>There is no support for USB devices connected to Solaris 10 hosts.</para>
+ </listitem>
+
+ <listitem>
+ <para>USB support on OpenSolaris hosts requires version snv_124 or
+ higher. Webcams and other isochronous devices are known to have
+ poor performance.</para>
+ </listitem>
+
+ <listitem>
+ <para>No ACPI information (battery status, power source) is
+ reported to the guest.</para>
+ </listitem>
+
+ <listitem>
+ <para>No support for using wireless adapters with bridged
+ networking.</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Guest Additions for OS/2.</emphasis> Shared
+ folders are not yet supported with OS/2 guests. In addition, seamless
+ windows and automatic guest resizing will probably never be implemented
+ due to inherent limitations of the OS/2 graphics system.</para>
+ </listitem>
+ </itemizedlist>
+</chapter>
diff --git a/doc/manual/fr_FR/user_Networking.xml b/doc/manual/fr_FR/user_Networking.xml
new file mode 100644
index 00000000..ed7844f4
--- /dev/null
+++ b/doc/manual/fr_FR/user_Networking.xml
@@ -0,0 +1,797 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+ "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<chapter id="networkingdetails">
+ <title>Réseau virtuel</title>
+
+ <para>Comme il a été brièvement indiqué au <xref linkend="settings-network" />,
+ VirtualBox fournit huit cartes Ethernet PCI virtuelles pour chaque machine
+ virtuelle. Pour chacune de ces cartes, vous pouvez sélectionner individuellement<orderedlist>
+ <listitem>
+ <para>1. le matériel qui sera virtualisé ou</para>
+ </listitem>
+
+ <listitem>
+ <para>2. le mode de virtualisation avec lequel la carte virtuelle agira
+ par rapport à votre matériel réseau physique sur l'hôte.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>Quatre des cartes réseau peuvent être configurées dans la section «
+ Réseau » des paramètres de la boîte de dialogue dans l'interface graphique de
+ VirtualBox. Vous pouvez configurer les huit cartes réseau en ligne de commande
+ avec VBoxManage modifyvm ; voir <xref linkend="vboxmanage-modifyvm" />.</para>
+
+ <para>Ce chapitre explique les divers paramètres réseau avec plus détails.</para>
+
+ <sect1 id="nichardware">
+ <title>Matériel de réseau virtuel</title>
+
+ <para>Pour chaque carte, vous pouvez sélectionner individuellement le type
+ de <emphasis>matériel</emphasis> qui sera présenté à la machine virtuelle.
+ VirtualBox peut virtualiser les six types de matériels de carte suivants :<itemizedlist>
+ <listitem>
+ <para>AMD PCNet PCI II (Am79C970A);</para>
+ </listitem>
+
+ <listitem>
+ <para>AMD PCNet FAST III (Am79C973, celle par défaut) ;</para>
+ </listitem>
+
+ <listitem>
+ <para>Intel PRO/1000 MT Desktop (82540EM);</para>
+ </listitem>
+
+ <listitem>
+ <para>Intel PRO/1000 T Server (82543GC);</para>
+ </listitem>
+
+ <listitem>
+ <para>Intel PRO/1000 MT Server (82545EM);</para>
+ </listitem>
+
+ <listitem>
+ <para>Paravirtualized network adapter (virtio-net).</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>La PCNet FAST III est celle par défaut parce qu'elle est supportée par
+ presque tous les systèmes d'exploitation d'ordinateur et le gestionnaire de
+ démarrage GNU GRUB. Sauf que les adaptateurs de la famille Intel PRO/1000
+ sont choisis pour certains types de système d'exploitation invités qui
+ n'incluent plus les pilotes de la carte PCNet, tels que Windows Vista.</para>
+
+ <para>Celle de type Intel PRO/1000 MT Desktop fonctionne avec Windows Vista
+ et les versions supérieures. La variante Server T de la carte Intel PRO/1000
+ est reconnue par les invités Windows XP sans l'installation de pilotes
+ supplémentaires. La variante Server T facilite les importations OVF à partir
+ d'autres plateformes.</para>
+
+ <para>L'<emphasis role="bold">« adaptateur réseau para-virtualisé
+ (virtio-net »</emphasis> est spécial. Si vous le sélectionnez, VirtualBox
+ <emphasis>ne virtualise pas</emphasis> du matériel réseau classique (qui est
+ supporté par les systèmes d'exploitation habituels hors du PC). VirtualBox
+ s'attend par contre à ce qu'une interface logicielle spéciale pour les
+ environnements virtualisés soient fournies par l'invité, évitant ainsi la
+ complexité d'émuler du matériel réseau et améliorant la performance réseau.
+ À partir de la version 3.1, VirtualBox fournit le support des pilotes de
+ réseau « virtio » industriels, qui font partie du projet libre KVM.</para>
+
+ <para>Les pilotes de réseau « virtio » sont disponibles pour les systèmes d'exploitation invités
+ suivants :</para>
+
+ <para><itemizedlist>
+ <listitem>
+ <para>Les noyaux Linux version 2.6.25 ou supérieur peuvent être
+ configurés pour fournir le support de virtio ; certaines distributions
+ ont aussi porté virtio dans des noyaux plus anciens.</para>
+ </listitem>
+
+ <listitem>
+ <para>Pour Windows 2000, XP et Vista, les pilotes virtio peuvent être
+ téléchargés et installés à partir de la page Internet du projet KVM.<footnote>
+ <para><ulink
+ url="http://www.linux-kvm.org/page/WindowsGuestDrivers">http://www.linux-kvm.org/page/WindowsGuestDrivers</ulink>.</para>
+ </footnote></para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>VirtualBox a aussi un support pour les <emphasis role="bold">cadres
+ appelés jumbo</emphasis>, par exemple
+ les paquets réseaux avec plus de 1500 bytes de données fournies pour que
+ vous utilisiez la virtualisation de la carte réseau Intel et le réseau
+ bridgé. En d'autres termes, les cadres jumbo ne sont pas supportés avec les
+ périphériques réseau AMD ; dans ces cas les paquets jumbo seront refusés
+ sans message à la fois dans la direction de la transmission et de la
+ réception. Les systèmes d'exploitation invités qui essaient d'utiliser
+ cette fonctionnalité verront cela comme une perte de paquets, ce qui peut
+ provoquer un comportement inattendu de certaines applications dans l'invité.
+ Cela n'entraîne pas de problèmes avec des systèmes d'exploitation invités
+ dans leur configuration par défaut, vu que les cadres jumbo doivent être
+ explicitement activés.</para>
+ </sect1>
+
+ <sect1 id="networkingmodes">
+ <title>Introduction aux modes réseaux</title>
+
+ <para>Chacun des huit adaptateurs réseau peut être configuré séparément pour
+ agir dans l'un des cinq modes suivants :<glosslist>
+ <glossentry>
+ <glossterm>Non attaché</glossterm>
+
+ <glossdef>
+ <para>Dans ce mode, VirtualBox indique à l'invité qu'une carte
+ réseau est présente mais qu'il n'y a pas de connexion -- comme si
+ aucun câble Ethernet n'était branché sur la carte. - De cette façon,
+ il est possible de « débrancher » le câble Ethernet virtuel et de
+ couper la connexion, ce qui peut être utile pour informer un système
+ d'exploitation invité qu'aucune connexion réseau n'est disponible et
+ l'obliger à une reconfiguration.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Network Address Translation (NAT)</glossterm> (traduction
+ d'adresse réseau)
+
+ <glossdef>
+ <para>Si tout ce que vous voulez faire est de naviguer sur Internet,
+ télécharger des fichiers et lire les messages à l'intérieur de
+ l'invité, ce mode par défaut devrait vous suffire et vous pouvez
+ sauter en toute sécurité le reste de cette section. Merci de
+ remarquer qu'il y a certaines limitations quand on utilise le partage
+ de fichiers Windows (voir le <xref linkend="nat-limitations" /> pour
+ des détails).</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Réseau bridgé</glossterm>
+
+ <glossdef>
+ <para>C'est pour des besoins réseau plus avancés tels que des
+ simulations de réseau et le fonctionnement de serveurs dans un
+ invité. Lorsqu'il est activé, VirtualBox se connecte à une de vos
+ cartes réseaux installées et échange directement des paquets réseaux,
+ contournant la pile réseau de votre système d'exploitation hôte.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Réseau interne</glossterm>
+
+ <glossdef>
+ <para>Ceci peut être utilisé pour créer un genre différent de réseau
+ de type logiciel, visible par les machines virtuelles sélectionnées
+ mais pas pour les applications en fonction sur l'hôte ou dans le
+ monde extérieur.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Réseau privé-hôte</glossterm>
+
+ <glossdef>
+ <para>Ceci peut être utilisé pour créer un réseau contenant l'hôte
+ et un ensemble de machines virtuelles, sans qu'il y ait besoin de
+ l'interface physique de l'hôte. À la place, une interface réseau
+ virtuelle (comme une interface loopback) est créée sur l'hôte,
+ fournissant la connectivité parmi les machines virtuelles et l'hôte.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Réseau générique</glossterm>
+
+ <glossdef>
+ <para>Les modes rarement utilisés partagent la même interface réseau
+ générique mais ils permettent à l'utilisateur de sélectionner un
+ pilote qui peut être inclu dans VirtualBox ou distribué dans un
+ pack d'extension.</para>
+ <para>Pour l'heure, il y a deux sous-modes disponibles :</para>
+ <para>
+ <glosslist>
+ <glossentry>
+ <glossterm>Tunnel UDP</glossterm>
+ <glossdef>
+ <para>On peut l'utiliser pour connecter directement des
+ machines virtuelles en fonction sur des hôtes différents,
+ facilement et de manière transparente, via une infrastructure
+ réseau existante.</para>
+ </glossdef>
+ </glossentry>
+ <glossentry>
+ <glossterm>Réseau VDE (Virtual Distributed Ethernet)</glossterm>
+ <glossdef>
+ <para>Cette option peut être utilisée pour se connecter à
+ un switch Virtual Distributed Ethernet (Ethernet distribué
+ virtuel) d'un hôte Linux ou FreeBSD. Pour l'instant, il
+ implique de compiler VirtualBox à partir des sources, car les
+ paquets d'Oracle ne l'incluent pas.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist>
+ </para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+
+ <para>Les sections suivantes décrivent les modes de réseau disponibles avec
+ plus de détails.</para>
+ </sect1>
+
+ <sect1 id="network_nat">
+ <title>Network Address Translation (NAT)</title>
+
+ <para>La traduction d'adresses réseaux (NAT) est la façon la plus simple
+ d'accéder à un réseau externe depuis une machine virtuelle. Habituellement,
+ cela ne demande aucune configuration sur le réseau hôte et le système invité.
+ Pour cette raison, c'est le mode réseau par défaut de VirtualBox.</para>
+
+ <para>Une machine virtuelle où le NAT est activé agit comme un vrai
+ ordinateur qui se connecte à Internet à travers un routeur. Le « routeur »,
+ dans ce cas, est le moteur réseau de VirtualBox qui dresse le plan du
+ trafic venant et à destination de la machine virtuelle de façon intégréte.
+ L'inconvénient du mode NAT est que, tout comme se comporte un réseau privé
+ derrière un routeur, la machine virtuelle est invisible et injoignable à
+ partir et à l'extérieur sur Internet ; vous ne pouvez pas lancer de serveur
+ de cette façon sauf si vous réglez le forwarding (routage) de ports (décrit
+ ci-dessous).</para>
+
+ <para>Les trames réseau envoyés par le système d'exploitation invité sont
+ reçus par le moteur NAT de VirtualBox, qui extrait les données TCP/IP et les
+ réexpédie en utilisant le système d'exploitation de l'hôte. Sur une
+ application de l'hôte ou sur un autre ordinateur du même réseau que l'hôte,
+ on a l'impression que les données ont été envoyées par l'application
+ VirtualBox sur l'hôte, en utilisant une adresse IP appartenant à l'hôte.
+ VirtualBox écoute les réponses aux paquets envoyés, puis les réemballe et les
+ renvoie sur la machine invitée sur son réseau privé.</para>
+
+ <para>La machine virtuelle reçoit son adresse réseau et sa configuration sur
+ le réseau privé à partir d'un serveur DHCP intégré dans VirtualBox. L'adresse
+ IP ainsi assignée à la machine virtuelle est en général sur un réseau
+ complètement différent de l'hôte. Comme plus d'une carte d'une machine
+ virtuelle peut être paramétrée pour utiliser NAT, la première carte est
+ connectée au réseau privé 10.0.2.0, la deuxième au réseau 10.0.3.0 et ainsi
+ de suite. Si vous devez modifier la plage d'IP assignées à l'hôte pour une
+ raison quelconque, merci de vous reporter au <xref linkend="changenat" />.</para>
+
+ <sect2 id="natforward">
+ <title>Configurer la redirection de ports avec NAT</title>
+
+ <para>Comme la machine virtuelle est connectée à un réseau privé interne à
+ VirtualBox et qu'il est invisible pour l'hôte, les services réseau de
+ l'invité ne sont pas accessibles pour la machine hôte ou pour d'autres
+ ordinateurs du même réseau. Néanmoins, comme un routeur physique,
+ VirtualBox peut effectuer un <emphasis role="bold">transfert de ports</emphasis>
+ sélectionné. Cela signifie que VirtualBox écoute certains ports sur
+ l'hôte et renvoie tous les paquets qui y arrivent vers l'invité, sur un
+ port identique ou différent.</para>
+
+ <para>Pour une application de l'hôte ou d'autres machines physiques (ou
+ virtuelles) du réseau, c'est comme si le service derrière le proxy
+ fonctionnait finalement sur l'hôte. Cela signifie aussi que vous ne pouvez
+ pas exécuter le même service sur les mêmes ports que sur l'hôte. Néanmoins,
+ vous en tirez les avantages de l'exécution d'un service dans une machine
+ virtuelle : par exemple les services de la machine hôte ou d'autres
+ machines virtuelles ne peuvent pas être compromis ou plantés par une
+ vulnérabilité ou un bogue du service, et le service peut s'exécuter sur un
+ système d'exploitation différent du système hôte.</para>
+
+ <para>Vous pouvez paramétrer un service invité que vous souhaitez mettre
+ derrière un proxy en utilisant l'outil en ligne de commande
+ <computeroutput>VBoxManage</computeroutput> ; pour des détails, merci de
+ vous référer au <xref linkend="vboxmanage-modifyvm" />.</para>
+
+ <para>Vous devrez savoir quels ports sur l'invité le service utilise et
+ décider quels ports utiliser sur l'hôte (vous voudrez souvent, mais pas
+ toujours, utiliser les mêmes ports sur l'invité et sur l'hôte). Vous pouvez
+ utiliser n'importe quel port de l'hôte qui n'est pas déjà utilisé par un
+ service. Par exemple, pour paramétrer des connexions entrantes NAT vers un
+ serveur <computeroutput>ssh</computeroutput> de l'invité, utilisez la
+ commande suivante : <screen>VBoxManage modifyvm "nom VM" --natpf1 "guestssh,tcp,,2222,,22"</screen>Avec
+ l'exemple ci-dessus, tout le trafic <computeroutput>tcp</computeroutput>
+ arrivant sur le port 2222 sur n'importe quelle interface de l'hôte sera
+ transféré sur le port 22 dans l'invité. Le nom du protocole <computeroutput>tcp</computeroutput>
+ est un attribut obligatoire définissant quel protocole devrait être utilisé
+ pour la redirection (on pourrait aussi utiliser (<computeroutput>udp</computeroutput>).
+ Le nom <computeroutput>guestssh</computeroutput> est purement descriptif
+ et sera généré automatiquement si vous n'en spécifiez
+ pas. Le numéro après <computeroutput>--natpf</computeroutput> nomme la
+ carte réseau, comme dans d'autres
+ paramétrages de VboxManage.</para>
+
+ <para>Pour supprimer à nouveau cette règle de redirection, utilisez la commande suivante :
+ <screen>VBoxManage modifyvm "nom VM" --natpf1 delete "guestssh"</screen></para>
+
+ <para>Si pour une raison quelconque l'invité utilise une adresse IP
+ statique non attribuée par le serveur DHCP intégré, il faut spécifier l'IP
+ de l'invité lors de l'enregistrement de la règle de redirection : <screen>VBoxManage modifyvm "nom VM" --natpf1
+ "guestssh,tcp,,2222,10.0.2.19,22"</screen>Cet exemple est identique au
+ précédent, sauf qu'on dira au moteur NAT qu'on peut trouver l'invité sur
+ l'adresse 10.0.2.19.</para>
+
+ <para>Pour rediriger <emphasis>tout</emphasis> le trafic entrant d'une
+ interface spécifique de l'hôte vers l'invité, spécifiez l'IP de cette
+ interface hôte comme ceci :<screen>VBoxManage modifyvm "nom VM" --natpf1 "guestssh,tcp,127.0.0.1,2222,,22"</screen>Ceci
+ redirige tout le trafic TCP arrivant sur l'interface localhost (127.0.0.1)
+ via le port 2222 vers le port 22 de l'invité.</para>
+
+ <para>Il n'est pas possible de configurer des connexions NAT entrantes
+ pendant que la VM est en fonction. Néanmoins, vous pouvez modifier les
+ paramètres d'une VM actuellement sauvegardée (ou éteinte) dans un
+ instantané.</para>
+ </sect2>
+
+ <sect2 id="nat-tftp">
+ <title>Amorçage PXE avec NAT</title>
+
+ <para>L'amorçage PXE est à présent supporté par le mode NAT. Le serveur
+ DHCP NAT fournit un fichier d'amorçage nommé sous la forme
+ <computeroutput>nomvm.pxe</computeroutput> si le répertoire
+ <computeroutput>TFTP</computeroutput> existe dans le répertoire où est
+ conservé le fichier <computeroutput>VirtualBox.xml</computeroutput> de
+ l'utilisateur. C'est à l'utilisateur de fournir
+ <computeroutput>nomvm.pxe</computeroutput>.</para>
+ </sect2>
+
+ <sect2 id="nat-limitations">
+ <title>Limites du NAT</title>
+
+ <para>Il existe quatre <emphasis role="bold">limites</emphasis> du mode
+ NAT dont l'utilisateur devrait être conscient :</para>
+
+ <glosslist>
+ <glossentry>
+ <glossterm>Limite du protocole ICMP :</glossterm>
+
+ <glossdef>
+ <para>Certains outils de débogage réseau fréquemment utilisés (tels
+ que <computeroutput>ping</computeroutput> ou tracerouting) utilisent
+ le protocole ICMP pour envoyer/recevoir des messages. Si le support
+ d'ICMP a été amélioré avec VirtualBox 2.1 (<computeroutput>ping</computeroutput>
+ devrait maintenant fonctionner), il se peut que d'autres outils ne
+ fonctionnent pas de façon fiable.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>La réception de broadcasts (diffusion de messages) UDP n'est pas fiable :</glossterm>
+
+ <glossdef>
+ <para>L'invité ne reçoit pas de façon fiable les broadcasts puisque, pour économiser des ressources, il n'écoute qu'un certain temps après que l'invité ait envoyé des données UDP sur un port particulier. Par conséquent, la résolution de nom NetBios basée sur les broadcasts ne fonctionne pas toujours (mais WINS fonctionne toujours). Vous pouvez utiliser, en contournement, l'IP numérique du serveur désiré noté
+ <computeroutput>\\server\share</computeroutput>.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Les protocoles tels que GRE ne sont pas supportés :</glossterm>
+
+ <glossdef>
+ <para>Les protocoles autres que TCP et UDP ne sont pas supportés.
+ Cela signifie que certains produits VPN (par exemple PPTP de
+ Microsoft) ne peuvent pas être utilisés. Il y a d'autres produits
+ VPN qui utilisent simplement TCP ou UDP.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Redirection des ports de l'hôte &lt; 1024 impossible :</glossterm>
+
+ <glossdef>
+ <para>Sur les hôtes basés sur Unix (comme Linux, Solaris, Mac OS X)
+ il n'est pas possible de solliciter des ports inférieurs à 1024
+ depuis des applications non lancées par <computeroutput>root</computeroutput>.
+ Il en résulte que si vous essayez de configurer une telle redirection
+ de ports, la VM refusera de démarrer.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist>
+
+ <para>Ces limitations ne devraient normalement pas perturber l'utilisation
+ standard du réseau. Mais la présence du NAT a aussi des effets subtils qui
+ peuvent interagir avec des protocoles qui, normalement, fonctionnent. NFS
+ est un exemple où le serveur est souvent configuré pour refuser les
+ connexions provenant de ports non privilégiés (c'est-à-dire des ports non
+ inférieurs à 1024).</para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title id="network_bridged">Réseau bridgé</title>
+
+ <para>Avec le réseau bridgé, VirtualBox utilise un pilote de périphérique de
+ votre système <emphasis>hôte</emphasis> qui filtre les données depuis
+ l'adaptateur de votre réseau physique. Ce pilote est donc appelé un pilote
+ « net filter » (filtre de réseau). Ceci permet à VirtualBox d'intercepter
+ des données du réseau physique et d'injecter des données dedans, créant de
+ fait une nouvelle interface réseau logicielle. Quand un invité utilise une
+ telle nouvelle interface logicielle, le système hôte voit l'invité comme si
+ il était physiquement connectés à l'interface par un câble réseau : l'hôte
+ peut envoyer des données à l'invité par cette interface et reçoit des données
+ à partir d'elle. Cela signifie que vous pouvez régler un routage ou un pont
+ entre l'invité et le reste de votre réseau.</para>
+
+ <para>Pour que cela fonctionne, VirtualBox a besoin d'un pilote de
+ périphérique sur votre système hôte. La façon dont fonctionne le réseau
+ bridgé a été entièrement réécrite avec VirtualBox 2.0 et 2.1, selon le
+ système d'exploitation hôte.<footnote>
+ <para>Pour les hôtes Mac OS X et Solaris, les pilotes net filter étaient
+ déjà ajoutés à VirtualBox 2.0 (en tant que support dès le départ pour
+ Host Interface Networking (réseau par interface hôte) sur ces plateformes).
+ Avec VirtualBox 2.1, les pilotes net filter ont également été ajoutés
+ pour les hôtes Windows et Linux, en remplaçant les mécanismes présents
+ auparavant dans VirtualBox pour ces plateformes ; surtout sur Linux, la
+ méthode plus récente sous Linux exigeait de créer des interfaces et
+ des ponts (bridge) TAP, ce qui était complexe et ce qui changeait d'une
+
+ distribution à l'autre. Rien de tout cela n'est nécessaire aujourd'hui.
+ Le réseau bridgé s'appelait avant « Host Interface Networking » (réseau
+ avec interface de l'hôte), et il a été renommé dans la version 2.2 sans
+ modification de son fonctionnement.</para>
+ </footnote></para>
+
+ <para><note>
+ <para>Même si TAP n'est plus nécessaire sur Linux avec le réseau bridgé,
+ vous <emphasis>pouvez</emphasis> toujours utiliser des interfaces TAP
+ pour certains réglages avancés, puisque vous pouvez connecter une VM à
+ n'importe quelle interface hôte -- ce qui pourrait aussi être une
+ interface TAP.</para>
+ </note>Pour activer le réseau bridgé, tout ce que vous avez besoin de
+ faire est d'ouvrir la boîte de dialogue Paramètres de la fenêtre d'une
+ machine virtuelle, aller sur la page « Réseau » et sélectionner « Réseau
+ bridgé » dans la liste déroulante du champ « Attaché à ». Enfin,
+ sélectionnez l'interface hôte désirée depuis la liste au bas de la page,
+ qui contient les interfaces réseau physiques de vos systèmes. Sur un
+ MacBook typique, par exemple, cela vous permettra de choisir entre « en1:
+ AirPort » (qui est l'interface tans fil) et « en0: Ethernet », qui
+ représente l'interface avec un câble réseau.</para>
+
+ <para>En fonction de votre système d'exploitation hôte, vous devriez garder
+ à l'esprit les limites suivantes :<itemizedlist>
+ <listitem>
+ <para>Sur des hôtes <emphasis role="bold">Macintosh</emphasis>, la
+ fonctionnalité est limitée quand on utilise AirPort (le réseau sans
+ fil de Mac) pour le réseau bridgé. Actuellement, VirtualBox ne supporte
+ que l'IPv4 via AirPort. Pour d'autres protocoles tels qu'IPv6 et IPX,
+ vous devez choisir une interface filaire.</para>
+ </listitem>
+
+ <listitem>
+ <para>Sur les hôtes <emphasis role="bold">Linux</emphasis>, la
+ fonctionnalité est limitée lors de l'utilisation d'interfaces sans
+ fil pour le réseau bridgé. VirtualBox ne supporte actuellement que
+ l'IPv4 via le sans fil. Pour les autres protocoles tels que IPv6 et
+ IPX, vous devez choisir une interface filaire.</para>
+
+ <para>En outre, régler le MTU à moins de 1500 bytes sur les interfaces
+ filaires fournies par le pilote sky2 sur la Marvell Yukon II EC Ultra
+ Ethernet NIC est connu pour entraîner des pertes de paquets dans
+ certaines conditions.</para>
+ </listitem>
+
+ <listitem>
+ <para>Sur les hôtes <emphasis role="bold">Solaris</emphasis>, il n'y
+ a pas de support pour utiliser les interfaces sans fil. Le filtrage du
+ trafic invité en utilisant IPFilter n'est pas non plus totalement
+ supporté du fait de restrictions techniques du sous-système de réseau
+ de Solaris 11.</para>
+
+ <para>Avec VirtualBox 2.0.4 et supérieur, il est possible d'utiliser
+ des interfaces réseaux virtuelles Crossbow (Crossbow Virtual Network
+ Interfaces, VNICs) avec le réseau bridgé, mais avec les précautions
+ suivantes :</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Vous ne pouvez pas partager un VNIC entre plusieurs interfaces
+ réseau virtuelles, ainsi chaque interface réseau invité doit avoir
+ son propre VNIC.</para>
+ </listitem>
+
+ <listitem>
+ <para>La VNIC et l'interface réseau de l'invité qui utilise le VNIC
+ doivent se voir assigner des adresses MAC.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Lors de l'utilisation des interfaces VLAN avec VirtualBox, elles
+ doivent être nommées selon le schéma de nommage du hack PPA (comme
+ "e1000g513001"), car sinon, il se peut que l'invité reçoive des paquets
+ sous un format inattendu.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect1>
+
+ <sect1 id="network_internal">
+ <title>Réseau interne</title>
+
+ <para>Le réseau interne est similaire au réseau bridgé dans le sens où la
+ VM peut communiquer directement avec le monde extérieur. Cependant le
+ « monde extérieur » est limité aux autres VMs qui se connectent au même
+ réseau interne.</para>
+
+ <para>Même si techniquement, tout ce que vous pouvez faire en utilisant le
+ réseau interne est aussi faisable en utilisant le réseau bridgé, il y a des
+ avantages en matière de sécurité à utiliser le réseau interne. En mode
+ réseau bridgé, tout le trafic passe par une interface physique du système
+ hôte. Il est donc possible d'attacher un détecteur de paquets (tel que
+ Wireshark) à l'interface hôte et d'enregistrer tout le trafic qui passe par
+ lui. Si, pour une raison quelconque, vous préférez que deux ou davantage de
+ VMs de la même machine communiquent de façon privée, tout en cachant leurs
+ données à la fois au système hôte et à et à l'utilisateur, le réseau bridgé
+ n'est donc pas une option.</para>
+
+ <para>Les réseaux internes sont créés automatiquement selon les besoins,
+ ainsi il n'y a pas de configuration centrale. Chaque réseau interne est
+ simplement identifié par son nom. Une fois qu'il y a plus d'une carte réseau
+ virtuelle active avec le même ID de réseau interne, le pilote de support de
+ VirtualBox va automatiquement « brancher » les cartes et agir comme un
+ switch réseau. Le pilote du support de VirtualBox implémente une switch
+ Ethernet complet et supporte à la fois les trames broadcast/multicast et le
+ mode promiscuité.</para>
+
+ <para>Afin d'attacher la carte réseau d'une machine virtuelle à un réseau
+ interne, réglez son mode réseau sur « réseau interne ». Il y a deux façons
+ d'accomplir cela :</para>
+
+ <para><itemizedlist>
+ <listitem>
+ <para>Vous pouvez utiliser la boîte de dialogue « Paramètres » de la
+ VM dans l'interface graphique. Dans la catégorie « Réseau » de la
+ boîte de dialogue des paramètres, sélectionnez « Réseau interne » dans
+ la liste déroulante des modes réseau. Maintenant, sélectionnez le nom
+ d'un réseau interne existant depuis le menu déroulant en-dessous ou
+ entrez un nouveau nom dans le champ d'édition.</para>
+ </listitem>
+
+ <listitem>
+ <para>Vous pouvez utiliser <screen>VBoxManage modifyvm "nom VM" --nic&lt;x&gt; intnet</screen>
+ Vous pouvez éventuellement spécifier un nom de réseau avec la commande
+ <screen>VBoxManage modifyvm "nom VM" --intnet&lt;x&gt; "network name"</screen>
+ Si vous ne spécifiez pas de nom de réseau, la carte réseau sera
+ attachée au réseau <computeroutput>intnet</computeroutput> par défaut.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>Sauf si vous configurez les cartes réseau (virtuelles) des systèmes
+ d'exploitation invités qui participent au réseau interne pour utiliser des
+ adresses IP statiques, il se peut que vous vouliez utiliser le serveur DHCP
+ construit dans VirtualBox pour gérer les adresses IP pour le réseau interne.
+ Merci de voir le <xref linkend="vboxmanage-dhcpserver" /> pour des détails.</para>
+
+ <para>Par mesure de sécurité, l'implémentation Linux du réseau interne
+ n'autorise que les VMs en fonction sous le même ID utilisateur à établir un
+ réseau interne.</para>
+ </sect1>
+
+ <sect1 id="network_hostonly">
+ <title>Réseau privé avec l'hôte (Host-only)</title>
+
+ <para>Le réseau privé avec l'hôte est un autre mode réseau qui a été ajouté
+ avec la version 2.2 de VirtualBox. On peut le concevoir comme un hybride
+ entre les modes réseau bridgé et interne : comme avec le réseau bridgé, les
+ machines virtuelles peuvent se parler entre elles et avec l'hôte comme si
+ elles étaient connectées sur un switch ethernet physique. De la même façon,
+ comme avec le réseau interne cependant, il n'est pas besoin qu'une interface
+ réseau physique soit présente et les machines virtuelles ne peuvent pas
+ parler au monde extérieur à l'hôte puisqu'elles ne sont pas connectées à une
+ interface réseau physique.</para>
+
+ <para>Quand on utilise le réseau privé avec l'hôte, VirtualBox crée à la
+ place une nouvelle interface logicielle sur l'hôte qui apparaît ensuite à
+ côté de vos interfaces réseau existantes. En d'autres termes, alors qu'avec
+ un réseau bridgé, on utilise une interface réseau existante pour y attacher
+ les machines virtuelles, avec le mode hôte privé on crée une nouvelle
+ interface « loopback » sur l'hôte. Et alors qu'avec le réseau interne, on ne
+ peut pas voir le trafic entre les machines virtuelles, on peut intercepter
+ le trafic sur l'interface « loopback » de l'hôte.</para>
+
+ <para>Le réseau avec hôte privé est particulièrement utile pour les
+ applications virtuelles pré-configurées, où plusieurs machines virtuelles
+ sont emballées ensembles et destinées à coopérer. Par exemple, il se peut
+ qu'une machine virtuelle contienne un serveur Web et la seconde une base de
+ données, et puisqu'elles sont prévues pour se parler, l'application peut
+ demander à VirtualBox de régler un réseau avec hôte privé pour les deux. Un
+ second réseau (bridgé) connecterait alors le serveur Web au monde extérieur
+ pour donner accès aux données, mais le monde extérieur ne peut pas se connecter à la base de données.</para>
+
+ <para>Pour passer l'interface réseau de la machine virtuelle en mode « avec
+ hôte privé » :<itemizedlist>
+ <listitem>
+ <para>soit allez sur la page « réseau » dans les paramètres de la
+ machine virtuelle dans l'interface graphique et sélectionnez « Hôte
+ privé » ou</para>
+ </listitem>
+
+ <listitem>
+ <para>en ligne de commande, tapez
+ <computeroutput>VBoxManage modifyvm "nom VM" --nic&lt;x&gt; hostonly</computeroutput> ;
+ voir le <xref linkend="vboxmanage-modifyvm" /> pour les détails.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>Pour le réseau privé avec hôte, comme avec le réseau interne, il se
+ peut que vous trouviez le serveur DHCP construit dans VirtualBox utile. On
+ peut l'activer puis gérer les adresses IP dynamiques dans le réseau avec
+ hôte privé puisque sinon vous devriez configurer toutes les adresses IP de
+ manière statique.<itemizedlist>
+ <listitem>
+ <para>Dans l'interface graphique de VirtualBox, vous pouvez configurer
+ toutes ces options dans les paramètres globaux avec « Fichier »
+ -&gt; « Paramètres » -&gt; « Réseau », qui liste tous les réseaux avec
+ hôte privé présentement utilisés. Cliquez sur un nom de réseau puis
+ sur le bouton « Éditer » à droite et vous pouvez modifier les paramètres
+ de l'adaptateur et du DHCP.</para>
+ </listitem>
+
+ <listitem>
+ <para>Alternativement, vous pouvez utiliser <computeroutput>VBoxManage
+ dhcpserver</computeroutput> en ligne de commande ; voir le <xref
+ linkend="vboxmanage-dhcpserver" /> pour des détails.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect1>
+
+ <sect1 id="network_udp_tunnel">
+ <title>Réseau par tunnel UDP</title>
+
+ <para>Ce mode réseau permet de connecter entre elles des machines virtuelles
+ en fonction sur plusieurs hôtes.
+ </para>
+
+ <para>Techniquement, cela se fait en encapsulant des cadres (frames) Ethernet
+ envoyés ou reçus par la carte réseau invitée dans un chiffreur de données
+ (data datagrams) UDP/IP, et en les envoyant à l'hôte à travers un réseau
+ disponible.
+ </para>
+
+ <para>Le mode Tunnel UDP prend trois paramètres :<glosslist>
+ <glossentry>
+ <glossterm>port UDP source</glossterm>
+
+ <glossdef>
+ <para>Le port sur lequel écoute l'hôte. Les déchiffreurs de données
+ arrivant sur ce port issus de n'importe quelle adresse source seront
+ redirigés vers la partie réceptrice d'une carte réseau invitée.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>adresse de destination</glossterm>
+
+ <glossdef>
+ <para>L'adresse IP de l'hôte cible des données transmises.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Port UDP de destination</glossterm>
+
+ <glossdef>
+ <para>Numéro de port vers lequel sont envoyées les données transmises.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+
+ <para>Lorsqu'on connecte deux machines virtuelles sur deux hôtes différents,
+ leurs adresses IP doivent être échangées. Sur un hôte unique, les ports
+ sources et de destination doivent être échangés.</para>
+
+ <para>Dans l'exemple suivant, l'hôte 1 utilise l'adresse IP 10.0.0.1 et
+ l'hôte 2 utilise l'adresse IP 10.0.0.2. Configuration en ligne de commande :<screen> VBoxManage modifyvm "VM 01 on host 1" --nic&lt;x&gt; generic
+ VBoxManage modifyvm "VM 01 on host 1" --nicgenericdrv&lt;x&gt; UDPTunnel
+ VBoxManage modifyvm "VM 01 on host 1" --nicproperty&lt;x&gt; dest=10.0.0.2
+ VBoxManage modifyvm "VM 01 on host 1" --nicproperty&lt;x&gt; sport=10001
+ VBoxManage modifyvm "VM 01 on host 1" --nicproperty&lt;x&gt; dport=10002</screen>
+ et <screen> VBoxManage modifyvm "VM 02 on host 2" --nic&lt;y&gt; generic
+ VBoxManage modifyvm "VM 02 on host 2" --nicgenericdrv&lt;y&gt; UDPTunnel
+ VBoxManage modifyvm "VM 02 on host 2" --nicproperty&lt;y&gt; dest=10.0.0.1
+ VBoxManage modifyvm "VM 02 on host 2" --nicproperty&lt;y&gt; sport=10002
+ VBoxManage modifyvm "VM 02 on host 2" --nicproperty&lt;y&gt; dport=10001</screen>
+ </para>
+
+ <para>Bien entendu, vous pouvez connecter deux machines virtuelles sur le
+ même hôte en réglant le paramètre d'adresse de destination sur 127.0.0.1
+ sur les deux. Dans ce cas, il agira comme le « Réseau interne », mais
+ l'hôte peut voir le trafic réseau, ce qu'il ne pourrait pas faire en réseau
+ interne normal.</para>
+
+ <para><note>Sur les hôtes basés sur Unix (comme Linux, Solaris, Mac OS X), il
+ n'est pas possible de diriger (bind) sur des ports inférieurs à 1024, à partir
+ d'applications qui ne sont pas exécutées par <computeroutput>root</computeroutput>.
+ Il s'en suit que si vous essayez de configurer un tel port source UDP, la
+ VM refusera de démarrer.</note></para>
+ </sect1>
+
+ <sect1 id="network_vde">
+ <title>Réseau VDE</title>
+
+
+ <para>Virtual Distributed Ethernet (Ethernet virtuel distribué, VDE<footnote><para>VDE
+ est un projet développé par Renzo Davoli, professeur associé à l'Université
+ de Bologna en Italie.</para></footnote>) est une infrastructure réseau
+ virtuelle flexible, reliant plusieurs hôtes de manière sécurisée. Elle
+ permet de basculer entre L2/L3, y compris avec un protocole d'arborescence
+ de passerelles, entre VLANs et l'émulation WAN. C'est une partie facultative
+ de VirtualBox qui n'est incluse que dans code source.</para>
+
+ <para>Les blocs de construction de base de l'infrastructure sont des switches
+ VDE, des plugs (prises) VDE et des fils VDE, qui connectent les switches
+ entre eux.</para>
+
+ <para>Le pilote VDE de VirtualBox prend un paramètre :<glosslist>
+ <glossentry>
+ <glossterm>Réseau VDE</glossterm>
+
+ <glossdef>
+ <para>Le nom du socket du switch du réseau VDE vers lequel se connectera
+ la VM.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+
+ <para>L'exemple de base suivant montre comment connecter une machine virtuelle
+ à un switch VDE :</para>
+
+ <para><orderedlist>
+ <listitem>
+ <para>Créez un switch VDE :
+ <screen>vde_switch -s /tmp/switch1</screen>
+ </para>
+ </listitem>
+ <listitem>
+ <para>Configuration en ligne de commande :
+ <screen>VBoxManage modifyvm "nom VM" --nic&lt;x&gt; generic</screen>
+ <screen>VBoxManage modifyvm "nom VM" --nicgenericdrv&lt;x&gt; VDE</screen>
+ Pour se connecter au port du switch automatiquement affecté, utilisez :
+ <screen>VBoxManage modifyvm "nom VM" --nicproperty&lt;x&gt; network=/tmp/switch1</screen>
+ Pour se connecter à un port spécifique du switch &lt;n&gt;, utilisez :
+ <screen>VBoxManage modifyvm "nom VM" --nicproperty&lt;x&gt; network=/tmp/switch1[&lt;n&gt;]</screen>
+ La dernière option peut être utile pour des VLANs.
+ </para>
+ </listitem>
+ <listitem>
+ <para>Plan facultatif entre un port de switch VDE et un VLAN : (du
+ switch en console)
+ <screen>vde$ vlan/create &lt;VLAN&gt;</screen>
+ <screen>vde$ port/setvlan &lt;port&gt; &lt;VLAN&gt;</screen>
+ </para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>VDE n'est disponible que sur des hôtes Linux et FreeBSD. Il n'est
+ disponible que si le logiciel VDE et la bibliothèque du plugin VDE du projet
+ VirtualSquare sont installés sur le système hôte. Pour plus
+ d'informations sur le paramétrage des réseaux VDE, merci de voir la
+ documentation qui accompagne le logiciel.<footnote>
+ <para><ulink
+ url="http://wiki.virtualsquare.org/wiki/index.php/VDE_Basic_Networking">http://wiki.virtualsquare.org/wiki/index.php/VDE_Basic_Networking</ulink>.</para>
+ </footnote></para>
+ </sect1>
+
+ <sect1 id="network_bandwidth_limit">
+ <title>Limiting bandwidth for network I/O</title>
+
+ <para>Starting with version 4.2, VirtualBox allows for limiting the
+ maximum bandwidth used for network transmission. Several network adapters
+ of one VM may share limits through bandwidth groups. It is possible
+ to have more than one such limit.</para>
+
+ <para>Limits are configured through
+ <computeroutput>VBoxManage</computeroutput>. The example below creates a
+ bandwidth group named "Limit", sets the limit to 20 Mbit/s and assigns the
+ group to the first and second adapters of the VM:<screen>VBoxManage bandwidthctl "VM name" add Limit --type network --limit 20m
+VBoxManage modifyvm "VM name" --nicbandwidthgroup1 Limit
+VBoxManage modifyvm "VM name" --nicbandwidthgroup2 Limit</screen></para>
+
+ <para>All adapters in a group share the bandwidth limit, meaning that in the
+ example above the bandwidth of both adapters combined can never exceed 20
+ Mbit/s. However, if one adapter doesn't require bandwidth the other can use the
+ remaining bandwidth of its group.</para>
+
+ <para>The limits for each group can be changed while the VM is running,
+ with changes being picked up immediately. The example below changes the
+ limit for the group created in the example above to 100 Kbit/s:<screen>VBoxManage bandwidthctl "VM name" set Limit --limit 100k</screen></para>
+ </sect1>
+</chapter>
diff --git a/doc/manual/fr_FR/user_PrivacyPolicy.xml b/doc/manual/fr_FR/user_PrivacyPolicy.xml
new file mode 100644
index 00000000..472c6ced
--- /dev/null
+++ b/doc/manual/fr_FR/user_PrivacyPolicy.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+ "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<appendix id="privacy">
+ <title>VirtualBox privacy policy</title>
+
+ <para>Policy version 4, Apr 22, 2010</para>
+
+ <para>This privacy policy sets out how Oracle Corporation ("Oracle") treats
+ personal information related to the virtualbox.org website and the
+ VirtualBox application.</para>
+
+ <para><emphasis role="bold">§ 1 virtualbox.org.</emphasis> The
+ "virtualbox.org" website logs anonymous usage information such as your IP
+ address, geographical location, browser type, referral source, length of
+ visit and number of page views while you visit (collectively, "anonymous
+ data"). In addition, but only if you choose to register, the website's bug
+ tracking and forum services store the data you choose to reveal upon
+ registration, such as your user name and contact information.</para>
+
+ <para><emphasis role="bold">§ 2 Cookies.</emphasis> The virtualbox.org
+ website, the bug tracker and the forum services use cookies to identify and
+ track the visiting web browser and, if you have registered, to facilitate
+ login. Most browsers allow you to refuse to accept cookies. While you can
+ still visit the website with cookies disabled, logging into the bug tracker
+ and forum services will most likely not work without them.</para>
+
+ <para><emphasis role="bold">§ 3 VirtualBox registration process.</emphasis>
+ The VirtualBox application may ask that the user optinoally register with
+ Oracle. in der If you choose to register, your name, e-mail address, country
+ and company will be submitted to Oracle and stored together with the IP
+ address of the submitter as well as product version and platform being used.
+ The standard Oracle Privacy Policies as posted on
+ http://www.oracle.com/html/privacy.html apply to this data.</para>
+
+ <para><emphasis role="bold">§ 4 Update notifications.</emphasis> The
+ VirtualBox application may contact Oracle to find out whether a new version
+ of VirtualBox has been released and notify the user if that is the case. In
+ the process, anonymous data such as your IP address and a non-identifying
+ counter, together with the product version and the platform being used, is
+ sent so that the server can find out whether an update is available. By
+ default, this check is performed once a day. You change this interval or
+ disable these checks altogether in the VirtualBox preferences.</para>
+
+ <para><emphasis role="bold">§ 5 Usage of personal information.</emphasis>
+ Oracle may use anonymous and personal data collected by the means above for
+ statistical purposes as well as to automatically inform you about new
+ notices related to your posts on the bug tracker and forum services, to
+ administer the website and to contact you due to technical issues. Oracle
+ may also inform you about new product releases related to VirtualBox.</para>
+
+ <para>In no event will personal data without your express consent be
+ provided to any third parties, unless Oracle may be required to do so by law
+ or in connection with legal proceedings.</para>
+
+ <para><emphasis role="bold">§ 6 Updates.</emphasis> Oracle may update this
+ privacy policy by posting a new version on the virtualbox.org website. You
+ should check this page occasionally to ensure you are happy with any
+ changes.</para>
+</appendix> \ No newline at end of file
diff --git a/doc/manual/fr_FR/user_Security.xml b/doc/manual/fr_FR/user_Security.xml
new file mode 100644
index 00000000..fa68c1ed
--- /dev/null
+++ b/doc/manual/fr_FR/user_Security.xml
@@ -0,0 +1,381 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<chapter id="Security">
+ <title>Security guide</title>
+
+ <sect1>
+ <title>Overview</title>
+ <para>
+ </para>
+
+ <sect2>
+ <title>General Security Principles</title>
+
+ <para>The following principles are fundamental to using any application
+ securely.
+ <glosslist>
+ <glossentry>
+ <glossterm>Keep Software Up To Date</glossterm>
+ <glossdef>
+ <para>
+ One of the principles of good security practise is to keep all
+ software versions and patches up to date. Activate the VirtualBox
+ update notification to get notified when a new VirtualBox release
+ is available. When updating VirtualBox, do not forget to update
+ the Guest Additions. Keep the host operating system as well as the
+ guest operating system up to date.
+ </para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Restrict Network Access to Critical Services</glossterm>
+ <glossdef>
+ <para>
+ Use proper means, for instance a firewall, to protect your computer
+ and your guest(s) from accesses from the outside. Choosing the proper
+ networking mode for VMs helps to separate host networking from the
+ guest and vice versa.
+ </para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Follow the Principle of Least Privilege</glossterm>
+ <glossdef>
+ <para>
+ The principle of least privilege states that users should be given the
+ least amount of privilege necessary to perform their jobs. Always execute VirtualBox
+ as a regular user. We strongly discourage anyone from executing
+ VirtualBox with system privileges.
+ </para>
+ <para>
+ Choose restrictive permissions when creating configuration files,
+ for instance when creating /etc/default/virtualbox, see
+ <xref linkend="linux_install_opts"/>. Mode 0600 would be preferred.
+ </para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Monitor System Activity</glossterm>
+ <glossdef>
+ <para>
+ System security builds on three pillars: good security protocols, proper
+ system configuration and system monitoring. Auditing and reviewing audit
+ records address the third requirement. Each component within a system
+ has some degree of monitoring capability. Follow audit advice in this
+ document and regularly monitor audit records.
+ </para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>Keep Up To Date on Latest Security Information</glossterm>
+ <glossdef>
+ <para>
+ Oracle continually improves its software and documentation. Check this
+ note note yearly for revisions.
+ </para>
+ </glossdef>
+ </glossentry>
+
+ </glosslist>
+ </para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Secure Installation and Configuration</title>
+ </sect1>
+
+ <sect2>
+ <title>Installation Overview</title>
+ <para>
+ The VirtualBox base package should be downloaded only from a trusted source,
+ for instance the official website
+ <ulink url="http://www.virtualbox.org">http://www.virtualbox.org</ulink>.
+ The integrity of the package should be verified with the provided SHA256
+ checksum which can be found on the official website.
+ </para>
+ <para>
+ General VirtualBox installation instructions for the supported hosts
+ can be found in <xref linkend="installation"/>.
+ </para>
+ <para>
+ On Windows hosts, the installer allows for disabling USB support, support
+ for bridged networking, support for host-only networking and the Python
+ language bindings, see <xref linkend="installation_windows"/>.
+ All these features are enabled by default but disabling some
+ of them could be appropriate if the corresponding functionality is not
+ required by any virtual machine. The Python language bindings are only
+ required if the VirtualBox API is to be used by external Python
+ applications. In particular USB support and support
+ for the two networking modes require the installation of Windows kernel
+ drivers on the host. Therefore disabling those selected features can
+ not only be used to restrict the user to certain functionality but
+ also to minimize the surface provided to a potential attacker. </para>
+ <para>
+ The general case is to install the complete VirtualBox package. The
+ installation must be done with system privileges. All VirtualBox binaries
+ should be executed as a regular user and never as a privileged user.
+ </para>
+ <para>
+ The Oracle VM VirtualBox extension pack provides additional features
+ and must be downloaded and installed separately, see
+ <xref linkend="intro-installing"/>. As for the base package, the SHA256
+ checksum of the extension pack should be verified. As the installation
+ requires system privileges, VirtualBox will ask for the system
+ password during the installation of the extension pack.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Post Installation Configuration</title>
+ <para>
+ Normally there is no post installation configuration of VirtualBox components
+ required. However, on Solaris and Linux hosts it is necessary to configure
+ the proper permissions for users executing VMs and who should be able to
+ access certain host resources. For instance, Linux users must be member of
+ the <emphasis>vboxusers</emphasis> group to be able to pass USB devices to a
+ guest. If a serial host interface should be accessed from a VM, the proper
+ permissions must be granted to the user to be able to access that device.
+ The same applies to other resources like raw partitions, DVD/CD drives
+ and sound devices.
+ </para>
+ </sect2>
+
+ <sect1>
+ <title>Security Features</title>
+ <para>This section outlines the specific security mechanisms offered
+ by VirtualBox.</para>
+
+ <sect2>
+ <title>The Security Model</title>
+ <para>
+ One property of virtual machine monitors (VMMs) like VirtualBox is to encapsulate
+ a guest by executing it in a protected environment, a virtual machine,
+ running as a user process on the host operating system. The guest cannot
+ communicate directly with the hardware or other computers but only through
+ the VMM. The VMM provides emulated physical resources and devices to the
+ guest which are accessed by the guest operating system to perform the required
+ tasks. The VM settings control the resources provided to the guest, for example
+ the amount of guest memory or the number of guest processors, (see
+ <xref linkend="generalsettings"/>) and the enabled features for that guest
+ (for example remote control, certain screen settings and others).
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Secure Configuration of Virtual Machines</title>
+ <para>
+ Several aspects of a virtual machine configuration are subject to security
+ considerations.</para>
+
+ <sect3>
+ <title>Networking</title>
+ <para>
+ The default networking mode for VMs is NAT which means that
+ the VM acts like a computer behind a router, see
+ <xref linkend="network_nat"/>. The guest is part of a private
+ subnet belonging to this VM and the guest IP is not visible
+ from the outside. This networking mode works without
+ any additional setup and is sufficient for many purposes.
+ </para>
+ <para>
+ If bridged networking is used, the VM acts like a computer inside
+ the same network as the host, see <xref linkend="network_bridged"/>.
+ In this case, the guest has the same network access as the host and
+ a firewall might be necessary to protect other computers on the
+ subnet from a potential malicious guest as well as to protect the
+ guest from a direct access from other computers. In some cases it is
+ worth considering using a forwarding rule for a specific port in NAT
+ mode instead of using bridged networking.
+ </para>
+ <para>
+ Some setups do not require a VM to be connected to the public network
+ at all. Internal networking (see <xref linkend="network_internal"/>)
+ or host-only networking (see <xref linkend="network_hostonly"/>)
+ are often sufficient to connect VMs among each other or to connect
+ VMs only with the host but not with the public network.
+ </para>
+ </sect3>
+
+ <sect3>
+ <title>VRDP remote desktop authentication</title>
+ <para>When using the VirtualBox extension pack provided by Oracle
+ for VRDP remote desktop support, you can optionally use various
+ methods to configure RDP authentication. The "null" method is
+ very insecure and should be avoided in a public network.
+ See <xref linkend="vbox-auth" /> for details.</para>
+ </sect3>
+
+ <sect3 id="security_clipboard">
+ <title>Clipboard</title>
+ <para>
+ The shared clipboard allows users to share data between the host and
+ the guest. Enabling the clipboard in "Bidirectional" mode allows
+ the guest to read and write the host clipboard. The "Host to guest"
+ mode and the "Guest to host" mode limit the access to one
+ direction. If the guest is able to access the host clipboard it
+ can also potentially access sensitive data from the host which is
+ shared over the clipboard.
+ </para>
+ <para>
+ If the guest is able to read from and/or write to the host clipboard
+ then a remote user connecting to the guest over the network will also
+ gain this ability, which may not be desirable. As a consequence, the
+ shared clipboard is disabled for new machines.
+ </para>
+ </sect3>
+
+ <sect3>
+ <title>Shared folders</title>
+ <para>If any host folder is shared with the guest then a remote
+ user connected to the guest over the network can access
+ these files too as the folder sharing mechanism cannot be
+ selectively disabled for remote users.
+ </para>
+ </sect3>
+
+ <sect3>
+ <title>3D graphics acceleration</title>
+ <para>Enabling 3D graphics via the Guest Additions exposes the host
+ to additional security risks; see <xref
+ linkend="guestadd-3d" />.</para>
+ </sect3>
+
+ <sect3>
+ <title>CD/DVD passthrough</title>
+ <para>Enabling CD/DVD passthrough allows the guest to perform advanced
+ operations on the CD/DVD drive, see <xref linkend="storage-cds"/>.
+ This could induce a security risk as a guest could overwrite data
+ on a CD/DVD medium.
+ </para>
+ </sect3>
+
+ <sect3>
+ <title>USB passthrough</title>
+ <para>
+ Passing USB devices to the guest provides the guest full access
+ to these devices, see <xref linkend="settings-usb"/>. For instance,
+ in addition to reading and writing the content of the partitions
+ of an external USB disk the guest will be also able to read and
+ write the partition table and hardware data of that disk.
+ </para>
+ </sect3>
+
+ </sect2>
+
+ <sect2>
+ <title>Configuring and Using Authentication</title>
+
+ <para>The following components of VirtualBox can use passwords for
+ authentication:<itemizedlist>
+
+ <listitem>
+ <para>When using remote iSCSI storage and the storage server
+ requires authentication, an initiator secret can optionally be supplied
+ with the <computeroutput>VBoxManage storageattach</computeroutput>
+ command. As long as no settings password is provided (command line
+ option <screen>--settingspwfile</screen>, this secret is
+ stored <emphasis role="bold">unencrypted</emphasis> in the machine
+ configuration and is therefore potentially readable on the host.
+ See <xref
+ linkend="storage-iscsi" /> and <xref
+ linkend="vboxmanage-storageattach" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>When using the VirtualBox web service to control a VirtualBox
+ host remotely, connections to the web service are authenticated in
+ various ways. This is described in detail in the VirtualBox Software
+ Development Kit (SDK) reference; please see <xref
+ linkend="VirtualBoxAPI" />.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect2>
+
+ <!--
+ <sect2>
+ <title>Configuring and Using Access Control</title>
+ </sect2>
+
+ <sect2>
+ <title>Configuring and Using Security Audit</title>
+ </sect2>
+
+ <sect2>
+ <title>Congiguring and Using Other Security Features</title>
+ </sect2>
+ -->
+
+ <sect2>
+ <title>Potentially insecure operations</title>
+
+ <para>The following features of VirtualBox can present security
+ problems:<itemizedlist>
+ <listitem>
+ <para>Enabling 3D graphics via the Guest Additions exposes the host
+ to additional security risks; see <xref
+ linkend="guestadd-3d" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>When teleporting a machine, the data stream through which the
+ machine's memory contents are transferred from one host to another
+ is not encrypted. A third party with access to the network through
+ which the data is transferred could therefore intercept that
+ data. An SSH tunnel could be used to secure the connection between
+ the two hosts. But when considering teleporting a VM over an untrusted
+ network the first question to answer is how both VMs can securely
+ access the same virtual disk image(s) with a reasonable performance. </para>
+ </listitem>
+
+ <listitem>
+ <para>When using the VirtualBox web service to control a VirtualBox
+ host remotely, connections to the web service (through which the API
+ calls are transferred via SOAP XML) are not encrypted, but use plain
+ HTTP by default. This is a potential security risk! For details about
+ the web service, please see <xref linkend="VirtualBoxAPI" />.</para>
+ <para>The web services are not started by default. Please refer to
+ <xref linkend="vboxwebsrv-daemon"/> to find out how to start this
+ service and how to enable SSL/TLS support. It has to be started as
+ a regular user and only the VMs of that user can be controled. By
+ default, the service binds to localhost preventing any remote connection.</para>
+ </listitem>
+
+ <listitem>
+ <para>Traffic sent over a UDP Tunnel network attachment is not
+ encrypted. You can either encrypt it on the host network level (with
+ IPsec), or use encrypted protocols in the guest network (such as
+ SSH). The security properties are similar to bridged Ethernet.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect2>
+
+ <sect2>
+ <title>Encryption</title>
+
+ <para>The following components of VirtualBox use encryption to protect
+ sensitive data:<itemizedlist>
+ <listitem>
+ <para>When using the VirtualBox extension pack provided by Oracle
+ for VRDP remote desktop support, RDP data can optionally be
+ encrypted. See <xref linkend="vrde-crypt" /> for details. Only
+ the Enhanced RDP Security method (RDP5.2) with TLS protocol
+ provides a secure connection. Standard RDP Security (RDP4 and
+ RDP5.1) is vulnerable to a man-in-the-middle attack.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect2>
+ </sect1>
+
+ <!--
+ <sect1>
+ <title>Security Considerations for Developers</title>
+ </sect1>
+ -->
+
+</chapter>
diff --git a/doc/manual/fr_FR/user_Storage.xml b/doc/manual/fr_FR/user_Storage.xml
new file mode 100644
index 00000000..ac7b4f89
--- /dev/null
+++ b/doc/manual/fr_FR/user_Storage.xml
@@ -0,0 +1,985 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+ "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<chapter id="storage">
+ <title>Stockage virtuel</title>
+
+ <para>Vu que la machine virtuelle s'attendra très probablement à voir un
+ disque dur virtuel construit dans son ordinateur virtuel, VirtualBox doit
+ pouvoir présenter un support de stockage « réel » à l'invité comme un disque
+ dur virtuel. Il y a actuellement trois méthodes pour effectuer cela :</para>
+
+ <orderedlist>
+ <listitem>
+ <para>Le plus souvent, VirtualBox utilisera les grands fichiers images sur
+ un vrai disque dur et les présenter à un invité comme un disque dur virtuel.
+ Ceci est décrit au <xref linkend="vdidetails" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>Alternativement, si vous avez des serveurs de stockage iSCSI, vous
+ pouvez aussi attacher de tels serveurs à VirtualBox&nbsp;; ceci est décrit
+ au <xref linkend="storage-iscsi" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>Enfin, en fonctionnalité expérimentale, vous pouvez autoriser une
+ machine virtuelle à accéder directement à un de vos disques hôtes&nbsp;;
+ cette fonctionnalité avancée est décrite au <xref linkend="rawdisk" />.</para>
+ </listitem>
+ </orderedlist>
+
+ <para>Chacun de ces périphériques de stockage virtuels (fichier image, cible
+ iSCSI ou disque dur physique) devra être connecté au contrôleur de disque dur
+ virtuel que présente VirtualBox à une machine virtuelle. Ceci est expliqué
+ dans la prochaine section.</para>
+
+ <sect1 id="harddiskcontrollers">
+ <title>Contrôleurs de disques durs : IDE, SATA (AHCI), SCSI, SAS</title>
+
+ <para>Dans un vrai PC, les disques durs et les lecteurs de CD/DVD sont
+ connectés à un périphérique appelé contrôleur de disque dur, qui dirige les
+ opérations du disque dur et les transferts de données. VirtualBox peut
+ émuler les trois types les plus courants de contrôleurs de disque dur qu'on
+ trouve généralement sur les PCs d'aujourd'hui : IDE, SATA (AHCI) et SCSI.<footnote>
+ <para>Le support SATA a été ajouté avec VirtualBox 1.6 ; le support
+ expérimental de SCSI a été ajouté avec la version 2.1 puis complètement
+ ajouté avec la 2.2. De façon générale, l'attachements de supports de
+ stockage a été rendu beaucoup plus flexible avec VirtualBox 3.1 ;
+ voir ci-dessous.</para>
+ </footnote><itemizedlist>
+ <listitem>
+ <para>Les contrôleurs <emphasis role="bold">IDE (ATA)</emphasis> sont utilisés
+ depuis les années 80. Au départ, ce type d'interface ne fonctionnait
+ qu'avec les disques durs, mais il a été étendu ensuite aussi pour
+ supporter les lecteurs de CD-ROM et d'autres types de médias amovibles.
+ Dans un PC physique, ce standard utilise des nappes de 40 ou 80 broches.
+ Chacune de ces nappes connecte deux périphériques à un contrôleur, ce
+ que l'on a appelé traditionnellement « master » (maître) et « slave »
+ (esclave). Les contrôleurs de disque dur ont en général deux
+ connecteurs pour de telles nappes ; il s'en suit que la plupart des PCs
+ supportent jusqu'à quatre périphériques.</para>
+
+ <para>Dans VirtualBox, chaque machine virtuelle a un contrôleur IDE
+ activé par défaut, ce qui vous permet d'attacher jusqu'à quatre
+ périphériques de stockage virtuels à la machine. (Par défaut, un des
+ quatre - le second maître - est pré-configuré pour être le lecteur
+ virtuel de CD/DVD de la machine, mais vous pouvez modifier cela.) <footnote>
+ <para>L'affectation du lecteur CD/DVD de la machine au maître
+ secondaire a été corrigée avant VirtualBox 3.1 ; on peut
+ maintenant la modifier ; et le lecteur peut être branché sur
+ d'autres slots du contrôleur IDE, et il peut y avoir plus d'un
+ lecteurs comme ça.</para>
+ </footnote>)</para>
+
+ <para>Donc même si votre système d'exploitation invité ne supporte pas
+ les périphériques SCSI ou SATA, il devrait toujours pouvoir voir le
+ contrôleur IDE par défaut activé.</para>
+
+ <para>Vous pouvez aussi sélectionner précisément le type de matériel
+ de contrôleur IDE que VirtualBox devrait présenter à la machine virtu
+ elle (PIIX3, PIIX4 ou ICH6). Cela ne constitue aucune différence en
+ termes de performances mais si vous importez une machine virtuelle à
+ partir d'un autre produit de virtualisation, il se peut que le système
+ d'exploitation de cette machine s'attende à un contrôleur particulier
+ et plante s'il ne le trouve pas.</para>
+
+ <para>Après que vous ayez créé une nouvelle machine virtuelle avec
+ l'assistant « Nouvelle machine » de l'interface graphique, vous verrez
+ en général un contrôleur IDE dans les paramètres de « Stockage » de la
+ machine, où le lecteur de CD/DVD virtuel sera attaché à l'un des quatre
+ ports de ce contrôleur.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Serial ATA (SATA)</emphasis> est un standard plus
+ récent apparu en 2003. Par rapport à l'IDE, il supporte à la fois des
+ vitesses beaucoup plus élevées et davantage de périphériques par
+ contrôleur de disque dur. En outre, avec du matériel physique, vous
+ pouvez ajouter des périphériques et les supprimer alors que le système
+ est en fonction. L'interface standard pour les contrôleurs SATA
+ s'appelle Advanced Host Controller Interface (<emphasis
+ role="bold">AHCI</emphasis>).</para>
+
+ <para>Pour des questions de compatibilité, les contrôleurs AHCI par
+ défaut voient les disques qui y sont attachés dans un « mode IDE de
+ compatibilité », sauf si le support SATA est explicitement demandé. Le
+ « mode IDE de compatibilité » signifie seulement que les lecteurs
+ peuvent être vus et utilisés par le BIOS de l'ordinateur. Mais, les
+ disques attachés à ces emplacement travailleront en mode AHCI pleine
+ vitesse une fois que le système invité aura chargé son pilote de
+ périphérique AHCI.</para>
+
+ <para>Comme un vrai contrôleur SATA, le contrôleur virtuel SATA de
+ VirtualBox agit plus vite et consomme aussi moins de ressources
+ processeur que le contrôleur IDE virtuel. En outre, ceci vous permet
+ de connecter jusqu'à 30 disques durs virtuels à une machine contre à
+ peine trois pour l'IDE (avec le lecteur DVD déjà attaché). Parmi eux,
+ les quatre premiers (numérotés de 0 à 3 dans l'interface graphique
+ sont gérés par défaut en mode IDE de compatibilité.</para>
+
+ <para>C'est pour cette raison qu'à partir de la version 3.2 et en
+ fonction du système d'exploitation invité sélectionné, VirtualBox
+ utilise SATA par défaut pour les machines virtuelles nouvellement créées.
+ Un contrôleur SATA est créé par défaut et le disque par défaut qui a
+ été créé avec une nouvelle machine virtuelle est attaché à ce
+ contrôleur.<warning>
+ <para>Le contrôleur SATA et les disques virtuels qui y sont
+ attachés (y compris ceux en mode compatibilité IDE) ne seront pas
+ vus par un système d'exploitation qui n'a pas de support
+ périphérique pour AHCI. En particulier, <emphasis role="bold">il
+ n'y a pas de support pour AHCI sur les Windows antérieurs à Windows
+ Vista</emphasis>, donc Windows XP (même SP2) ne verra pas de tels
+ disques sauf si vous installez les pilotes supplémentaires. Il est
+ possible de basculer entre IDE et SATA après l'installation en
+ installant les pilotes SATA et en modifiant le type de contrôleur
+ dans la boîte de dialogue des paramètres de la VM.
+ <footnote><para>VirtualBox recommande les pilotes
+ Intel Matrix qu'on peut télécharger sur
+ http://downloadcenter.intel.com/Product_Filter.aspx?ProductID=2101
+ </para></footnote></para>
+ </warning></para>
+
+ <para>Pour ajouter un contrôleur SATA à une machine pour laquelle il
+ n'a pas été activé par défaut (soit parce qu'elle a été créée par une
+ version antérieure de VirtualBox soit parce que le SATA n'est pas
+ supporté par le système d'exploitation par défaut sélectionné), allez
+ sur l'onglet «&nbsp;stockage&nbsp;» de la boîte de dialogue des paramètres de la
+ machine, cliquez sur le bouton «&nbsp;Ajouter un contrôleur&nbsp;» sous la case
+ «&nbsp;Arborescence de stockage&nbsp;» puis sélectionnez «&nbsp;Ajouter un contrôleur
+ SATA&nbsp;». Après quoi, le contrôleur supplémentaire apparaîtra comme
+ périphérique PCI séparé dans la machine virtuelle et vous pouvez y
+ ajouter des disques virtuels.</para>
+
+ <para>Pour modifier les paramètres du mode de compatibilité IDE du
+ contrôleur SATA, merci de voir le <xref linkend="vboxmanage-storagectl" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">SCSI</emphasis> est un autre standard
+
+ industriel, signifiant « Small Computer System Interface ». Il a été
+ établi dès 1986 comme une interface générique pour le transfert de
+ données entre tous types de périphérique, y compris les périphériques
+ de stockage. Aujourd'hui, le SCSI est toujours utilisé pour connecter
+ des disques durs et des périphériques de bande magnétique, mais la
+ plupart du temps, il a été relégué en matériel de secours. Il est
+ encore couramment utilisé sur des stations de travail et des serveurs
+ haute performance.</para>
+
+ <para>Pour des raisons principalement liées à la compatibilité avec
+ d'autres logiciels de virtualisation, VirtualBox supporte éventuellement
+ les contrôleurs LsiLogic et BusLogic, sur lesquels vous pouvez attacher
+ jusqu'à 16 disques durs virtuels.</para>
+
+ <para>Pour activer un contrôleur SCSI, sur l'onglet « Stockage » d'une
+ boîte de dialogue de paramètres d'une machine virtuelle, cliquez sur
+ le bouton « Ajouter un contrôleur » sous la case à cocher « arborescence
+ de stockage », puis sélectionnez « Ajouter un contrôleur SCSI ». Après
+ quoi le contrôleur supplémentaire apparaîtra comme un périphérique PCI
+ distinct dans la machine virtuelle.<warning>
+ <para>Comme avec les autres types de contrôleur, un contrôleur
+ SCSI ne sera vu par les systèmes d'exploitation qu'avec le support
+ pour un tel périphérique. Windows 2003 et supérieur incluent les
+ pilotes pour le contrôleur LSI Logic, tandis que Windows NT 4.0 et
+ Windows 2000 incluent les pilotes pour le contrôleur BusLogic.
+ Windows XP n'inclut les pilotes pour aucun contrôleur.
+ </para>
+ </warning></para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">SCSI attaché en série (Serial Attached
+ SCSI, SAS)</emphasis> est un autre standard de bus qui utilise le jeux de
+ commandes de SCSI. Mais contrairement à SCSI, avec des périphériques
+ physiques, ce sont des câbles série qui sont utilisés au lieu de câbles
+ parallèle, ce qui simplifie les connexions de périphériques physiques.
+ En quelque sorte, le SAS est au SCSI ce que le SCSI est à l'IDE&nbsp;: il
+ permet davantage de connexions, plus fiables et plus rapides.</para>
+
+ <para>Pour supporter les invités de haut niveau qui exigent des
+ contrôleurs SAS, VirtualBox émule un contrôleur SAS LsiLogic que vous
+ pouvez activer de la même façon qu'un contrôleur SCSI. Pour l'instant,
+ vous pouvez connecter jusqu'à huit périphériques au contrôleur SAS.<footnote>
+ <para>Le support du contrôleur LSI Logic SAS a été ajouté avec
+ VirtualBox 3.2.</para>
+ </footnote></para>
+
+ <warning>
+ <para>Comme avec SATA, le contrôleur SAS ne sera vu que par les
+ systèmes d'exploitation qui le supportent. En particulier,
+ <emphasis role="bold">il n'y a pas de support pour SAS dans Windows
+ avant Windows Vista</emphasis>, donc Windows XP (même SP2) ne verra
+ pas de tels disques sauf si vous installez des pilotes supplémentaires.</para>
+ </warning>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>En résumé, VirtualBox vous donne les catégories suivantes d'emplacement de stockage virtuels :<orderedlist>
+ <listitem>
+ <para>Quatre emplacements attachés au contrôleur IDE traditionnel, qui
+ sont toujours toujours présents (en général l'un d'eux est en général
+ un lecteur de CD/DVD virtuel)&nbsp;;</para>
+ </listitem>
+
+ <listitem>
+ <para>30 emplacements attachés au contrôleur SATA, s'il est activé et
+ si votre système d'exploitation peut le voir ; ces emplacements peuvent
+ être soit<orderedlist>
+ <listitem>
+ <para>En mode compatibilité IDE (par défaut les emplacements 0
+ à 3) ou</para>
+ </listitem>
+
+ <listitem>
+ <para>En mode SATA ;</para>
+ </listitem>
+ </orderedlist></para>
+ </listitem>
+
+ <listitem>
+ <para>15 emplacements attachés au contrôleur SCSI, s'il est activé et
+ supporté par le système d'exploitation invité&nbsp;;</para>
+ </listitem>
+
+ <listitem>
+ <para>Huit emplacements attachés au contrôleur SAS, s'il est activé et
+ supporté par le système d'exploitation invité.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>Étant donné le vaste choix de contrôleurs de stockage, il se peut
+ que vous vous demandiez lequel choisir. En général, vous devriez éviter
+ l'IDE, sauf si c'est le seul contrôleur supporté par votre invité. Que
+ vous utilisez SATA, SCSI, ou SAS, il n'y a pas de différence réelle.</para>
+ </sect1>
+
+ <sect1 id="vdidetails">
+ <title>Fichiers images de disque (VDI, VMDK, VHD, HDD)</title>
+
+ <para>Les fichiers images de disque résident sur le système hôte et sont vus
+ par les systèmes invités comme des disques durs d'une certaine géométrie.
+ Lorsqu'un système d'exploitation lit depuis ou écrit sur un disque dur,
+ VirtualBox redirige la demande sur le fichier image.</para>
+
+ <para>Remarquez que quand vous créez un fichier image, vous devez spécifier
+ sa taille, qui représente une géométrie fixe du disque virtuelle. Il n'est
+ donc pas possible de modifier la taille du disque dur virtuel ultérieurement.</para>
+
+ <para>VirtualBox supporte quatre variantes de fichiers images de disque :<itemizedlist>
+ <listitem>
+ <para>Normalement, VirtualBox utilise son propre format de contenu
+ pour les disques durs invités - fichiers Virtual Disk Image (VDI) -.
+ En particulier, ce format sera utilisée quand vous créerez une nouvelle
+ machine virtuelle avec un nouveau disque.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox supporte aussi complètement le format de contenu
+ populaire et libre VMDK utilisé par beaucoup d'autres produits de
+ virtualisation, en particulier par Vmware.<footnote>
+ <para>Le support initial pour VMDK a été ajouté avec VirtualBox 1.4 ;
+ depuis la version 2.1, VirtualBox supporte complètement VMDK,
+ ce qui veut dire que vous pouvez créer des instantanés et utiliser
+ toutes les autres fonctionnalités avancées décrites ci-dessus pour
+ les images VDI également avec VMDK.</para>
+ </footnote></para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox supporte aussi pleinement le format VHD utilisé par
+ Microsoft.</para>
+ </listitem>
+
+ <listitem>
+ <para>Les fichiers images de Parallels version 2 (format HDD) sont
+ aussi supportés.<footnote>
+ <para>Le support a été ajouté à VirtualBox 3.1.</para>
+ </footnote> Faute de documentation sur le format, les formats
+ récents (3 et 4) ne sont pas supportés. Vous pouvez cependant
+ convertir de tels fichiers images vers le format de la version 2 en
+ utilisant les outils fournis par Parallels.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>Indépendamment du format de disque, comme il a été brièvement mentionné
+ au <xref linkend="gui-createvm" />, il y a deux options pour créer une image
+ de disque : taille statique ou extension dynamique.</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Si vous créez une <emphasis role="bold">image à la taille fixe</emphasis>
+ de, par exemple, 10 Gio, un fichier image d'à peu près la même taille
+ sera créé sur votre système hôte. Remarquez que la création d'une image
+ à taille statique peut prendre beaucoup de temps selon la taille de
+ l'image et les performances d'écriture de votre disque dur.</para>
+ </listitem>
+
+ <listitem>
+ <para>Pour une gestion du stockage plus flexible, utilisez une <emphasis
+ role="bold">image à extension dynamique</emphasis>. Celle ci sera au
+ départ très petite et n'occupera pas d'espace pour des secteurs du disque
+ virtuel non utilisés, mais le fichier image grossira chaque fois qu'on
+ écrira sur un secteur du disque pour la première fois. Si ce format
+ prend moins d'espace disque au début, le fait que VirtualBox doive
+ étendre en permanence le fichier image consomme des ressources machines
+ supplémentaires, donc jusqu'à ce que le disque ne soit entièrement
+ rempli, les opérations d'écriture sont plus lentes qu'avec des disques à
+ taille statique. Cependant, après qu'un disque dynamique a été étendu
+ entièrement, la différence de performances pour les opérations de lecture
+ et d'écriture est négligeable.</para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1 id="vdis">
+ <title>Le gestionnaire de médias virtuels</title>
+
+ <para>VirtualBox conserve un registre interne de toutes les images disponibles
+ de disque, CD/DVD-ROM et de disquette. Vous pouvez voir et modifier ce
+ registre dans le gestionnaire de médias virtuels, auquel vous pouvez
+ accéder depuis le menu « Fichier » dans la fenêtre principale de VirtualBox :</para>
+
+ <para><mediaobject>
+ <imageobject>
+ <imagedata align="center" fileref="../en_US/images/virtual-disk-manager.png"
+ width="10cm" />
+ </imageobject>
+ </mediaobject>La fenêtre vous montre toutes les images actuellement
+ enregistrées avec VirtualBox, regroupées de façon pratique en trois onglets
+ pour les trois formats possibles. Ces formats sont :</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Les images de disque dur, soit au format Virtual Disk Image (VDI)
+ de VirtualBox lui-même, soit dans les formats tiers listés ci-dessus ;</para>
+ </listitem>
+
+ <listitem>
+ <para>Les images de CD/DVD au format standard ISO ;</para>
+ </listitem>
+
+ <listitem>
+ <para>Des images de disquette au format standard RAW.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Comme vous pouvez le voir dans la capture d'écran ci-dessus, pour
+ chaque image, le gestionnaire de médias virtuels vous montre le chemin
+ complet vers le fichier image et d'autres informations telles que la machine
+ virtuelle à laquelle l'image est actuellement attachée, s'il y en a une.</para>
+
+ <para>Le gestionnaire de médias virtuels vous permet de</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>créer de nouvelles images de disque dur en utilisant le bouton
+ <emphasis role="bold">"Nouveau"</emphasis> ; cela ouvrira l'assistant
+ « Créer une image de disque » déjà décrit au <xref
+ linkend="gui-createvm" />;</para>
+ </listitem>
+
+ <listitem>
+ <para>importer des fichiers images existantes depuis votre disque dur
+ sur VirtualBox en utilisant le bouton <emphasis role="bold">"Ajouter"</emphasis> ;</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">supprimer</emphasis> une image du
+ registre(et éventuellement effacer le fichier image en même temps) ;</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">"libérer"</emphasis> une image, c'est-à-dire,
+ la détacher d'une machine virtuelle si elle y est actuellement attachée
+ comme un disque dur.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Nous vous recommandons de maintenir deux dossiers spéciaux sur votre
+ système pour conserver les images : un pour les fichiers images de disques
+ durs (qui peut, en cas d'images à extension dynamique, atteindre des tailles
+ considérables), et un pour les fichiers ISO (qui ont probablement été
+ téléchargées sur Internet).</para>
+
+ <para>Vous pouvez copier des fichiers images de disque dur sur d'autres
+ systèmes hôtes et les importer depuis des machines virtuelles, bien que
+ certains systèmes invités (surtout Windows 2000 et XP) exigeront que la
+ nouvelle machine virtuelle soit paramétrée de la même manière que l'ancienne.
+ .<note>
+ <para>Ne faites pas simplement des copies d'images de disques virtuels.
+ Si vous importer ainsi une seconde copie dans une machine virtuelle,
+ VirtualBox se plaindra avec une erreur, puisque VirtualBox attribue un
+ identifiant unique (UUID) à chaque image de disque pour être sûr qu'il
+ n'est utilisé qu'une seule fois. Voir le <xref linkend="cloningvdis" />
+ pour des instructions à ce sujet. De même, si vous voulez copier une
+ machine virtuelle sur un autre système, VirtualBox a une fonction
+ d'importation/exportation qui pourrait mieux convenir à vos besoins ;
+ voir le <xref linkend="ovf" />.</para>
+ </note></para>
+ </sect1>
+
+ <sect1 id="hdimagewrites">
+ <title>Modes spéciaux d'écriture d'images</title>
+
+ <para>Pour chaque image de disque virtuel supportée par VirtualBox, vous
+ pouvez utiliser des commandes spéciales pour définir comment des opérations
+ d'écriture depuis la machine virtuelle devraient modifier l'image et comment
+ les instantanés devraient la modifier. Cela vaut pour tous les formats
+ d'images précités (VDI, VMDK, VHD ou HDD) et indépendamment du fait que
+ l'image soit de taille statique ou étendue de façon dynamique.</para>
+
+ <orderedlist>
+ <listitem>
+ <para>Avec des <emphasis role="bold">images normales</emphasis> (le
+ réglage par défaut), il n'y a pas de restrictions sur la façon dont les
+ invités peuvent lire et écrire sur le disque.</para>
+
+ <para>Quand vous faites un instantané de votre machine virtuelle comme
+ décrit au <xref linkend="snapshots" />, l'état d'une telle image de
+ « disque dur normal » sera enregistrée avec le instantané, et quand vous
+ restaurerez le instantané, son état sera entièrement réinitialisé.</para>
+
+ <para>(pour être précis sur un plan technique, le fichier image n'est
+ pas « réinitialisé » en tant que tel. Par contre, quand on fait un
+ instantané, VirtualBox « gèle » le fichier image et n'écrit plus dessus.
+ Pour les opérations d'écriture depuis la VM, un second fichier image
+ « de différenciation » est créé qui ne reçoit que les modifications de
+ l'image d'origine ; voir la prochaine section pour des détails).</para>
+
+ <para>Si vous pouvez attacher la même image « normale » à plusieurs
+ machines virtuelles, une seule de ces machine virtuelle attachée au même
+ fichier image peut être lancée simultanément, sans quoi il y aurait un
+ conflit si plusieurs machines écrivaient sur le même fichier image.<footnote>
+ <para>Cette restriction est plus allégée maintenant qu'avec
+ VirtualBox 2.2. Auparavant, toute image de disque « normal » ne
+ pouvait être <emphasis>attachée</emphasis> qu'à une seule machine.
+ Maintenant, on peut à plus d'une machine, tant que seule une d'entre
+ elles est en fonction.</para>
+ </footnote></para>
+ </listitem>
+
+ <listitem>
+ <para>À l'inverse, les disques durs « write-through » ne sont pas du
+ tout concernés par les instantanés : leur état <emphasis>n'est pas</emphasis>
+ sauvegardé quand on crée un instantané, et il n'est pas restauré quand
+ on le restaure.</para>
+
+ <para>Pour <emphasis>créer</emphasis> une image de disque VDI en
+ « write-through », utilisez la commande <computeroutput>VBoxManage
+ createhd</computeroutput> ; voir le <xref
+ linkend="vboxmanage-createvdi" />. Pour marquer une image
+ <emphasis>existante</emphasis>
+ comme dynamique, utilisez la commande <computeroutput>VBoxManage modifyhd</computeroutput> ;
+ voir <xref
+ linkend="vboxmanage-modifyvdi" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Les disques durs partageables</emphasis>
+ sont une variante des disques durs « write-through ». En principe, ils se
+ comportent exactement de la même façon, c'est-à-dire que leur état
+ <emphasis>n'est pas</emphasis> sauvegardé quand on prend un instantané,
+ et il n'est pas restauré lors de la restauration d'un instantané. La
+ différence n'apparaît que si on attache de tels disques à plusieurs
+ VMs. Les VMs partageables peuvent être attachés à plusieurs VMs,
+ qui peuvent se lancer concommitamment. Elles sont ainsi convenables pour
+ être utilisées par des systèmes de fichiers cluster entre des VMs et
+ des applications identiques qui sont préparées explicitement pour accéder
+ concommitamment à un disque. Seules les images à taille fixe peuvent
+ être utilisées de cette manière, les images à taille dynamique sont
+ rejetées.</para>
+
+ <para>C'est une fonctionnalité avancée, une mauvaise utilisation peut
+ conduire à une perte de données -- les systèmes de fichiers réguliers
+ ne sont pas préparés pour gérer des modifications simultanes par plusieurs
+ éléments.</para>
+
+ <para>Pour <emphasis>créer</emphasis> une image de disque au format VDI
+ en tant que « partageable », utilisez la commande <computeroutput>VBoxManage
+ createhd</computeroutput> ; voir le <xref
+ linkend="vboxmanage-createvdi" />. Pour marquer une image
+ <emphasis>existante</emphasis> comme partageable, utilisez
+ <computeroutput>VBoxManage modifyhd</computeroutput> ; voir <xref
+ linkend="vboxmanage-modifyvdi" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>Enfin, les images immuables ne se souviennent des accès en écriture
+ que de façon temporaire pendant que la machine virtuelle est en fonction
+ ; toutes les modifications sont perdues quand la machine virtuelle est
+ rallumée la fois suivante. Il en résulte que, contrairement aux images
+ « normal », la même image immuable peut être utilisée avec plusieurs
+ machines virtuelles sans restrictions.</para>
+
+ <para><emphasis>Créer</emphasis> une image immuable n'a pas beaucoup de
+ sens puisqu'elle serait vide au départ et perdrait son contenu à chaque
+ redémarrage de la machine (sauf si vous voulez vraiment avoir un disque
+ non formaté quand la machine démarre). Il en résulte que normalement,
+ vous créeriez d'abord une image « normal », puis lorsque vous considérez
+ que son contenu est utile, vous la marqueriez plus tard comme immuable
+ en utilisant <computeroutput>VBoxManage modifyhd</computeroutput> ;
+ merci de voir de nouveau le <xref linkend="vboxmanage-modifyvdi" />.
+ Sinon, ouvrez une image existante en mode « immuable » en utilisant
+ <computeroutput>VBoxManage openmedium</computeroutput>.</para>
+
+ <para>Si vous faites un instantané d'une machine avec des images immuables,
+ à chaque arrêt de la machine, ces images seront réinitialisées à l'état
+ du dernier (l'actuel) instantané (et pas à l'état de l'image immuable
+ d'origine).</para>
+
+ <note>
+ <para>En guise d'exception spéciale, les images immuables <emphasis>ne
+ sont pas</emphasis> réinitialisées si elles sont attachées à une
+ machine dont on a fait le dernier instantané alors que la machine
+ était en fonction (ce que l'on appelle un instantané « en ligne »). Il
+ en résulte que si le instantané actuel de la machine est comme un
+ instantané « en ligne », ses images immuables se comportent exactement
+ comme les images normales décrites précédemment. Pour réactiver la
+ réinitialisation automatique de telles images, effacez le instantané
+ actuel de la machine.</para>
+ </note>
+
+ <para>À nouveau, techniquement, VirtualBox n'écrit jamais directement
+ sur une image immuable. Toutes les opérations d'écriture depuis la
+ machine seront redirigées vers une image de différenciation ; la
+ prochaine fois que la VM sera allumée, l'image de différenciation est
+ réinitialisée de sorte que chaque fois que la VM démarre, ses images
+ immuables ont exactement le même contenu.<footnote>
+ <para>Ce comportement a aussi changé avec VirtualBox 2.2. Auparavant,
+ les images de différenciation étaient désactivées quand la session
+ de la machine <emphasis>se terminait</emphasis> ; maintenant, elles
+ sont désactivées à chaque fois que la machine est allumée.</para>
+ </footnote> L'image de différenciation n'est réinitialisée que lorsque
+ la machine est allumée depuis l'intérieur de VirtualBox, pas quand
+ vous redémarrez en demandant un redémarrage depuis la machine. C'est
+ aussi pourquoi les images immuables se comportent comme décrit
+ ci-dessus quand les instantanés sont également présents, ce qui utilise
+ des images de différenciation.</para>
+
+ <para>Si la non prise en compte automatique des images de différenciation
+ au démarrage de la VM ne correspond pas à vos besoins, vous pouvez la
+ désactiver en utilisant le paramètre <computeroutput>autoreset</computeroutput>
+ de <computeroutput>VBoxManage modifyhd</computeroutput> ; voir le <xref
+ linkend="vboxmanage-modifyvdi" /> pour des détails.</para>
+ </listitem>
+ </orderedlist>
+
+ <para>Pour illustrer les variations entre les divers types du point de vue
+ des instantanés : Supposons que vous ayez installé votre système
+ d'exploitation invité dans votre VM et que vous ayez fait un instantané.
+ Imaginons que vous ayez infecté par accident votre VM avec un virus et que
+ vous aimeriez revenir au instantané. Avec une image de disque dur normale,
+ vous restaurez simplement le instantané et l'état précédent de l'image de
+ votre disque dur sera restaurée (et votre infection par un virus sera annulée).
+ Avec un disque dur immuable, tout ce qu'il y a à faire est d'éteindre et
+ d'allumer votre VM, et l'infection par le virus sera désactivée. Néanmoins,
+ avec une image de disque write-through, vous ne pouvez pas facilement annuler
+ l'infection par le virus via la virtualisation, mais vous devrez désinfecter
+ votre machine virtuelle comme un vrai ordinateur.</para>
+
+ <para>Vous pourriez encore toujours trouver les images write-though utiles
+ si vous voulez préserver des données critiques indépendamment des instantanés,
+ et comme vous pouvez attacher plus d'une image à une VM, il se peut que vous
+ vouliez avoir une immuable pour le système d'exploitation et une
+ write-through pour vos fichiers de données.</para>
+ </sect1>
+
+ <sect1 id="diffimages">
+ <title>Images de différenciation</title>
+
+ <para>La section précédente traitait des images de différenciation et de la
+ façon dont elles sont utilisées avec les instantanés, les images immuables
+ et les attachements de plusieurs disques. Pour l'utilisateur de VirtualBox
+ curieux, cette section décrit avec davantage de détails comment elles
+ fonctionnent.</para>
+
+ <para>Une image de différenciation est une image de disque spéciale qui ne
+ conserve que les différences avec une autre image. Elle est en soi inutile,
+ elle doit toujours se référer à une autre image. L'image de différenciation
+ est alors vue en général comme une « fille » qui conserve les différences
+ par rapport à son « parent ».</para>
+
+ <para>Quand une image de différenciation est active, elle reçoit toutes les
+ opérations d'écriture depuis la machine virtuelle à la place de son parent.
+ L'image de différenciation ne contient que les secteurs du disque virtuel
+ qui a changé depuis que l'image de différenciation a été créée. Quand la
+ machine lit un secteur depuis un tel disque dur virtuel, il regarde d'abord
+ dans l'image de différenciation. Si le secteur est présent, il est retourné
+ depuis celui-ci ; sinon VirtualBox regarde dans le parent. En d'autres
+ termes, le parent devient en « lecture seule » ; on n'y écrit plus, mais on
+ lit à partir de celui ci si un secteur n'a pas changé.</para>
+
+ <para>Les images de différenciation peuvent être chaînées. Si vous créez une
+ autre image de différenciation pour un disque virtuel qui a déjà une image
+ de différenciation, elle devient un « petit-fils » du parent d'origine. La
+ première image de différenciation devient alors en lecture seule, et les
+ opérations d'écriture ne vont que sur l'image de différenciation de second
+ niveau. Lors de la lecture à partir du disque virtuel, VirtualBox doit
+ d'abord regarder d'abord dans la deuxième image de différenciation, puis
+ dans la première si le secteur n'a pas été trouvé puis dans l'image d'origine.</para>
+
+ <para>Il peut y avoir un nombre illimité d'images de différenciation et
+ chaque image peut avoir plus d'un enfant. Il en résulte que les images de
+ différenciation peuvent constituer une arborescence complexe avec des parents,
+ des « frères » et des enfants selon la complexité de la configuration de
+ votre machine. Les opérations d'écriture vont toujours sur l'image de
+ différenciation « active » attachée à la machine, et pour des opérations de
+ lecture, il se peut que VirtualBox ait besoin de de regarder dans presque
+ tous les parents de la chaîne jusqu'à ce qu'il trouve le secteur en question.
+ Vous pouvez regarder une telle arborescence dans le gestionnaire de médias
+ virtuels :<mediaobject>
+ <imageobject>
+ <imagedata align="center" fileref="../en_US/images/virtual-disk-manager2.png"
+ width="10cm" />
+ </imageobject>
+ </mediaobject></para>
+
+ <para>Dans toutes ces situations, du point de vue de la machine virtuelle,
+ le disque dur virtuel se comporte comme n'importe quel autre disque. Pendant
+ que la machine virtuelle est en fonction, il y a une légere surcharge d'E/S
+ en cours d'exécution car il se peut que VirtualBox doive regarder des
+ secteurs plusieurs fois. Cela n'est cependant pas observable puisque les
+ tables avec des informations de secteurs sont toujours conservées en mémoire
+ et peuvent être inspectées rapidement.</para>
+
+ <para>Les images de différenciation sont utilisées dans les situations
+ suivantes :<orderedlist>
+ <listitem>
+ <para><emphasis role="bold">Les instantanés.</emphasis> Quand vous
+ créez un instantané, comme expliqué dans la section précédente,
+ VirtualBox « gèle » les images attachées à la machine virtuelle et
+ crée des images de différenciation pour chacune d'elles (pour être
+ précis, une pour chaque image non en mode « write-through »). Du point
+ de vue de la machine virtuelle, les disques virtuels continuent d'agir
+ comme avant mais toutes les opérations d'écriture vont sur les images
+ de différenciation. Chaque fois que vous créez un autre instantané,
+ pour chaque attachement de disque dur, une autre image de différenciation
+ est créée et attachée, constituant une chaîne ou une arborescence.</para>
+
+ <para>Dans la capture d'écran ci-dessus, vous voyez que l'image de
+ disque d'origine est maintenant attachée à un instantané,
+ représentant l'état du disque quand le instantané a été fait.</para>
+
+ <para>Si vous <emphasis role="bold">restaurez</emphasis> maintenant un
+ instantané - c'est-à-dire si vous voulez revenir à l'état exact de la
+ machine qui a été stocké dans le instantané -, ce qui suit se produit :<orderedlist>
+ <listitem>
+ <para>VirtualBox copie les paramètres de la
+ machine virtuelle qui ont été copiés dans le instantané vers la
+ machine virtuelle. Il en résulte que si vous avez fait des
+ changements sur la configuration de la machine depuis que vous
+ avez fait le instantané, elles sont annulées.</para>
+ </listitem>
+
+ <listitem>
+ <para>Si l'instantané a été pris alors que la machine était en
+ fonction, son contenu a un état de machine sauvegardé et cet
+ état est restauré ; après la restauration du instantané, la
+ machine sera alors en état « sauvegardée » et reprendra
+ l'exécution là où se trouve le démarrage suivant. Sinon la
+ machine sera dans l'état « Coupée » et fera un démarrage complet.</para>
+ </listitem>
+
+ <listitem>
+ <para>Pour chaque image de disque attachée à la machine, l'image
+ de différenciation qui conserve toutes les opérations d'écriture
+ depuis que le instantané actuel a été pris est projetée et
+ l'image parente d'origine est à nouveau activée. (Si vous avez
+ restauré le instantané « racine », elle sera l'image de disque
+ racine de chaque élément attaché ; sinon une autre image de
+ différenciation proviennent d'elle.) Ceci restaure en fait
+ l'ancien état de la machine.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>Si vous <emphasis role="bold">effacez</emphasis> ultérieurement
+ un instantané pour libérer de l'espace disque, pour chaque attachement
+ de disque, une des images de différenciation devient obsolète. Dans ce
+ cas, l'image de différenciation de l'attachement du disque ne peut pas
+ être simplement effacée. VirtualBox doit au contraire regarder chaque
+ secteur de l'image de différenciation et doit le copier vers son parent
+ ; cela s'appelle du « merging » d'image et peut être un processus
+ potentiellement long selon la taille
+ de l'image de différenciation. Il peut aussi nécessiter temporairement
+ une quantité de d'espace disque supplémentaire substantielle, avant
+ que l'image de différenciation devenue obsolète avec l'opération de
+ merging ne seit effacée.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Images immuables.</emphasis> Quand on
+ bascule une image en mode « immuable », une image de différenciation
+ est créée. Comme avec les instantanés, l'image parent devient alors en
+ lecture seule et l'image de différenciation reçoit toutes les opérations
+ d'écriture. Chaque fois qu'on démarre la machine virtuelle, toutes les
+ images immuables qui y sont attachées ont leur propre image de
+ différenciation qui apparaît, réinitialisant effectivement le disque
+ virtuel de la machine virtuelle à chaque redémarrage.</para>
+ </listitem>
+ </orderedlist></para>
+ </sect1>
+
+ <sect1 id="cloningvdis">
+ <title>Cloner des images de disque</title>
+
+ <para>Vous pouvez dupliquer des fichiers images de disque dur sur le même
+ hôte pour rapidement créer une seconde machine virtuelle avec le même
+ paramétrage de système d'exploitation. Cependant, <emphasis>vous ne devriez
+ faire de copies d'images de disques durs virtuels qu'en utilisant</emphasis>
+ l'outil fourni avec VirtualBox ; voir le <xref linkend="vboxmanage-clonevdi" />.
+ Car VirtualBox donne un un numéro d'identité unique (UUID) à chaque image de
+ disque, qui est également stocké dans l'image, et VirtualBox refusera de
+ fonctionner avec deux images qui utilisent le même numéro Si vous essayez
+ accidentellement de réimporter une image de disque que vous avez copiée
+ normalement, vous pouvez faire une deuxième copie en utilisant l'outil de
+ VirtualBox et l'importer à la place.</para>
+
+ <para>Remarquez que les distributions Linux récentes identifient le disque
+ d'amorçage à partir de l'ID du disque. Les signalements de l'ID VirtualBox
+ sont déterminés à partir de l'UUID de l'image du disque virtuel. Donc si
+ vous clonez une image de disque et si vous essayez de démarrer sur l'image
+ copiée, il se pourrait que l'invité ne puisse pas déterminer son propre
+ disque d'amorçage vu que l'UUID a changé. Dans ce cas, vous devez adapter
+ l'ID du disque dans votre script de chargeur de démarrage (par exemple
+ <computeroutput>/boot/grub/menu.lst</computeroutput>). L'ID du disque
+ ressemble à ceci : <screen>scsi-SATA_VBOX_HARDDISK_VB5cfdb1e2-c251e503</screen></para>
+
+ <para>Vous pouvez déterminer l'ID de l'image copiée avec <screen>hdparm -i /dev/sda</screen></para>
+ </sect1>
+
+ <sect1 id="iocaching">
+ <title>Images de disque et mise en cache E/S</title>
+
+ <para>VirtualBox peut éventuellement désactiver la mise en cache E/S
+ qu'effectuerait sinon le système d'exploitation hôte sur les fichiers images
+ de disque.</para>
+
+ <para>Traditionnellement, VirtualBox ouvre les fichiers images de disque
+ comme des normaux, ce qui fait qu'ils sont mis en cache par le système
+ d'exploitation hôte, comme n'importe quel autre fichier. Le principal
+ avantage de ceci est la vitesse : quand l'OS invité écrit sur le disque et
+ lorsque le cache de l'OS hôte utilise l'écriture différée, l'opération
+ d'écriture peut être reportée tout en étant effectuée rapidement sur l'OS
+ invité, tandis que l'hôte peut effectuer l'opération de façon non
+ synchronisée. En outre, quand vous démarrez une VM une deuxième fois et si
+ vous avez assez de mémoire disponible pour que l'OS l'utilise pour la mise
+ en cache, il se peut que de grandes parties du disque virtuel restent dans
+ la mémoire du système, la VM peut accéder aux données beaucoup plus rapidement.</para>
+
+ <para>Remarquez que cela ne s'applique que sur des fichiers images ; la mise
+ en tampon n'affecte jamais les disques virtuels résidant sur des supports de
+ stockage iSCSI distants, ce qui est le scénario le plus courant sur des
+ configurations d'entreprise. (voir <xref
+ linkend="storage-iscsi" />).</para>
+
+ <para>Si la mise en tampon est un paramètre par défaut utile pour virtualiser
+ quelques machines sur un ordinateur de bureau, cette approche comporte
+ certains inconvénients :<orderedlist>
+ <listitem>
+ <para>L'écriture différée à travers le cache de l'OS hôte est moins
+ sécurisée. Quand l'OS invité écrit des données, il considère qu'elles
+ sont écrites même si elles ne sont pas encore arrivé sur un disque
+ physique. Si pour une raison quelconque l'écriture ne se produit pas
+ (panne de courant, plantage de l'hôte), les chances de perdre des
+ données sont accrues.</para>
+ </listitem>
+
+ <listitem>
+ <para>Les fichiers images de disque ont tendance à être très gros. Les
+ mettre en cache peut donc rapidement utiliser jusqu'à l'ensemble du
+ cache de l'OS hôte. Selon l'efficacité de la mise en cache de l'OS
+ hôte, cela peut ralentir énormément l'hôte, surtout si plusieurs VMs
+ fonctionnent en même temps. Par exemple, sur des hôtes Linux, il peut
+ résulter de la mise en cache de l'hôte que Linux diffère toutes les
+ écritures jusqu'à ce que le cache de l'hôte soit presque plein, alors
+ l'écriture de tous ces changements en une seule fois peut éventuellement
+ figer l'exécution de la VM pendant quelques minutes. Il peut s'en
+ suivre des erreurs E/S dans l'invité du fait du timeout de requête des
+ E/S sur ceux-ci.</para>
+ </listitem>
+
+ <listitem>
+ <para>La mémoire physique est souvent gaspillée vu que les systèmes
+ d'exploitation invités ont leurs propres caches E/S, ce qui peut
+ aboutir à ce que les données soient mises en cache deux fois (à la
+ fois dans les caches de l'invité et de l'hôte) pour un résultat limité.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>Il s'en suit que, à partir de la version 3.2, VirtualBox vous permet
+ éventuellement de désactiver la mise en cache E/S de l'hôte des fichiers
+ images de disque. Dans ce cas, VirtualBox utilise son propre petit cache
+ pour mettre les écritures en tampon, mais il n'y a pas de mise en cache de
+ lecture puisque ceci est déjà fait par l'OS invité. En outre, VirtualBox
+ supporte complètement l'E/S asynchrone pour ses contrôleurs virtuels SATA,
+ SCSI et SAS à travers divers fils d'E/S.</para>
+
+ <para>Comme l'E/S asynchrone n'est pas supportée par les contrôleurs IDE,
+ pour des raisons de performance, il se peut que vous souhaitiez laisser la
+ mise en cache activée pour les contrôleurs IDE virtuels de votre VM.</para>
+
+ <para>C'est pourquoi VirtualBox vous permet de configurer si le cache E/S de
+ l'hôte est utilisé pour chaque contrôleur E/S séparément. Soit décochez la
+ case « Utiliser le cache E/S de l'hôte » des paramètres « Stockage » pour un
+ contrôleur de stockage virtuel donné, soit utilisez la commande VBoxManage
+ suivante pour désactiver le cache E/S de l'hôte pour un contrôleur de
+ stockage virtuel :<screen>VBoxManage storagectl &lt;vm&gt; --name &lt;nomcontrôleur&gt; --hostiocache off</screen></para>
+
+ <para>Voir <xref linkend="vboxmanage-storagectl" /> pour des détails.</para>
+
+
+ <para>De même, pour les raisons évoquées ci-dessus, VirtualBox utilise
+ maintenant par défaut des contrôleurs SATA pour les nouvelles machines
+ virtuelles.</para>
+
+ <note>
+ <para>La désactivation des caches E/S de l'hôte donnera de faibles performances actuellement avec les fichiers VHD et sparse VMDK. Voir le <xref linkend="KnownIssues" /> pour les détails.</para>
+ </note>
+ </sect1>
+
+ <sect1 id="storage-bandwidth-limit">
+ <title>Limiting bandwidth for disk images</title>
+
+ <para>Starting with version 4.0, VirtualBox allows for limiting the
+ maximum bandwidth used for asynchronous I/O. Additionally it supports
+ sharing limits through bandwidth groups for several images. It is possible
+ to have more than one such limit.</para>
+
+ <para>Limits are configured through
+ <computeroutput>VBoxManage</computeroutput>. The example below creates a
+ bandwidth group named "Limit", sets the limit to 20 MB/s and assigns the
+ group to the attached disks of the VM:<screen>VBoxManage bandwidthctl "VM name" --name Limit --add disk --limit 20
+VBoxManage storageattach "VM name" --controller "SATA" --port 0 --device 0 --type hdd
+ --medium disk1.vdi --bandwidthgroup Limit
+VBoxManage storageattach "VM name" --controller "SATA" --port 1 --device 0 --type hdd
+ --medium disk2.vdi --bandwidthgroup Limit</screen></para>
+
+ <para>All disks in a group share the bandwidth limit, meaning that in the
+ example above the bandwidth of both images combined can never exceed 20
+ MB/s. However if one disk doesn't require bandwidth the other can use the
+ remaining bandwidth of its group.</para>
+
+ <para>The limits for each group can be changed while the VM is running,
+ with changes being picked up immediately. The example below changes the
+ limit for the group created in the example above to 10 MB/s:<screen>VBoxManage bandwidthctl "VM name" --name Limit --limit 10</screen></para>
+ </sect1>
+
+ <sect1 id="storage-cds">
+ <title>Opération sur le lecteur de CD/DVD</title>
+
+ <para>Le(s) lecteur(s) de CD/DVD par défaut ne supporte(nt) que la lecture.
+ La configuration du média peut être modifiée au moment de l'exécution. Vous
+ pouvez choisir entre trois options pour fournir les données au média :<itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">Lecteur hôte</emphasis> définit que
+ l'invité peut lire depuis le média dans le lecteur hôte. Les changements
+ de média des lecteurs hôtes sont signalés à l'invité.</para>
+ </listitem>
+
+ <listitem>
+ <para>Le <emphasis role="bold">fichier image</emphasis> donne à
+ l'invité l'accès en lecture seule aux données de l'image (souvent
+ mentionnée comme image ISO). Un changement de média est signalé lors
+ du basculement vers une image différente ou de la sélection d'une autre
+ option.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">EVide</emphasis> est pour un lecteur sans
+ média inséré. Le lecteur répond comme d'habitude à la situation, mais
+ aucune donnée ne peut être lue.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>Comme déjà mentionné, les signalements de changements de média dépendent
+ des options sélectionnées pour le média. Les changements de média peuvent
+ être empêchés par l'invité et VirtualBox le répercute en verrouillant le
+ lecteur hôte si nécessaire. Vous pouvez forcer la suppression d'un média
+ dans une telle situation par l'interface graphique de VirtualBox ou l'outil
+ en ligne de commande VBoxManage. En fait, cela revient à une éjection
+ d'urgence fournie par beaucoup de lecteurs CD/DVD avec tous les effets
+ colatéraux associés. L'OS invité peut renvoyer des messages d'erreur dans
+ ce cas, comme sur du vrai matériel. Utilisez ceci avec prudence.</para>
+
+ <para>Dans tous les cas, seuls des médias de données sont supportées pour les
+ lecteurs de CD/DVD. Cela signifie que tous les formats de CD de données et
+ tous les formats DVD peuvent en principe être utilisés. Comme les lecteurs
+ DVD hôte refusent de lire des médias vidéos DVD chiffrés, vous ne pouvez
+ pas jouer de telles vidéos avec l'émulation de CD/DVD régulière. Il se peut
+ que vous réussissiez à le faire fonctionner avec le support expérimental
+ passthrough décrit au <xref linkend="storage-write-cds" />.</para>
+
+ <para>Les formats de CD audio et de CD vidéo ne sont pas supportés, ce qui
+ signifie que vous ne pouvez pas jouer de tels médias depuis une machine
+ virtuelle.</para>
+ </sect1>
+
+ <sect1 id="storage-write-cds">
+ <title>Écrire des CDs et des DVDs en utilisant le lecteur hôte</title>
+
+ <para>Quand vous attachez le lecteur CD/DVD de votre hôte à une machine
+ virtuelle (voir le <xref linkend="settings-storage" />), cela donne en
+ principe à la machine un accès en lecture seule au lecteur hôte. Cela empêche
+ l'invité d'écrire sur le lecteur hôte. En particulier, vous ne pouvez pas
+ graver de CDs et de DVDs depuis l'invité de cette façon.</para>
+
+
+ <para>En fonctionnalité expérimentale (qui ne fonctionne actuellement que
+ pour les médias de données, les formats de CD audio, vidéo ne sont pas
+ supportés), il est possible de donner à l'invité l'accès aux fonctionnalités
+ d'écriture de CD/DVD du lecteur hôte (si disponibles). Il y a une case à
+ cocher « Passthrough » dans la boîte de dialogue de l'interface graphique
+ pour configurer le média attaché à un contrôleur de stockage, ou vous pouvez
+ utiliser la ligne de commande :</para>
+
+ <screen>VBoxManage storageattach &lt;uuid|nomvm&gt;
+ --storagectl &lt;nom&gt;
+ --port &lt;numéro&gt;
+ --device &lt;numéro&gt;
+ [--type &lt;dvddrive|hdd|fdd&gt;
+ --medium &lt;none|emptydrive|uuid|filename|host:&lt;drive&gt;&gt;]
+ [--passthrough &lt;on|off&gt;]
+ [--forceunmount]</screen>
+
+ <para>Voir aussi <xref linkend="vboxmanage-storageattach" />.</para>
+
+ <para>Même si pass-through est activé, des commandes risquées telles que la
+ mise à jour du firmware du lecteur seront bloquées. Sur certains lecteurs
+ hôtes, la fonctionnalité pass-through permet de jouer des médias vidéos DVD
+ chiffrés.</para>
+
+ <para>Sur les hôtes Solaris, le path-through exige de lancer VirtualBox avec
+ les droits du vrai administrateur du fait de mesures de sécurité renforcées
+ par l'hôte.</para>
+ </sect1>
+
+ <sect1>
+ <title id="storage-iscsi">Serveurs iSCSI</title>
+
+ <para>iSCSI signifie « Internet SCSI » et c'est un standard qui permet
+ d'utiliser le protocole SCSI à travers des connexions Internet ((TCP/IP).
+ Surtout avec l'arrivée de l'Internet haut débit (Gigabit Ethernet), il devient
+ envisageable d'attacher des serveurs de stockage iSCSI simplement en tant
+ que disques durs distants à un réseau d'ordinateurs. Dans la terminologie
+ iSCSI, le serveur qui fournit les ressources de stockage est appelé une
+ « cible iSCSI », tandis que le client qui se connecte au serveur et accède
+ à ses ressources est appelé « l'initiateur iSCSI ».</para>
+
+ <para>VirtualBox peut présenter de façon intégréte à une machine virtuelle
+ du stockage distant iSCSI comme un disque dur virtuel. Le système
+ d'exploitation invité ne verra aucune différence entre une image de disque
+ virtuelle (fichier VDI) et une cible iSCSI. Pour faire cela, VirtualBox a un
+ initiateur iSCSI intégré.</para>
+
+ <para>Le support iSCSI de VirtualBox a été développé en fonction du standard
+ iSCSI et il devrait fonctionner avec toutes les cibles iSCSI standards
+ conformes au modèle. Pour utiliser une cible iSCSI avec VirtualBox, vous
+ devez d'abord l'enregistrer en tant que disque dur virtuel avec
+ <computeroutput>VBoxManage</computeroutput> ; voir
+ <xref linkend="vboxmanage-storageattach" />. La cible apparaîtra dans la liste
+ d'images de disques, comme décrit au <xref linkend="vdis" />, et peut ainsi
+ être attachée à l'un des trois emplacements de disque dur de la VM de façon
+ ordinaire.</para>
+ </sect1>
+</chapter>
diff --git a/doc/manual/fr_FR/user_Technical.xml b/doc/manual/fr_FR/user_Technical.xml
new file mode 100644
index 00000000..7b757e81
--- /dev/null
+++ b/doc/manual/fr_FR/user_Technical.xml
@@ -0,0 +1,893 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<chapter id="TechnicalBackground">
+ <title>Technical background</title>
+
+ <para>The contents of this chapter are not required to use VirtualBox
+ successfully. The following is provided as additional information for
+ readers who are more familiar with computer architecture and technology and
+ wish to find out more about how VirtualBox works "under the hood".</para>
+
+ <sect1 id="vboxconfigdata">
+ <title>Where VirtualBox stores its files</title>
+
+ <para>In VirtualBox, a virtual machine and its settings are described in a
+ virtual machine settings file in XML format. In addition, most virtual
+ machine have one or more virtual hard disks, which are typically
+ represented by disk images (e.g. in VDI format). Where all these files are
+ stored depends on which version of VirtualBox created the machine.</para>
+
+ <sect2>
+ <title>Machines created by VirtualBox version 4.0 or later</title>
+
+ <para>Starting with version 4.0, by default, each virtual machine has
+ one directory on your host computer where all the files of that machine
+ are stored -- the XML settings file (with a
+ <computeroutput>.vbox</computeroutput> file extension) and its disk
+ images.</para>
+
+ <para>By default, this "machine folder" is placed in a common folder
+ called "VirtualBox VMs", which VirtualBox creates in the current system
+ user's home directory. The location of this home directory depends on
+ the conventions of the host operating system:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>On Windows, this is
+ <computeroutput>%HOMEDRIVE%%HOMEPATH%</computeroutput>; typically
+ something like <computeroutput>C:\Documents and
+ Settings\Username\</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para>On Mac OS X, this is
+ <computeroutput>/Users/username</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para>On Linux and Solaris, this is
+ <computeroutput>/home/username</computeroutput>.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>For simplicity, we will abbreviate this as
+ <computeroutput>$HOME</computeroutput> below. Using that convention, the
+ common folder for all virtual machines is
+ <computeroutput>$HOME/VirtualBox VMs</computeroutput>.</para>
+
+ <para>As an example, when you create a virtual machine called "Example
+ VM", you will find that VirtualBox creates<orderedlist>
+ <listitem>
+ <para>the folder <computeroutput>$HOME/VirtualBox VMs/Example
+ VM/</computeroutput> and, in that folder,</para>
+ </listitem>
+
+ <listitem>
+ <para>the settings file <computeroutput>Example
+ VM.vbox</computeroutput> and</para>
+ </listitem>
+
+ <listitem>
+ <para>the virtual disk image <computeroutput>Example
+ VM.vdi</computeroutput>.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>This is the default layout if you use the "Create new virtual
+ machine" wizard as described in <xref linkend="gui-createvm" />. Once
+ you start working with the VM, additional files will show up: you will
+ find log files in a subfolder called
+ <computeroutput>Logs</computeroutput>, and once you have taken
+ snapshots, they will appear in a
+ <computeroutput>Snapshots</computeroutput> subfolder. For each VM, you
+ can change the location of its snapsnots folder in the VM
+ settings.</para>
+
+ <para>You can change the default machine folder by selecting
+ "Preferences" from the "File" menu in the VirtualBox main window. Then,
+ in the window that pops up, click on the "General" tab. Alternatively,
+ use <computeroutput>VBoxManage setproperty
+ machinefolder</computeroutput>; see <xref
+ linkend="vboxmanage-setproperty" />.</para>
+ </sect2>
+
+ <sect2>
+ <title>Machines created by VirtualBox versions before 4.0</title>
+
+ <para>If you have upgraded to VirtualBox 4.0 from an earlier version of
+ VirtualBox, you probably have settings files and disks in the earlier
+ file system layout.</para>
+
+ <para>Before version 4.0, VirtualBox separated the machine settings
+ files from virtual disk images. The machine settings files had an
+ <computeroutput>.xml</computeroutput> file extension and resided in a
+ folder called "Machines" under the global VirtualBox configuration
+ directory (see the next section). So, for example, on Linux, this was
+ the hidden <computeroutput>$HOME/.VirtualBox/Machines</computeroutput>
+ directory. The default hard disks folder was called "HardDisks" and
+ resided in the <computeroutput>.VirtualBox</computeroutput> folder as
+ well. Both locations could be changed by the user in the global
+ preferences. (The concept of a "default hard disk folder" has been
+ abandoned with VirtualBox 4.0, since disk images now reside in each
+ machine's folder by default.)</para>
+
+ <para>The old layout had several severe disadvantages.<orderedlist>
+ <listitem>
+ <para>It was very difficult to move a virtual machine from one
+ host to another because the files involved did not reside in the
+ same folder. In addition, the virtual media of all machines were
+ registered with a global registry in the central VirtualBox
+ settings file
+ (<computeroutput>$HOME/.VirtualBox/VirtualBox.xml</computeroutput>).</para>
+
+ <para>To move a machine to another host, it was therefore not
+ enough to move the XML settings file and the disk images (which
+ were in different locations), but the hard disk entries from the
+ global media registry XML had to be meticulously copied as well,
+ which was close to impossible if the machine had snapshots and
+ therefore differencing images.</para>
+ </listitem>
+
+ <listitem>
+ <para>Storing virtual disk images, which can grow very large,
+ under the hidden <computeroutput>.VirtualBox</computeroutput>
+ directory (at least on Linux and Solaris hosts) made many users
+ wonder where their disk space had gone.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>Whereas new VMs created with VirtualBox 4.0 or later will conform
+ to the new layout, for maximum compatibility, old VMs are
+ <emphasis>not</emphasis> converted to the new layout. Otherwise machine
+ settings would be irrevocably broken if a user downgraded from 4.0 back
+ to an older version of VirtualBox.</para>
+ </sect2>
+
+ <sect2>
+ <title>Global configuration data</title>
+
+ <para>In addition to the files of the virtual machines, VirtualBox
+ maintains global configuration data. On Windows, Linux and Solaris, this
+ is in <computeroutput>$HOME/.VirtualBox</computeroutput> (which makes it
+ hidden on Linux and Solaris), whereas on a Mac this resides in
+ <computeroutput>$HOME/Library/VirtualBox</computeroutput>.</para>
+
+ <para>VirtualBox creates this configuration directory automatically if
+ necessary. Optionally, you can supply an alternate configuration
+ directory by setting the
+ <computeroutput><literal>VBOX_USER_HOME</literal></computeroutput>
+ environment variable. (Since the global
+ <computeroutput>VirtualBox.xml</computeroutput> settings file points to
+ all other configuration files, this allows for switching between several
+ VirtualBox configurations entirely.)</para>
+
+ <para>Most importantly, in this directory, VirtualBox stores its global
+ settings file, another XML file called
+ <computeroutput>VirtualBox.xml</computeroutput>. This includes global
+ configuration options and the list of registered virtual machines with
+ pointers to their XML settings files. (Neither the location of this file
+ nor its directory has changed with VirtualBox 4.0.)</para>
+
+ <para>Before VirtualBox 4.0, all virtual media (disk image files) were
+ also contained in a global registry in this settings file. For
+ compatibility, this media registry still exists if you upgrade
+ VirtualBox and there are media from machines which were created with a
+ version before 4.0. If you have no such machines, then there will be no
+ global media registry; with VirtualBox 4.0, each machine XML file has
+ its own media registry.</para>
+
+ <para>Also before VirtualBox 4.0, the default "Machines" folder and the
+ default "HardDisks" folder resided under the VirtualBox configuration
+ directory (e.g.
+ <computeroutput>$HOME/.VirtualBox/Machines</computeroutput> on Linux).
+ If you are upgrading from a VirtualBox version before 4.0, files in
+ these directories are not automatically moved in order not to break
+ backwards compatibility.</para>
+ </sect2>
+
+ <sect2>
+ <title>Summary of 4.0 configuration changes</title>
+
+ <table>
+ <title>ignoreme</title>
+
+ <tgroup cols="3">
+ <tbody>
+ <row>
+ <entry></entry>
+
+ <entry><emphasis role="bold">Before 4.0</emphasis></entry>
+
+ <entry><emphasis role="bold">4.0 or above</emphasis></entry>
+ </row>
+
+ <row>
+ <entry>Default machines folder</entry>
+
+ <entry><computeroutput>$HOME/.VirtualBox/Machines</computeroutput></entry>
+
+ <entry><computeroutput>$HOME/VirtualBox
+ VMs</computeroutput></entry>
+ </row>
+
+ <row>
+ <entry>Default disk image location</entry>
+
+ <entry><computeroutput>$HOME/.VirtualBox/HardDisks</computeroutput></entry>
+
+ <entry>In each machine's folder</entry>
+ </row>
+
+ <row>
+ <entry>Machine settings file extension</entry>
+
+ <entry><computeroutput>.xml</computeroutput></entry>
+
+ <entry><computeroutput>.vbox</computeroutput></entry>
+ </row>
+
+ <row>
+ <entry>Media registry</entry>
+
+ <entry>Global <computeroutput>VirtualBox.xml</computeroutput>
+ file</entry>
+
+ <entry>Each machine settings file</entry>
+ </row>
+
+ <row>
+ <entry>Media registration</entry>
+
+ <entry>Explicit open/close required</entry>
+
+ <entry>Automatic on attach</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect2>
+
+ <sect2>
+ <title>VirtualBox XML files</title>
+
+ <para>VirtualBox uses XML for both the machine settings files and the
+ global configuration file,
+ <computeroutput>VirtualBox.xml</computeroutput>.</para>
+
+ <para>All VirtualBox XML files are versioned. When a new settings file
+ is created (e.g. because a new virtual machine is created), VirtualBox
+ automatically uses the settings format of the current VirtualBox
+ version. These files may not be readable if you downgrade to an earlier
+ version of VirtualBox. However, when VirtualBox encounters a settings
+ file from an earlier version (e.g. after upgrading VirtualBox), it
+ attempts to preserve the settings format as much as possible. It will
+ only silently upgrade the settings format if the current settings cannot
+ be expressed in the old format, for example because you enabled a
+ feature that was not present in an earlier version of
+ VirtualBox.<footnote>
+ <para>As an example, before VirtualBox 3.1, it was only possible to
+ enable or disable a single DVD drive in a virtual machine. If it was
+ enabled, then it would always be visible as the secondary master of
+ the IDE controller. With VirtualBox 3.1, DVD drives can be attached
+ to arbitrary slots of arbitrary controllers, so they could be the
+ secondary slave of an IDE controller or in a SATA slot. If you have
+ a machine settings file from an earlier version and upgrade
+ VirtualBox to 3.1 and then move the DVD drive from its default
+ position, this cannot be expressed in the old settings format; the
+ XML machine file would get written in the new format, and a backup
+ file of the old format would be kept.</para>
+ </footnote> In such cases, VirtualBox backs up the old settings file
+ in the virtual machine's configuration directory. If you need to go back
+ to the earlier version of VirtualBox, then you will need to manually
+ copy these backup files back.</para>
+
+ <para>We intentionally do not document the specifications of the
+ VirtualBox XML files, as we must reserve the right to modify them in the
+ future. We therefore strongly suggest that you do not edit these files
+ manually. VirtualBox provides complete access to its configuration data
+ through its the <computeroutput>VBoxManage</computeroutput> command line
+ tool (see <xref linkend="vboxmanage" />) and its API (see <xref
+ linkend="VirtualBoxAPI" />).</para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="technical-components">
+ <title>VirtualBox executables and components</title>
+
+ <para>VirtualBox was designed to be modular and flexible. When the
+ VirtualBox graphical user interface (GUI) is opened and a VM is started,
+ at least three processes are running:<orderedlist>
+ <listitem>
+ <para><computeroutput>VBoxSVC</computeroutput>, the VirtualBox
+ service process which always runs in the background. This process is
+ started automatically by the first VirtualBox client process (the
+ GUI, <computeroutput>VBoxManage</computeroutput>,
+ <computeroutput>VBoxHeadless</computeroutput>, the web service or
+ others) and exits a short time after the last client exits. The
+ service is responsible for bookkeeping, maintaining the state of all
+ VMs, and for providing communication between VirtualBox components.
+ This communication is implemented via COM/XPCOM.<note>
+ <para>When we refer to "clients" here, we mean the local clients
+ of a particular <computeroutput>VBoxSVC</computeroutput> server
+ process, not clients in a network. VirtualBox employs its own
+ client/server design to allow its processes to cooperate, but
+ all these processes run under the same user account on the host
+ operating system, and this is totally transparent to the
+ user.</para>
+ </note></para>
+ </listitem>
+
+ <listitem>
+ <para>The GUI process, <computeroutput>VirtualBox</computeroutput>,
+ a client application based on the cross-platform Qt library. When
+ started without the <computeroutput>--startvm</computeroutput>
+ option, this application acts as the VirtualBox manager, displaying
+ the VMs and their settings. It then communicates settings and state
+ changes to <computeroutput>VBoxSVC</computeroutput> and also
+ reflects changes effected through other means, e.g.,
+ <computeroutput>VBoxManage</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para>If the <computeroutput>VirtualBox</computeroutput> client
+ application is started with the
+ <computeroutput>--startvm</computeroutput> argument, it loads the
+ VMM library which includes the actual hypervisor and then runs a
+ virtual machine and provides the input and output for the
+ guest.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>Any VirtualBox front-end (client) will communicate with the service
+ process and can both control and reflect the current state. For example,
+ either the VM selector or the VM window or VBoxManage can be used to pause
+ the running VM, and other components will always reflect the changed
+ state.</para>
+
+ <para>The VirtualBox GUI application is only one of several available
+ front ends (clients). The complete list shipped with VirtualBox
+ is:<orderedlist>
+ <listitem>
+ <para><computeroutput>VirtualBox</computeroutput>, the Qt front end
+ implementing the manager and running VMs;</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>VBoxManage</computeroutput>, a less
+ user-friendly but more powerful alternative, described in <xref
+ linkend="vboxmanage" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>VBoxSDL</computeroutput>, a simple graphical
+ front end based on the SDL library; see <xref
+ linkend="vboxsdl" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>VBoxHeadless</computeroutput>, a VM front end
+ which does not directly provide any video output and keyboard/mouse
+ input, but allows redirection via VirtualBox Remote Desktop Extension;
+ see <xref linkend="vboxheadless" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>vboxwebsrv</computeroutput>, the VirtualBox
+ web service process which allows for controlling a VirtualBox host
+ remotely. This is described in detail in the VirtualBox Software
+ Development Kit (SDK) reference; please see <xref
+ linkend="VirtualBoxAPI" /> for details.</para>
+ </listitem>
+
+ <listitem>
+ <para>The VirtualBox Python shell, a Python alternative to
+ VBoxManage. This is also described in the SDK reference.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>Internally, VirtualBox consists of many more or less separate
+ components. You may encounter these when analyzing VirtualBox internal
+ error messages or log files. These include:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>IPRT, a portable runtime library which abstracts file access,
+ threading, string manipulation, etc. Whenever VirtualBox accesses host
+ operating features, it does so through this library for cross-platform
+ portability.</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM (Virtual Machine Monitor), the heart of the
+ hypervisor.</para>
+ </listitem>
+
+ <listitem>
+ <para>EM (Execution Manager), controls execution of guest code.</para>
+ </listitem>
+
+ <listitem>
+ <para>REM (Recompiled Execution Monitor), provides software emulation
+ of CPU instructions.</para>
+ </listitem>
+
+ <listitem>
+ <para>TRPM (Trap Manager), intercepts and processes guest traps and
+ exceptions.</para>
+ </listitem>
+
+ <listitem>
+ <para>HWACCM (Hardware Acceleration Manager), provides support for
+ VT-x and AMD-V.</para>
+ </listitem>
+
+ <listitem>
+ <para>PDM (Pluggable Device Manager), an abstract interface between
+ the VMM and emulated devices which separates device implementations
+ from VMM internals and makes it easy to add new emulated devices.
+ Through PDM, third-party developers can add new virtual devices to
+ VirtualBox without having to change VirtualBox itself.</para>
+ </listitem>
+
+ <listitem>
+ <para>PGM (Page Manager), a component controlling guest paging.</para>
+ </listitem>
+
+ <listitem>
+ <para>PATM (Patch Manager), patches guest code to improve and speed up
+ software virtualization.</para>
+ </listitem>
+
+ <listitem>
+ <para>TM (Time Manager), handles timers and all aspects of time inside
+ guests.</para>
+ </listitem>
+
+ <listitem>
+ <para>CFGM (Configuration Manager), provides a tree structure which
+ holds configuration settings for the VM and all emulated
+ devices.</para>
+ </listitem>
+
+ <listitem>
+ <para>SSM (Saved State Manager), saves and loads VM state.</para>
+ </listitem>
+
+ <listitem>
+ <para>VUSB (Virtual USB), a USB layer which separates emulated USB
+ controllers from the controllers on the host and from USB devices;
+ this also enables remote USB.</para>
+ </listitem>
+
+ <listitem>
+ <para>DBGF (Debug Facility), a built-in VM debuger.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox emulates a number of devices to provide the hardware
+ environment that various guests need. Most of these are standard
+ devices found in many PC compatible machines and widely supported by
+ guest operating systems. For network and storage devices in
+ particular, there are several options for the emulated devices to
+ access the underlying hardware. These devices are managed by
+ PDM.</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest Additions for various guest operating systems. This is
+ code that is installed from within a virtual machine; see <xref
+ linkend="guestadditions" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>The "Main" component is special: it ties all the above bits
+ together and is the only public API that VirtualBox provides. All the
+ client processes listed above use only this API and never access the
+ hypervisor components directly. As a result, third-party applications
+ that use the VirtualBox Main API can rely on the fact that it is
+ always well-tested and that all capabilities of VirtualBox are fully
+ exposed. It is this API that is described in the VirtualBox SDK
+ mentioned above (again, see <xref linkend="VirtualBoxAPI" />).</para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1 id="hwvirt">
+ <title>Hardware vs. software virtualization</title>
+
+ <para>VirtualBox allows software in the virtual machine to run directly on
+ the processor of the host, but an array of complex techniques is employed
+ to intercept operations that would interfere with your host. Whenever the
+ guest attempts to do something that could be harmful to your computer and
+ its data, VirtualBox steps in and takes action. In particular, for lots of
+ hardware that the guest believes to be accessing, VirtualBox simulates a
+ certain "virtual" environment according to how you have configured a
+ virtual machine. For example, when the guest attempts to access a hard
+ disk, VirtualBox redirects these requests to whatever you have configured
+ to be the virtual machine's virtual hard disk -- normally, an image file
+ on your host.</para>
+
+ <para>Unfortunately, the x86 platform was never designed to be
+ virtualized. Detecting situations in which VirtualBox needs to take
+ control over the guest code that is executing, as described above, is
+ difficult. There are two ways in which to achive this:<itemizedlist>
+ <listitem>
+ <para>Since 2006, Intel and AMD processors have had support for
+ so-called <emphasis role="bold">"hardware
+ virtualization"</emphasis>. This means that these processors can
+ help VirtualBox to intercept potentially dangerous operations that a
+ guest operating system may be attempting and also makes it easier to
+ present virtual hardware to a virtual machine.</para>
+
+ <para>These hardware features differ between Intel and AMD
+ processors. Intel named its technology <emphasis
+ role="bold">VT-x</emphasis>; AMD calls theirs <emphasis
+ role="bold">AMD-V</emphasis>. The Intel and AMD support for
+ virtualization is very different in detail, but not very different
+ in principle.<note>
+ <para>On many systems, the hardware virtualization features
+ first need to be enabled in the BIOS before VirtualBox can use
+ them.</para>
+ </note></para>
+ </listitem>
+
+ <listitem>
+ <para>As opposed to other virtualization software, for many usage
+ scenarios, VirtualBox does not <emphasis>require</emphasis> hardware
+ virtualization features to be present. Through sophisticated
+ techniques, VirtualBox virtualizes many guest operating systems
+ entirely in <emphasis role="bold">software</emphasis>. This means
+ that you can run virtual machines even on older processors which do
+ not support hardware virtualization.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>Even though VirtualBox does not always require hardware
+ virtualization, enabling it is <emphasis>required</emphasis> in the
+ following scenarios:<itemizedlist>
+ <listitem>
+ <para>Certain rare guest operating systems like OS/2 make use of
+ very esoteric processor instructions that are not supported with our
+ software virtualization. For virtual machines that are configured to
+ contain such an operating system, hardware virtualization is enabled
+ automatically.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox's 64-bit guest support (added with version 2.0) and
+ multiprocessing (SMP, added with version 3.0) both require hardware
+ virtualization to be enabled. (This is not much of a limitation
+ since the vast majority of today's 64-bit and multicore CPUs ship
+ with hardware virtualization anyway; the exceptions to this rule are
+ e.g. older Intel Celeron and AMD Opteron CPUs.)</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <warning>
+ <para>Do not run other hypervisors (open-source or commercial
+ virtualization products) together with VirtualBox! While several
+ hypervisors can normally be <emphasis>installed</emphasis> in parallel,
+ do not attempt to <emphasis>run</emphasis> several virtual machines from
+ competing hypervisors at the same time. VirtualBox cannot track what
+ another hypervisor is currently attempting to do on the same host, and
+ especially if several products attempt to use hardware virtualization
+ features such as VT-x, this can crash the entire host. Also, within
+ VirtualBox, you can mix software and hardware virtualization when
+ running multiple VMs. In certain cases a small performance penalty will
+ be unavoidable when mixing VT-x and software virtualization VMs. We
+ recommend not mixing virtualization modes if maximum performance and low
+ overhead are essential. This does <emphasis>not</emphasis> apply to
+ AMD-V.</para>
+ </warning>
+ </sect1>
+
+ <sect1>
+ <title>Details about software virtualization</title>
+
+ <para>Implementing virtualization on x86 CPUs with no hardware
+ virtualization support is an extraordinarily complex task because the CPU
+ architecture was not designed to be virtualized. The problems can usually
+ be solved, but at the cost of reduced performance. Thus, there is a
+ constant clash between virtualization performance and accuracy.</para>
+
+ <para>The x86 instruction set was originally designed in the 1970s and
+ underwent significant changes with the addition of protected mode in the
+ 1980s with the 286 CPU architecture and then again with the Intel 386 and
+ its 32-bit architecture. Whereas the 386 did have limited virtualization
+ support for real mode operation (V86 mode, as used by the "DOS Box" of
+ Windows 3.x and OS/2 2.x), no support was provided for virtualizing the
+ entire architecture.</para>
+
+ <para>In theory, software virtualization is not overly complex. In
+ addition to the four privilege levels ("rings") provided by the hardware
+ (of which typically only two are used: ring 0 for kernel mode and ring 3
+ for user mode), one needs to differentiate between "host context" and
+ "guest context".</para>
+
+ <para>In "host context", everything is as if no hypervisor was active.
+ This might be the active mode if another application on your host has been
+ scheduled CPU time; in that case, there is a host ring 3 mode and a host
+ ring 0 mode. The hypervisor is not involved.</para>
+
+ <para>In "guest context", however, a virtual machine is active. So long as
+ the guest code is running in ring 3, this is not much of a problem since a
+ hypervisor can set up the page tables properly and run that code natively
+ on the processor. The problems mostly lie in how to intercept what the
+ guest's kernel does.</para>
+
+ <para>There are several possible solutions to these problems. One approach
+ is full software emulation, usually involving recompilation. That is, all
+ code to be run by the guest is analyzed, transformed into a form which
+ will not allow the guest to either modify or see the true state of the
+ CPU, and only then executed. This process is obviously highly complex and
+ costly in terms of performance. (VirtualBox contains a recompiler based on
+ QEMU which can be used for pure software emulation, but the recompiler is
+ only activated in special situations, described below.)</para>
+
+ <para>Another possible solution is paravirtualization, in which only
+ specially modified guest OSes are allowed to run. This way, most of the
+ hardware access is abstracted and any functions which would normally
+ access the hardware or privileged CPU state are passed on to the
+ hypervisor instead. Paravirtualization can achieve good functionality and
+ performance on standard x86 CPUs, but it can only work if the guest OS can
+ actually be modified, which is obviously not always the case.</para>
+
+ <para>VirtualBox chooses a different approach. When starting a virtual
+ machine, through its ring-0 support kernel driver, VirtualBox has set up
+ the host system so that it can run most of the guest code natively, but it
+ has inserted itself at the "bottom" of the picture. It can then assume
+ control when needed -- if a privileged instruction is executed, the guest
+ traps (in particular because an I/O register was accessed and a device
+ needs to be virtualized) or external interrupts occur. VirtualBox may then
+ handle this and either route a request to a virtual device or possibly
+ delegate handling such things to the guest or host OS. In guest context,
+ VirtualBox can therefore be in one of three states:</para>
+
+ <para><itemizedlist>
+ <listitem>
+ <para>Guest ring 3 code is run unmodified, at full speed, as much as
+ possible. The number of faults will generally be low (unless the
+ guest allows port I/O from ring 3, something we cannot do as we
+ don't want the guest to be able to access real ports). This is also
+ referred to as "raw mode", as the guest ring-3 code runs
+ unmodified.</para>
+ </listitem>
+
+ <listitem>
+ <para>For guest code in ring 0, VirtualBox employs a nasty trick: it
+ actually reconfigures the guest so that its ring-0 code is run in
+ ring 1 instead (which is normally not used in x86 operating
+ systems). As a result, when guest ring-0 code (actually running in
+ ring 1) such as a guest device driver attempts to write to an I/O
+ register or execute a privileged instruction, the VirtualBox
+ hypervisor in "real" ring 0 can take over.</para>
+ </listitem>
+
+ <listitem>
+ <para>The hypervisor (VMM) can be active. Every time a fault occurs,
+ VirtualBox looks at the offending instruction and can relegate it to
+ a virtual device or the host OS or the guest OS or run it in the
+ recompiler.</para>
+
+ <para>In particular, the recompiler is used when guest code disables
+ interrupts and VirtualBox cannot figure out when they will be
+ switched back on (in these situations, VirtualBox actually analyzes
+ the guest code using its own disassembler). Also, certain privileged
+ instructions such as LIDT need to be handled specially. Finally, any
+ real-mode or protected-mode code (e.g. BIOS code, a DOS guest, or
+ any operating system startup) is run in the recompiler
+ entirely.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>Unfortunately this only works to a degree. Among others, the
+ following situations require special handling:</para>
+
+ <para><orderedlist>
+ <listitem>
+ <para>Running ring 0 code in ring 1 causes a lot of additional
+ instruction faults, as ring 1 is not allowed to execute any
+ privileged instructions (of which guest's ring-0 contains plenty).
+ With each of these faults, the VMM must step in and emulate the code
+ to achieve the desired behavior. While this works, emulating
+ thousands of these faults is very expensive and severely hurts the
+ performance of the virtualized guest.</para>
+ </listitem>
+
+ <listitem>
+ <para>There are certain flaws in the implementation of ring 1 in the
+ x86 architecture that were never fixed. Certain instructions that
+ <emphasis>should</emphasis> trap in ring 1 don't. This affect for
+ example the LGDT/SGDT, LIDT/SIDT, or POPF/PUSHF instruction pairs.
+ Whereas the "load" operation is privileged and can therefore be
+ trapped, the "store" instruction always succeed. If the guest is
+ allowed to execute these, it will see the true state of the CPU, not
+ the virtualized state. The CPUID instruction also has the same
+ problem.</para>
+ </listitem>
+
+ <listitem>
+ <para>A hypervisor typically needs to reserve some portion of the
+ guest's address space (both linear address space and selectors) for
+ its own use. This is not entirely transparent to the guest OS and
+ may cause clashes.</para>
+ </listitem>
+
+ <listitem>
+ <para>The SYSENTER instruction (used for system calls) executed by
+ an application running in a guest OS always transitions to ring 0.
+ But that is where the hypervisor runs, not the guest OS. In this
+ case, the hypervisor must trap and emulate the instruction even when
+ it is not desirable.</para>
+ </listitem>
+
+ <listitem>
+ <para>The CPU segment registers contain a "hidden" descriptor cache
+ which is not software-accessible. The hypervisor cannot read, save,
+ or restore this state, but the guest OS may use it.</para>
+ </listitem>
+
+ <listitem>
+ <para>Some resources must (and can) be trapped by the hypervisor,
+ but the access is so frequent that this creates a significant
+ performance overhead. An example is the TPR (Task Priority) register
+ in 32-bit mode. Accesses to this register must be trapped by the
+ hypervisor, but certain guest operating systems (notably Windows and
+ Solaris) write this register very often, which adversely affects
+ virtualization performance.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>To fix these performance and security issues, VirtualBox contains a
+ Code Scanning and Analysis Manager (CSAM), which disassembles guest code,
+ and the Patch Manager (PATM), which can replace it at runtime.</para>
+
+ <para>Before executing ring 0 code, CSAM scans it recursively to discover
+ problematic instructions. PATM then performs <emphasis>in-situ
+ </emphasis>patching, i.e. it replaces the instruction with a jump to
+ hypervisor memory where an integrated code generator has placed a more
+ suitable implementation. In reality, this is a very complex task as there
+ are lots of odd situations to be discovered and handled correctly. So,
+ with its current complexity, one could argue that PATM is an advanced
+ <emphasis>in-situ</emphasis> recompiler.</para>
+
+ <para>In addition, every time a fault occurs, VirtualBox analyzes the
+ offending code to determine if it is possible to patch it in order to
+ prevent it from causing more faults in the future. This approach works
+ well in practice and dramatically improves software virtualization
+ performance.</para>
+ </sect1>
+
+ <sect1>
+ <title>Details about hardware virtualization</title>
+
+ <para>With Intel VT-x, there are two distinct modes of CPU operation: VMX
+ root mode and non-root mode.<itemizedlist>
+ <listitem>
+ <para>In root mode, the CPU operates much like older generations of
+ processors without VT-x support. There are four privilege levels
+ ("rings"), and the same instruction set is supported, with the
+ addition of several virtualization specific instruction. Root mode
+ is what a host operating system without virtualization uses, and it
+ is also used by a hypervisor when virtualization is active.</para>
+ </listitem>
+
+ <listitem>
+ <para>In non-root mode, CPU operation is significantly different.
+ There are still four privilege rings and the same instruction set,
+ but a new structure called VMCS (Virtual Machine Control Structure)
+ now controls the CPU operation and determines how certain
+ instructions behave. Non-root mode is where guest systems
+ run.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>Switching from root mode to non-root mode is called "VM entry", the
+ switch back is "VM exit". The VMCS includes a guest and host state area
+ which is saved/restored at VM entry and exit. Most importantly, the VMCS
+ controls which guest operations will cause VM exits.</para>
+
+ <para>The VMCS provides fairly fine-grained control over what the guests
+ can and can't do. For example, a hypervisor can allow a guest to write
+ certain bits in shadowed control registers, but not others. This enables
+ efficient virtualization in cases where guests can be allowed to write
+ control bits without disrupting the hypervisor, while preventing them from
+ altering control bits over which the hypervisor needs to retain full
+ control. The VMCS also provides control over interrupt delivery and
+ exceptions.</para>
+
+ <para>Whenever an instruction or event causes a VM exit, the VMCS contains
+ information about the exit reason, often with accompanying detail. For
+ example, if a write to the CR0 register causes an exit, the offending
+ instruction is recorded, along with the fact that a write access to a
+ control register caused the exit, and information about source and
+ destination register. Thus the hypervisor can efficiently handle the
+ condition without needing advanced techniques such as CSAM and PATM
+ described above.</para>
+
+ <para>VT-x inherently avoids several of the problems which software
+ virtualization faces. The guest has its own completely separate address
+ space not shared with the hypervisor, which eliminates potential clashes.
+ Additionally, guest OS kernel code runs at privilege ring 0 in VMX
+ non-root mode, obviating the problems by running ring 0 code at less
+ privileged levels. For example the SYSENTER instruction can transition to
+ ring 0 without causing problems. Naturally, even at ring 0 in VMX non-root
+ mode, any I/O access by guest code still causes a VM exit, allowing for
+ device emulation.</para>
+
+ <para>The biggest difference between VT-x and AMD-V is that AMD-V provides
+ a more complete virtualization environment. VT-x requires the VMX non-root
+ code to run with paging enabled, which precludes hardware virtualization
+ of real-mode code and non-paged protected-mode software. This typically
+ only includes firmware and OS loaders, but nevertheless complicates VT-x
+ hypervisor implementation. AMD-V does not have this restriction.</para>
+
+ <para>Of course hardware virtualization is not perfect. Compared to
+ software virtualization, the overhead of VM exits is relatively high. This
+ causes problems for devices whose emulation requires high number of traps.
+ One example is the VGA device in 16-color modes, where not only every I/O
+ port access but also every access to the framebuffer memory must be
+ trapped.</para>
+ </sect1>
+
+ <sect1 id="nestedpaging">
+ <title>Nested paging and VPIDs</title>
+
+ <para>In addition to "plain" hardware virtualization, your processor may
+ also support additional sophisticated techniques:<footnote>
+ <para>VirtualBox 2.0 added support for AMD's nested paging; support
+ for Intel's EPT and VPIDs was added with version 2.1.</para>
+ </footnote><itemizedlist>
+ <listitem>
+ <para>A newer feature called <emphasis role="bold">"nested
+ paging"</emphasis> implements some memory management in hardware,
+ which can greatly accelerate hardware virtualization since these
+ tasks no longer need to be performed by the virtualization
+ software.</para>
+
+ <para>With nested paging, the hardware provides another level of
+ indirection when translating linear to physical addresses. Page
+ tables function as before, but linear addresses are now translated
+ to "guest physical" addresses first and not physical addresses
+ directly. A new set of paging registers now exists under the
+ traditional paging mechanism and translates from guest physical
+ addresses to host physical addresses, which are used to access
+ memory.</para>
+
+ <para>Nested paging eliminates the overhead caused by VM exits and
+ page table accesses. In essence, with nested page tables the guest
+ can handle paging without intervention from the hypervisor. Nested
+ paging thus significantly improves virtualization
+ performance.</para>
+
+ <para>On AMD processors, nested paging has been available starting
+ with the Barcelona (K10) architecture -- they call it now "rapid
+ virtualization indexing" (RVI). Intel added support for nested
+ paging, which they call "extended page tables" (EPT), with their
+ Core i7 (Nehalem) processors.</para>
+
+ <para>If nested paging is enabled, the VirtualBox hypervisor can
+ also use <emphasis role="bold">large pages</emphasis> to reduce TLB
+ usage and overhead. This can yield a performance improvement of up
+ to 5%. To enable this feature for a VM, you need to use the
+ <computeroutput>VBoxManage modifyvm
+ </computeroutput><computeroutput>--largepages</computeroutput>
+ command; see <xref linkend="vboxmanage-modifyvm" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>On Intel CPUs, another hardware feature called <emphasis
+ role="bold">"Virtual Processor Identifiers" (VPIDs)</emphasis> can
+ greatly accelerate context switching by reducing the need for
+ expensive flushing of the processor's Translation Lookaside Buffers
+ (TLBs).</para>
+
+ <para>To enable these features for a VM, you need to use the
+ <computeroutput>VBoxManage modifyvm --vtxvpid</computeroutput> and
+ <computeroutput>--largepages</computeroutput> commands; see <xref
+ linkend="vboxmanage-modifyvm" />.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect1>
+</chapter>
diff --git a/doc/manual/fr_FR/user_ThirdParty.xml b/doc/manual/fr_FR/user_ThirdParty.xml
new file mode 100644
index 00000000..bed1f74e
--- /dev/null
+++ b/doc/manual/fr_FR/user_ThirdParty.xml
@@ -0,0 +1,2591 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+ "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<appendix id="ThirdParty">
+ <title>Third-party materials and licenses</title>
+
+ <para>VirtualBox incorporates materials from several Open Source software
+ projects. Therefore the use of these materials by VirtualBox is governed by
+ different Open Source licenses. This document reproduces these licenses and
+ provides a list of the materials used and their respective licensing
+ conditions. Section 1 contains a list of the materials used. Section 2
+ reproduces the applicable Open Source licenses. For each material, a
+ reference to its license is provided.</para>
+
+ <para>The source code for the materials listed below as well as the rest of
+ the VirtualBox code which is released as open source are available at <ulink
+ url="http://www.virtualbox.org">http://www.virtualbox.org</ulink>, both as
+ tarballs for particular releases and as a live SVN repository.</para>
+
+ <sect1>
+ <title>Materials</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>VirtualBox contains portions of QEMU which is governed by the
+ licenses in <xref linkend="licX11" xrefstyle="template: %n" /> and
+ <xref linkend="licLGPL" xrefstyle="template: %n" /> and</para>
+
+ <para>(C) 2003-2005 Fabrice Bellard; Copyright (C) 2004-2005 Vassili
+ Karpov (malc); Copyright (c) 2004 Antony T Curtis; Copyright (C) 2003
+ Jocelyn Mayer</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox contains code which is governed by the license in
+ <xref linkend="licX11" xrefstyle="template: %n" /> and</para>
+
+ <para>Copyright 2004 by the Massachusetts Institute of
+ Technology.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox contains code of the BOCHS VGA BIOS which is governed
+ by the license in <xref linkend="licLGPL" xrefstyle="template: %n" />
+ and</para>
+
+ <para>Copyright (C) 2001, 2002 the LGPL VGABios developers
+ Team.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox contains code of the BOCHS ROM BIOS which is governed
+ by the license in <xref linkend="licLGPL" xrefstyle="template: %n" />
+ and</para>
+
+ <para>Copyright (C) 2002 MandrakeSoft S.A.; Copyright (C) 2004 Fabrice
+ Bellard; Copyright (C) 2005 Struan Bartlett.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox contains the zlib library which is governed by the
+ license in <xref linkend="licZLIB" xrefstyle="template: %n" />
+ and</para>
+
+ <para>Copyright (C) 1995-2003 Jean-loup Gailly and Mark Adler.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox may contain OpenSSL which is governed by the license
+ in <xref linkend="licSSL" xrefstyle="template: %n" /> and</para>
+
+ <para>Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com). This
+ product includes software written by Tim Hudson
+ (tjh@cryptsoft.com).</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox may contain NSPR and XPCOM which is governed by the
+ license in <xref linkend="licMPL" xrefstyle="template: %n" />
+ and</para>
+
+ <para>Copyright (C) The Authors.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox contains Slirp which is governed by the license in
+ <xref linkend="licSlirp" xrefstyle="template: %n" /> and was written
+ by Danny Gasparovski.</para>
+
+ <para>Copyright (C) 1995, 1996 All Rights Reserved.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox contains liblzf which is governed by the license in
+ <xref linkend="licLZF" xrefstyle="template: %n" /> and</para>
+
+ <para>Copyright (C) 2000-2005 Marc Alexander Lehmann
+ &lt;schmorp@schmorp.de&gt;</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox may ship with a modified copy of rdesktop which is
+ governed by the license in <xref linkend="licGPL"
+ xrefstyle="template: %n" /> and</para>
+
+ <para>Copyright (C) Matthew Chapman and others.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox may ship with a copy of kchmviewer which is governed
+ by the license in <xref linkend="licGPL" xrefstyle="template: %n" />
+ and</para>
+
+ <para>Copyright (C) George Yunaev and others.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox may contain Etherboot which is governed by the
+ license in <xref linkend="licGPL" xrefstyle="template: %n" /> with the
+ exception that aggregating Etherboot with another work does not
+ require the other work to be released under the same license (see
+ <literal><ulink
+ url="http://etherboot.sourceforge.net/clinks.html">http://etherboot.sourceforge.net/clinks.html</ulink></literal>).
+ Etherboot is</para>
+
+ <para>Copyright (C) Etherboot team.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox contains code from Wine which is governed by the
+ license in <xref linkend="licLGPL" xrefstyle="template: %n" />
+ and</para>
+
+ <para>Copyright 1993 Bob Amstadt, Copyright 1996 Albrecht Kleine,
+ Copyright 1997 David Faure, Copyright 1998 Morten Welinder, Copyright
+ 1998 Ulrich Weigand, Copyright 1999 Ove Koven</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox contains code from lwIP which is governed by the
+ license in <xref linkend="licLWIP" xrefstyle="template: %n" />
+ and</para>
+
+ <para>Copyright (C) 2001, 2002 Swedish Institute of Computer
+ Science.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox contains libxml which is governed by the license in
+ <xref linkend="licLibXML" /> and</para>
+
+ <para>Copyright (C) 1998-2003 Daniel Veillard.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox contains libxslt which is governed by the license in
+ <xref linkend="licLibXSLT" /> and</para>
+
+ <para>Copyright (C) 2001-2002 Daniel Veillard and Copyright (C)
+ 2001-2002 Thomas Broyer, Charlie Bozeman and Daniel Veillard.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox contains code from the gSOAP XML web services
+ tools, which are licensed under the license in <xref
+ linkend="licgSOAP" /> and</para>
+
+ <para>Copyright (C) 2000-2007, Robert van Engelen, Genivia Inc., and
+ others.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox ships with the application tunctl (shipped as
+ VBoxTunctl) from the User-mode Linux suite which is governed by the
+ license in <xref linkend="licGPL" xrefstyle="template: %n" />
+ and</para>
+
+ <para>Copyright (C) 2002 Jeff Dike.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox contains code from Chromium, an OpenGL
+ implementation, which is goverened by the licenses in <xref
+ linkend="licChromium" /> and</para>
+
+ <para>Copyright (C) Stanford University, The Regents of the University
+ of California, Red Hat, and others.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox contains libcurl which is governed by the license in
+ <xref linkend="licLibCurl" /> and</para>
+
+ <para>Copyright (C) 1996-2009, Daniel Stenberg.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox contains dnsproxy which is governed by the license in
+ <xref linkend="licMIT" /> and</para>
+
+ <para>Copyright (c) 2003, 2004, 2005 Armin Wolfermann.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox may contain iniparser which is governed by the
+ license in <xref linkend="licMIT" /> and</para>
+
+ <para>Copyright (c) 2000-2008 by Nicolas Devillard.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox contains some code from libgd which is governed by
+ the license in <xref linkend="licLibgd" /> and</para>
+
+ <para>Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ Pierre-Alain Joye (pierre@libgd.org).</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox contains code from the EFI Development Kit II
+ which is governed by the license in
+ <xref linkend="licBsdIntel" /> and</para>
+
+ <para>Copyright (c) 2004-2008, Intel Corporation.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox contains libjpeg which is governed by the
+ license in <xref linkend="licJPEG" /> and</para>
+
+ <para>Copyright (C) 1991-2010, Thomas G. Lane, Guido Vollbeding.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox may contain x86 SIMD extension for IJG JPEG library
+ which is governed by the license in <xref linkend="licJPEGSIMD" /> and</para>
+
+ <para>Copyright 2009 Pierre Ossman &lt;ossman@cendio.se&gt; for Cendio AB;
+ Copyright 2010 D. R. Commander; Copyright (C) 1999-2006, MIYASAKA Masaru.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Licenses</title>
+
+ <sect2 id="licGPL">
+ <title>GNU General Public License (GPL)</title>
+
+ <para>GNU GENERAL PUBLIC LICENSE Version 2, June 1991</para>
+
+ <para>Copyright (C) 1989, 1991 Free Software Foundation, Inc.</para>
+
+ <para>51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA</para>
+
+ <para>Everyone is permitted to copy and distribute verbatim copies of
+ this license document, but changing it is not allowed.</para>
+
+ <para>Preamble</para>
+
+ <para>The licenses for most software are designed to take away your
+ freedom to share and change it. By contrast, the GNU General Public
+ License is intended to guarantee your freedom to share and change free
+ software--to make sure the software is free for all its users. This
+ General Public License applies to most of the Free Software Foundation's
+ software and to any other program whose authors commit to using it.
+ (Some other Free Software Foundation software is covered by the GNU
+ Library General Public License instead.) You can apply it to your
+ programs, too.</para>
+
+ <para>When we speak of free software, we are referring to freedom, not
+ price. Our General Public Licenses are designed to make sure that you
+ have the freedom to distribute copies of free software (and charge for
+ this service if you wish), that you receive source code or can get it if
+ you want it, that you can change the software or use pieces of it in new
+ free programs; and that you know you can do these things.</para>
+
+ <para>To protect your rights, we need to make restrictions that forbid
+ anyone to deny you these rights or to ask you to surrender the rights.
+ These restrictions translate to certain responsibilities for you if you
+ distribute copies of the software, or if you modify it.</para>
+
+ <para>For example, if you distribute copies of such a program, whether
+ gratis or for a fee, you must give the recipients all the rights that
+ you have. You must make sure that they, too, receive or can get the
+ source code. And you must show them these terms so they know their
+ rights.</para>
+
+ <para>We protect your rights with two steps: (1) copyright the software,
+ and (2) offer you this license which gives you legal permission to copy,
+ distribute and/or modify the software.</para>
+
+ <para>Also, for each author's protection and ours, we want to make
+ certain that everyone understands that there is no warranty for this
+ free software. If the software is modified by someone else and passed
+ on, we want its recipients to know that what they have is not the
+ original, so that any problems introduced by others will not reflect on
+ the original authors' reputations.</para>
+
+ <para>Finally, any free program is threatened constantly by software
+ patents. We wish to avoid the danger that redistributors of a free
+ program will individually obtain patent licenses, in effect making the
+ program proprietary. To prevent this, we have made it clear that any
+ patent must be licensed for everyone's free use or not licensed at
+ all.</para>
+
+ <para>The precise terms and conditions for copying, distribution and
+ modification follow.</para>
+
+ <para>GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING,
+ DISTRIBUTION AND MODIFICATION</para>
+
+ <para>0. This License applies to any program or other work which
+ contains a notice placed by the copyright holder saying it may be
+ distributed under the terms of this General Public License. The
+ "Program", below, refers to any such program or work, and a "work based
+ on the Program" means either the Program or any derivative work under
+ copyright law: that is to say, a work containing the Program or a
+ portion of it, either verbatim or with modifications and/or translated
+ into another language. (Hereinafter, translation is included without
+ limitation in the term "modification".) Each licensee is addressed as
+ "you".</para>
+
+ <para>Activities other than copying, distribution and modification are
+ not covered by this License; they are outside its scope. The act of
+ running the Program is not restricted, and the output from the Program
+ is covered only if its contents constitute a work based on the Program
+ (independent of having been made by running the Program). Whether that
+ is true depends on what the Program does.</para>
+
+ <para>1. You may copy and distribute verbatim copies of the Program's
+ source code as you receive it, in any medium, provided that you
+ conspicuously and appropriately publish on each copy an appropriate
+ copyright notice and disclaimer of warranty; keep intact all the notices
+ that refer to this License and to the absence of any warranty; and give
+ any other recipients of the Program a copy of this License along with
+ the Program.</para>
+
+ <para>You may charge a fee for the physical act of transferring a copy,
+ and you may at your option offer warranty protection in exchange for a
+ fee.</para>
+
+ <para>2. You may modify your copy or copies of the Program or any
+ portion of it, thus forming a work based on the Program, and copy and
+ distribute such modifications or work under the terms of Section 1
+ above, provided that you also meet all of these conditions:</para>
+
+ <para>a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.</para>
+
+ <para>b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any part
+ thereof, to be licensed as a whole at no charge to all third parties
+ under the terms of this License.</para>
+
+ <para>c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such interactive
+ use in the most ordinary way, to print or display an announcement
+ including an appropriate copyright notice and a notice that there is no
+ warranty (or else, saying that you provide a warranty) and that users
+ may redistribute the program under these conditions, and telling the
+ user how to view a copy of this License. (Exception: if the Program
+ itself is interactive but does not normally print such an announcement,
+ your work based on the Program is not required to print an
+ announcement.)</para>
+
+ <para>These requirements apply to the modified work as a whole. If
+ identifiable sections of that work are not derived from the Program, and
+ can be reasonably considered independent and separate works in
+ themselves, then this License, and its terms, do not apply to those
+ sections when you distribute them as separate works. But when you
+ distribute the same sections as part of a whole which is a work based on
+ the Program, the distribution of the whole must be on the terms of this
+ License, whose permissions for other licensees extend to the entire
+ whole, and thus to each and every part regardless of who wrote
+ it.</para>
+
+ <para>Thus, it is not the intent of this section to claim rights or
+ contest your rights to work written entirely by you; rather, the intent
+ is to exercise the right to control the distribution of derivative or
+ collective works based on the Program.</para>
+
+ <para>In addition, mere aggregation of another work not based on the
+ Program with the Program (or with a work based on the Program) on a
+ volume of a storage or distribution medium does not bring the other work
+ under the scope of this License.</para>
+
+ <para>3. You may copy and distribute the Program (or a work based on it,
+ under Section 2) in object code or executable form under the terms of
+ Sections 1 and 2 above provided that you also do one of the
+ following:</para>
+
+ <para>a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections 1 and
+ 2 above on a medium customarily used for software interchange;
+ or,</para>
+
+ <para>b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your cost of
+ physically performing source distribution, a complete machine-readable
+ copy of the corresponding source code, to be distributed under the terms
+ of Sections 1 and 2 above on a medium customarily used for software
+ interchange; or,</para>
+
+ <para>c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is allowed
+ only for noncommercial distribution and only if you received the program
+ in object code or executable form with such an offer, in accord with
+ Subsection b above.)</para>
+
+ <para>The source code for a work means the preferred form of the work
+ for making modifications to it. For an executable work, complete source
+ code means all the source code for all modules it contains, plus any
+ associated interface definition files, plus the scripts used to control
+ compilation and installation of the executable. However, as a special
+ exception, the source code distributed need not include anything that is
+ normally distributed (in either source or binary form) with the major
+ components (compiler, kernel, and so on) of the operating system on
+ which the executable runs, unless that component itself accompanies the
+ executable.</para>
+
+ <para>If distribution of executable or object code is made by offering
+ access to copy from a designated place, then offering equivalent access
+ to copy the source code from the same place counts as distribution of
+ the source code, even though third parties are not compelled to copy the
+ source along with the object code.</para>
+
+ <para>4. You may not copy, modify, sublicense, or distribute the Program
+ except as expressly provided under this License. Any attempt otherwise
+ to copy, modify, sublicense or distribute the Program is void, and will
+ automatically terminate your rights under this License. However, parties
+ who have received copies, or rights, from you under this License will
+ not have their licenses terminated so long as such parties remain in
+ full compliance.</para>
+
+ <para>5. You are not required to accept this License, since you have not
+ signed it. However, nothing else grants you permission to modify or
+ distribute the Program or its derivative works. These actions are
+ prohibited by law if you do not accept this License. Therefore, by
+ modifying or distributing the Program (or any work based on the
+ Program), you indicate your acceptance of this License to do so, and all
+ its terms and conditions for copying, distributing or modifying the
+ Program or works based on it.</para>
+
+ <para>6. Each time you redistribute the Program (or any work based on
+ the Program), the recipient automatically receives a license from the
+ original licensor to copy, distribute or modify the Program subject to
+ these terms and conditions. You may not impose any further restrictions
+ on the recipients' exercise of the rights granted herein. You are not
+ responsible for enforcing compliance by third parties to this
+ License.</para>
+
+ <para>7. If, as a consequence of a court judgment or allegation of
+ patent infringement or for any other reason (not limited to patent
+ issues), conditions are imposed on you (whether by court order,
+ agreement or otherwise) that contradict the conditions of this License,
+ they do not excuse you from the conditions of this License. If you
+ cannot distribute so as to satisfy simultaneously your obligations under
+ this License and any other pertinent obligations, then as a consequence
+ you may not distribute the Program at all. For example, if a patent
+ license would not permit royalty-free redistribution of the Program by
+ all those who receive copies directly or indirectly through you, then
+ the only way you could satisfy both it and this License would be to
+ refrain entirely from distribution of the Program.</para>
+
+ <para>If any portion of this section is held invalid or unenforceable
+ under any particular circumstance, the balance of the section is
+ intended to apply and the section as a whole is intended to apply in
+ other circumstances.</para>
+
+ <para>It is not the purpose of this section to induce you to infringe
+ any patents or other property right claims or to contest validity of any
+ such claims; this section has the sole purpose of protecting the
+ integrity of the free software distribution system, which is implemented
+ by public license practices. Many people have made generous
+ contributions to the wide range of software distributed through that
+ system in reliance on consistent application of that system; it is up to
+ the author/donor to decide if he or she is willing to distribute
+ software through any other system and a licensee cannot impose that
+ choice.</para>
+
+ <para>This section is intended to make thoroughly clear what is believed
+ to be a consequence of the rest of this License.</para>
+
+ <para>8. If the distribution and/or use of the Program is restricted in
+ certain countries either by patents or by copyrighted interfaces, the
+ original copyright holder who places the Program under this License may
+ add an explicit geographical distribution limitation excluding those
+ countries, so that distribution is permitted only in or among countries
+ not thus excluded. In such case, this License incorporates the
+ limitation as if written in the body of this License.</para>
+
+ <para>9. The Free Software Foundation may publish revised and/or new
+ versions of the General Public License from time to time. Such new
+ versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns.</para>
+
+ <para>Each version is given a distinguishing version number. If the
+ Program specifies a version number of this License which applies to it
+ and "any later version", you have the option of following the terms and
+ conditions either of that version or of any later version published by
+ the Free Software Foundation. If the Program does not specify a version
+ number of this License, you may choose any version ever published by the
+ Free Software Foundation.</para>
+
+ <para>10. If you wish to incorporate parts of the Program into other
+ free programs whose distribution conditions are different, write to the
+ author to ask for permission. For software which is copyrighted by the
+ Free Software Foundation, write to the Free Software Foundation; we
+ sometimes make exceptions for this. Our decision will be guided by the
+ two goals of preserving the free status of all derivatives of our free
+ software and of promoting the sharing and reuse of software
+ generally.</para>
+
+ <para>NO WARRANTY</para>
+
+ <para>11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
+ WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+ EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+ OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND,
+ EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
+ ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH
+ YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
+ NECESSARY SERVICING, REPAIR OR CORRECTION.</para>
+
+ <para>12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+ WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+ AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
+ DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL
+ DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM
+ (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED
+ INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF
+ THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR
+ OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</para>
+
+ <para>END OF TERMS AND CONDITIONS</para>
+ </sect2>
+
+ <sect2 id="licLGPL">
+ <title>GNU Lesser General Public License (LGPL)</title>
+
+ <para>GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February
+ 1999</para>
+
+ <para>Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple
+ Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to
+ copy and distribute verbatim copies of this license document, but
+ changing it is not allowed.</para>
+
+ <para>[This is the first released version of the Lesser GPL. It also
+ counts as the successor of the GNU Library Public License, version 2,
+ hence the version number 2.1.]</para>
+
+ <para>Preamble</para>
+
+ <para>The licenses for most software are designed to take away your
+ freedom to share and change it. By contrast, the GNU General Public
+ Licenses are intended to guarantee your freedom to share and change free
+ software--to make sure the software is free for all its users.</para>
+
+ <para>This license, the Lesser General Public License, applies to some
+ specially designated software packages--typically libraries--of the Free
+ Software Foundation and other authors who decide to use it. You can use
+ it too, but we suggest you first think carefully about whether this
+ license or the ordinary General Public License is the better strategy to
+ use in any particular case, based on the explanations below.</para>
+
+ <para>When we speak of free software, we are referring to freedom of
+ use, not price. Our General Public Licenses are designed to make sure
+ that you have the freedom to distribute copies of free software (and
+ charge for this service if you wish); that you receive source code or
+ can get it if you want it; that you can change the software and use
+ pieces of it in new free programs; and that you are informed that you
+ can do these things.</para>
+
+ <para>To protect your rights, we need to make restrictions that forbid
+ distributors to deny you these rights or to ask you to surrender these
+ rights. These restrictions translate to certain responsibilities for you
+ if you distribute copies of the library or if you modify it.</para>
+
+ <para>For example, if you distribute copies of the library, whether
+ gratis or for a fee, you must give the recipients all the rights that we
+ gave you. You must make sure that they, too, receive or can get the
+ source code. If you link other code with the library, you must provide
+ complete object files to the recipients, so that they can relink them
+ with the library after making changes to the library and recompiling it.
+ And you must show them these terms so they know their rights.</para>
+
+ <para>We protect your rights with a two-step method: (1) we copyright
+ the library, and (2) we offer you this license, which gives you legal
+ permission to copy, distribute and/or modify the library.</para>
+
+ <para>To protect each distributor, we want to make it very clear that
+ there is no warranty for the free library. Also, if the library is
+ modified by someone else and passed on, the recipients should know that
+ what they have is not the original version, so that the original
+ author's reputation will not be affected by problems that might be
+ introduced by others.</para>
+
+ <para>Finally, software patents pose a constant threat to the existence
+ of any free program. We wish to make sure that a company cannot
+ effectively restrict the users of a free program by obtaining a
+ restrictive license from a patent holder. Therefore, we insist that any
+ patent license obtained for a version of the library must be consistent
+ with the full freedom of use specified in this license.</para>
+
+ <para>Most GNU software, including some libraries, is covered by the
+ ordinary GNU General Public License. This license, the GNU Lesser
+ General Public License, applies to certain designated libraries, and is
+ quite different from the ordinary General Public License. We use this
+ license for certain libraries in order to permit linking those libraries
+ into non-free programs.</para>
+
+ <para>When a program is linked with a library, whether statically or
+ using a shared library, the combination of the two is legally speaking a
+ combined work, a derivative of the original library. The ordinary
+ General Public License therefore permits such linking only if the entire
+ combination fits its criteria of freedom. The Lesser General Public
+ License permits more lax criteria for linking other code with the
+ library.</para>
+
+ <para>We call this license the "Lesser" General Public License because
+ it does Less to protect the user's freedom than the ordinary General
+ Public License. It also provides other free software developers Less of
+ an advantage over competing non-free programs. These disadvantages are
+ the reason we use the ordinary General Public License for many
+ libraries. However, the Lesser license provides advantages in certain
+ special circumstances.</para>
+
+ <para>For example, on rare occasions, there may be a special need to
+ encourage the widest possible use of a certain library, so that it
+ becomes a de-facto standard. To achieve this, non-free programs must be
+ allowed to use the library. A more frequent case is that a free library
+ does the same job as widely used non-free libraries. In this case, there
+ is little to gain by limiting the free library to free software only, so
+ we use the Lesser General Public License.</para>
+
+ <para>In other cases, permission to use a particular library in non-free
+ programs enables a greater number of people to use a large body of free
+ software. For example, permission to use the GNU C Library in non-free
+ programs enables many more people to use the whole GNU operating system,
+ as well as its variant, the GNU/Linux operating system.</para>
+
+ <para>Although the Lesser General Public License is Less protective of
+ the users' freedom, it does ensure that the user of a program that is
+ linked with the Library has the freedom and the wherewithal to run that
+ program using a modified version of the Library.</para>
+
+ <para>The precise terms and conditions for copying, distribution and
+ modification follow. Pay close attention to the difference between a
+ "work based on the library" and a "work that uses the library". The
+ former contains code derived from the library, whereas the latter must
+ be combined with the library in order to run.</para>
+
+ <para>GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR
+ COPYING, DISTRIBUTION AND MODIFICATION</para>
+
+ <para>0. This License Agreement applies to any software library or other
+ program which contains a notice placed by the copyright holder or other
+ authorized party saying it may be distributed under the terms of this
+ Lesser General Public License (also called "this License"). Each
+ licensee is addressed as "you".</para>
+
+ <para>A "library" means a collection of software functions and/or data
+ prepared so as to be conveniently linked with application programs
+ (which use some of those functions and data) to form executables.</para>
+
+ <para>The "Library", below, refers to any such software library or work
+ which has been distributed under these terms. A "work based on the
+ Library" means either the Library or any derivative work under copyright
+ law: that is to say, a work containing the Library or a portion of it,
+ either verbatim or with modifications and/or translated
+ straightforwardly into another language. (Hereinafter, translation is
+ included without limitation in the term "modification".)</para>
+
+ <para>"Source code" for a work means the preferred form of the work for
+ making modifications to it. For a library, complete source code means
+ all the source code for all modules it contains, plus any associated
+ interface definition files, plus the scripts used to control compilation
+ and installation of the library.</para>
+
+ <para>Activities other than copying, distribution and modification are
+ not covered by this License; they are outside its scope. The act of
+ running a program using the Library is not restricted, and output from
+ such a program is covered only if its contents constitute a work based
+ on the Library (independent of the use of the Library in a tool for
+ writing it). Whether that is true depends on what the Library does and
+ what the program that uses the Library does.</para>
+
+ <para>1. You may copy and distribute verbatim copies of the Library's
+ complete source code as you receive it, in any medium, provided that you
+ conspicuously and appropriately publish on each copy an appropriate
+ copyright notice and disclaimer of warranty; keep intact all the notices
+ that refer to this License and to the absence of any warranty; and
+ distribute a copy of this License along with the Library.</para>
+
+ <para>You may charge a fee for the physical act of transferring a copy,
+ and you may at your option offer warranty protection in exchange for a
+ fee.</para>
+
+ <para>2. You may modify your copy or copies of the Library or any
+ portion of it, thus forming a work based on the Library, and copy and
+ distribute such modifications or work under the terms of Section 1
+ above, provided that you also meet all of these conditions:</para>
+
+ <para>a) The modified work must itself be a software library.</para>
+
+ <para>b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.</para>
+
+ <para>c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.</para>
+
+ <para>d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses the
+ facility, other than as an argument passed when the facility is invoked,
+ then you must make a good faith effort to ensure that, in the event an
+ application does not supply such function or table, the facility still
+ operates, and performs whatever part of its purpose remains
+ meaningful.</para>
+
+ <para>(For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the application.
+ Therefore, Subsection 2d requires that any application-supplied function
+ or table used by this function must be optional: if the application does
+ not supply it, the square root function must still compute square
+ roots.)</para>
+
+ <para>These requirements apply to the modified work as a whole. If
+ identifiable sections of that work are not derived from the Library, and
+ can be reasonably considered independent and separate works in
+ themselves, then this License, and its terms, do not apply to those
+ sections when you distribute them as separate works. But when you
+ distribute the same sections as part of a whole which is a work based on
+ the Library, the distribution of the whole must be on the terms of this
+ License, whose permissions for other licensees extend to the entire
+ whole, and thus to each and every part regardless of who wrote
+ it.</para>
+
+ <para>Thus, it is not the intent of this section to claim rights or
+ contest your rights to work written entirely by you; rather, the intent
+ is to exercise the right to control the distribution of derivative or
+ collective works based on the Library.</para>
+
+ <para>In addition, mere aggregation of another work not based on the
+ Library with the Library (or with a work based on the Library) on a
+ volume of a storage or distribution medium does not bring the other work
+ under the scope of this License.</para>
+
+ <para>3. You may opt to apply the terms of the ordinary GNU General
+ Public License instead of this License to a given copy of the Library.
+ To do this, you must alter all the notices that refer to this License,
+ so that they refer to the ordinary GNU General Public License, version
+ 2, instead of to this License. (If a newer version than version 2 of the
+ ordinary GNU General Public License has appeared, then you can specify
+ that version instead if you wish.) Do not make any other change in these
+ notices.</para>
+
+ <para>Once this change is made in a given copy, it is irreversible for
+ that copy, so the ordinary GNU General Public License applies to all
+ subsequent copies and derivative works made from that copy.</para>
+
+ <para>This option is useful when you wish to copy part of the code of
+ the Library into a program that is not a library.</para>
+
+ <para>4. You may copy and distribute the Library (or a portion or
+ derivative of it, under Section 2) in object code or executable form
+ under the terms of Sections 1 and 2 above provided that you accompany it
+ with the complete corresponding machine-readable source code, which must
+ be distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange.</para>
+
+ <para>If distribution of object code is made by offering access to copy
+ from a designated place, then offering equivalent access to copy the
+ source code from the same place satisfies the requirement to distribute
+ the source code, even though third parties are not compelled to copy the
+ source along with the object code.</para>
+
+ <para>5. A program that contains no derivative of any portion of the
+ Library, but is designed to work with the Library by being compiled or
+ linked with it, is called a "work that uses the Library". Such a work,
+ in isolation, is not a derivative work of the Library, and therefore
+ falls outside the scope of this License.</para>
+
+ <para>However, linking a "work that uses the Library" with the Library
+ creates an executable that is a derivative of the Library (because it
+ contains portions of the Library), rather than a "work that uses the
+ library". The executable is therefore covered by this License. Section 6
+ states terms for distribution of such executables.</para>
+
+ <para>When a "work that uses the Library" uses material from a header
+ file that is part of the Library, the object code for the work may be a
+ derivative work of the Library even though the source code is not.
+ Whether this is true is especially significant if the work can be linked
+ without the Library, or if the work is itself a library. The threshold
+ for this to be true is not precisely defined by law.</para>
+
+ <para>If such an object file uses only numerical parameters, data
+ structure layouts and accessors, and small macros and small inline
+ functions (ten lines or less in length), then the use of the object file
+ is unrestricted, regardless of whether it is legally a derivative work.
+ (Executables containing this object code plus portions of the Library
+ will still fall under Section 6.) Otherwise, if the work is a derivative
+ of the Library, you may distribute the object code for the work under
+ the terms of Section 6. Any executables containing that work also fall
+ under Section 6, whether or not they are linked directly with the
+ Library itself.</para>
+
+ <para>6. As an exception to the Sections above, you may also combine or
+ link a "work that uses the Library" with the Library to produce a work
+ containing portions of the Library, and distribute that work under terms
+ of your choice, provided that the terms permit modification of the work
+ for the customer's own use and reverse engineering for debugging such
+ modifications.</para>
+
+ <para>You must give prominent notice with each copy of the work that the
+ Library is used in it and that the Library and its use are covered by
+ this License. You must supply a copy of this License. If the work during
+ execution displays copyright notices, you must include the copyright
+ notice for the Library among them, as well as a reference directing the
+ user to the copy of this License. Also, you must do one of these
+ things:</para>
+
+ <para>a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever changes
+ were used in the work (which must be distributed under Sections 1 and 2
+ above); and, if the work is an executable linked with the Library, with
+ the complete machine-readable "work that uses the Library", as object
+ code and/or source code, so that the user can modify the Library and
+ then relink to produce a modified executable containing the modified
+ Library. (It is understood that the user who changes the contents of
+ definitions files in the Library will not necessarily be able to
+ recompile the application to use the modified definitions.)</para>
+
+ <para>b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a copy of
+ the library already present on the user's computer system, rather than
+ copying library functions into the executable, and (2) will operate
+ properly with a modified version of the library, if the user installs
+ one, as long as the modified version is interface-compatible with the
+ version that the work was made with.</para>
+
+ <para>c) Accompany the work with a written offer, valid for at least
+ three years, to give the same user the materials specified in Subsection
+ 6a, above, for a charge no more than the cost of performing this
+ distribution.</para>
+
+ <para>d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.</para>
+
+ <para>e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.</para>
+
+ <para>For an executable, the required form of the "work that uses the
+ Library" must include any data and utility programs needed for
+ reproducing the executable from it. However, as a special exception, the
+ materials to be distributed need not include anything that is normally
+ distributed (in either source or binary form) with the major components
+ (compiler, kernel, and so on) of the operating system on which the
+ executable runs, unless that component itself accompanies the
+ executable.</para>
+
+ <para>It may happen that this requirement contradicts the license
+ restrictions of other proprietary libraries that do not normally
+ accompany the operating system. Such a contradiction means you cannot
+ use both them and the Library together in an executable that you
+ distribute.</para>
+
+ <para>7. You may place library facilities that are a work based on the
+ Library side-by-side in a single library together with other library
+ facilities not covered by this License, and distribute such a combined
+ library, provided that the separate distribution of the work based on
+ the Library and of the other library facilities is otherwise permitted,
+ and provided that you do these two things:</para>
+
+ <para>a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library facilities. This
+ must be distributed under the terms of the Sections above.</para>
+
+ <para>b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining where to
+ find the accompanying uncombined form of the same work.</para>
+
+ <para>8. You may not copy, modify, sublicense, link with, or distribute
+ the Library except as expressly provided under this License. Any attempt
+ otherwise to copy, modify, sublicense, link with, or distribute the
+ Library is void, and will automatically terminate your rights under this
+ License. However, parties who have received copies, or rights, from you
+ under this License will not have their licenses terminated so long as
+ such parties remain in full compliance.</para>
+
+ <para>9. You are not required to accept this License, since you have not
+ signed it. However, nothing else grants you permission to modify or
+ distribute the Library or its derivative works. These actions are
+ prohibited by law if you do not accept this License. Therefore, by
+ modifying or distributing the Library (or any work based on the
+ Library), you indicate your acceptance of this License to do so, and all
+ its terms and conditions for copying, distributing or modifying the
+ Library or works based on it.</para>
+
+ <para>10. Each time you redistribute the Library (or any work based on
+ the Library), the recipient automatically receives a license from the
+ original licensor to copy, distribute, link with or modify the Library
+ subject to these terms and conditions. You may not impose any further
+ restrictions on the recipients' exercise of the rights granted herein.
+ You are not responsible for enforcing compliance by third parties with
+ this License.</para>
+
+ <para>11. If, as a consequence of a court judgment or allegation of
+ patent infringement or for any other reason (not limited to patent
+ issues), conditions are imposed on you (whether by court order,
+ agreement or otherwise) that contradict the conditions of this License,
+ they do not excuse you from the conditions of this License. If you
+ cannot distribute so as to satisfy simultaneously your obligations under
+ this License and any other pertinent obligations, then as a consequence
+ you may not distribute the Library at all. For example, if a patent
+ license would not permit royalty-free redistribution of the Library by
+ all those who receive copies directly or indirectly through you, then
+ the only way you could satisfy both it and this License would be to
+ refrain entirely from distribution of the Library.</para>
+
+ <para>If any portion of this section is held invalid or unenforceable
+ under any particular circumstance, the balance of the section is
+ intended to apply, and the section as a whole is intended to apply in
+ other circumstances.</para>
+
+ <para>It is not the purpose of this section to induce you to infringe
+ any patents or other property right claims or to contest validity of any
+ such claims; this section has the sole purpose of protecting the
+ integrity of the free software distribution system which is implemented
+ by public license practices. Many people have made generous
+ contributions to the wide range of software distributed through that
+ system in reliance on consistent application of that system; it is up to
+ the author/donor to decide if he or she is willing to distribute
+ software through any other system and a licensee cannot impose that
+ choice.</para>
+
+ <para>This section is intended to make thoroughly clear what is believed
+ to be a consequence of the rest of this License.</para>
+
+ <para>12. If the distribution and/or use of the Library is restricted in
+ certain countries either by patents or by copyrighted interfaces, the
+ original copyright holder who places the Library under this License may
+ add an explicit geographical distribution limitation excluding those
+ countries, so that distribution is permitted only in or among countries
+ not thus excluded. In such case, this License incorporates the
+ limitation as if written in the body of this License.</para>
+
+ <para>13. The Free Software Foundation may publish revised and/or new
+ versions of the Lesser General Public License from time to time. Such
+ new versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns.</para>
+
+ <para>Each version is given a distinguishing version number. If the
+ Library specifies a version number of this License which applies to it
+ and "any later version", you have the option of following the terms and
+ conditions either of that version or of any later version published by
+ the Free Software Foundation. If the Library does not specify a license
+ version number, you may choose any version ever published by the Free
+ Software Foundation.</para>
+
+ <para>14. If you wish to incorporate parts of the Library into other
+ free programs whose distribution conditions are incompatible with these,
+ write to the author to ask for permission. For software which is
+ copyrighted by the Free Software Foundation, write to the Free Software
+ Foundation; we sometimes make exceptions for this. Our decision will be
+ guided by the two goals of preserving the free status of all derivatives
+ of our free software and of promoting the sharing and reuse of software
+ generally.</para>
+
+ <para>NO WARRANTY</para>
+
+ <para>15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+ WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+ EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+ OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND,
+ EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
+ ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH
+ YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
+ NECESSARY SERVICING, REPAIR OR CORRECTION.</para>
+
+ <para>16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+ WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+ AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
+ DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL
+ DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY
+ (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED
+ INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF
+ THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR
+ OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</para>
+
+ <para>END OF TERMS AND CONDITIONS</para>
+ </sect2>
+
+ <sect2 id="licMPL">
+ <title>Mozilla Public License (MPL)</title>
+
+ <para>MOZILLA PUBLIC LICENSE Version 1.1</para>
+
+ <para>1. Definitions.</para>
+
+ <para>1.0.1. "Commercial Use" means distribution or otherwise making the
+ Covered Code available to a third party.</para>
+
+ <para>1.1. "Contributor" means each entity that creates or contributes
+ to the creation of Modifications.</para>
+
+ <para>1.2. "Contributor Version" means the combination of the Original
+ Code, prior Modifications used by a Contributor, and the Modifications
+ made by that particular Contributor.</para>
+
+ <para>1.3. "Covered Code" means the Original Code or Modifications or
+ the combination of the Original Code and Modifications, in each case
+ including portions thereof.</para>
+
+ <para>1.4. "Electronic Distribution Mechanism" means a mechanism
+ generally accepted in the software development community for the
+ electronic transfer of data.</para>
+
+ <para>1.5. "Executable" means Covered Code in any form other than Source
+ Code.</para>
+
+ <para>1.6. "Initial Developer" means the individual or entity identified
+ as the Initial Developer in the Source Code notice required by Exhibit
+ A.</para>
+
+ <para>1.7. "Larger Work" means a work which combines Covered Code or
+ portions thereof with code not governed by the terms of this
+ License.</para>
+
+ <para>1.8. "License" means this document.</para>
+
+ <para>1.8.1. "Licensable" means having the right to grant, to the
+ maximum extent possible, whether at the time of the initial grant or
+ subsequently acquired, any and all of the rights conveyed herein.</para>
+
+ <para>1.9. "Modifications" means any addition to or deletion from the
+ substance or structure of either the Original Code or any previous
+ Modifications. When Covered Code is released as a series of files, a
+ Modification is:</para>
+
+ <para>A. Any addition to or deletion from the contents of a file
+ containing Original Code or previous Modifications.</para>
+
+ <para>B. Any new file that contains any part of the Original Code or
+ previous Modifications.</para>
+
+ <para>1.10. "Original Code" means Source Code of computer software code
+ which is described in the Source Code notice required by Exhibit A as
+ Original Code, and which, at the time of its release under this License
+ is not already Covered Code governed by this License.</para>
+
+ <para>1.10.1. "Patent Claims" means any patent claim(s), now owned or
+ hereafter acquired, including without limitation, method, process, and
+ apparatus claims, in any patent Licensable by grantor.</para>
+
+ <para>1.11. "Source Code" means the preferred form of the Covered Code
+ for making modifications to it, including all modules it contains, plus
+ any associated interface definition files, scripts used to control
+ compilation and installation of an Executable, or source code
+ differential comparisons against either the Original Code or another
+ well known, available Covered Code of the Contributor's choice. The
+ Source Code can be in a compressed or archival form, provided the
+ appropriate decompression or de-archiving software is widely available
+ for no charge.</para>
+
+ <para>1.12. "You" (or "Your") means an individual or a legal entity
+ exercising rights under, and complying with all of the terms of, this
+ License or a future version of this License issued under Section 6.1.
+ For legal entities, "You" includes any entity which controls, is
+ controlled by, or is under common control with You. For purposes of this
+ definition, "control" means (a) the power, direct or indirect, to cause
+ the direction or management of such entity, whether by contract or
+ otherwise, or (b) ownership of more than fifty percent (50%) of the
+ outstanding shares or beneficial ownership of such entity.</para>
+
+ <para>2. Source Code License.</para>
+
+ <para>2.1. The Initial Developer Grant. The Initial Developer hereby
+ grants You a world-wide, royalty-free, non-exclusive license, subject to
+ third party intellectual property claims:</para>
+
+ <para>(a) under intellectual property rights (other than patent or
+ trademark) Licensable by Initial Developer to use, reproduce, modify,
+ display, perform, sublicense and distribute the Original Code (or
+ portions thereof) with or without Modifications, and/or as part of a
+ Larger Work; and</para>
+
+ <para>(b) under Patents Claims infringed by the making, using or selling
+ of Original Code, to make, have made, use, practice, sell, and offer for
+ sale, and/or otherwise dispose of the Original Code (or portions
+ thereof).</para>
+
+ <para>(c) the licenses granted in this Section 2.1(a) and (b) are
+ effective on the date Initial Developer first distributes Original Code
+ under the terms of this License.</para>
+
+ <para>(d) Notwithstanding Section 2.1(b) above, no patent license is
+ granted: 1) for code that You delete from the Original Code; 2) separate
+ from the Original Code; or 3) for infringements caused by: i) the
+ modification of the Original Code or ii) the combination of the Original
+ Code with other software or devices.</para>
+
+ <para>2.2. Contributor Grant. Subject to third party intellectual
+ property claims, each Contributor hereby grants You a world-wide,
+ royalty-free, non-exclusive license</para>
+
+ <para>(a) under intellectual property rights (other than patent or
+ trademark) Licensable by Contributor, to use, reproduce, modify,
+ display, perform, sublicense and distribute the Modifications created by
+ such Contributor (or portions thereof) either on an unmodified basis,
+ with other Modifications, as Covered Code and/or as part of a Larger
+ Work; and</para>
+
+ <para>(b) under Patent Claims infringed by the making, using, or selling
+ of Modifications made by that Contributor either alone and/or in
+ combination with its Contributor Version (or portions of such
+ combination), to make, use, sell, offer for sale, have made, and/or
+ otherwise dispose of: 1) Modifications made by that Contributor (or
+ portions thereof); and 2) the combination of Modifications made by that
+ Contributor with its Contributor Version (or portions of such
+ combination).</para>
+
+ <para>(c) the licenses granted in Sections 2.2(a) and 2.2(b) are
+ effective on the date Contributor first makes Commercial Use of the
+ Covered Code.</para>
+
+ <para>(d) Notwithstanding Section 2.2(b) above, no patent license is
+ granted: 1) for any code that Contributor has deleted from the
+ Contributor Version; 2) separate from the Contributor Version; 3) for
+ infringements caused by: i) third party modifications of Contributor
+ Version or ii) the combination of Modifications made by that Contributor
+ with other software (except as part of the Contributor Version) or other
+ devices; or 4) under Patent Claims infringed by Covered Code in the
+ absence of Modifications made by that Contributor.</para>
+
+ <para>3. Distribution Obligations.</para>
+
+ <para>3.1. Application of License. The Modifications which You create or
+ to which You contribute are governed by the terms of this License,
+ including without limitation Section 2.2. The Source Code version of
+ Covered Code may be distributed only under the terms of this License or
+ a future version of this License released under Section 6.1, and You
+ must include a copy of this License with every copy of the Source Code
+ You distribute. You may not offer or impose any terms on any Source Code
+ version that alters or restricts the applicable version of this License
+ or the recipients' rights hereunder. However, You may include an
+ additional document offering the additional rights described in Section
+ 3.5.</para>
+
+ <para>3.2. Availability of Source Code. Any Modification which You
+ create or to which You contribute must be made available in Source Code
+ form under the terms of this License either on the same media as an
+ Executable version or via an accepted Electronic Distribution Mechanism
+ to anyone to whom you made an Executable version available; and if made
+ available via Electronic Distribution Mechanism, must remain available
+ for at least twelve (12) months after the date it initially became
+ available, or at least six (6) months after a subsequent version of that
+ particular Modification has been made available to such recipients. You
+ are responsible for ensuring that the Source Code version remains
+ available even if the Electronic Distribution Mechanism is maintained by
+ a third party.</para>
+
+ <para>3.3. Description of Modifications. You must cause all Covered Code
+ to which You contribute to contain a file documenting the changes You
+ made to create that Covered Code and the date of any change. You must
+ include a prominent statement that the Modification is derived, directly
+ or indirectly, from Original Code provided by the Initial Developer and
+ including the name of the Initial Developer in (a) the Source Code, and
+ (b) in any notice in an Executable version or related documentation in
+ which You describe the origin or ownership of the Covered Code.</para>
+
+ <para>3.4. Intellectual Property Matters</para>
+
+ <para>(a) Third Party Claims. If Contributor has knowledge that a
+ license under a third party's intellectual property rights is required
+ to exercise the rights granted by such Contributor under Sections 2.1 or
+ 2.2, Contributor must include a text file with the Source Code
+ distribution titled "LEGAL" which describes the claim and the party
+ making the claim in sufficient detail that a recipient will know whom to
+ contact. If Contributor obtains such knowledge after the Modification is
+ made available as described in Section 3.2, Contributor shall promptly
+ modify the LEGAL file in all copies Contributor makes available
+ thereafter and shall take other steps (such as notifying appropriate
+ mailing lists or newsgroups) reasonably calculated to inform those who
+ received the Covered Code that new knowledge has been obtained.</para>
+
+ <para>(b) Contributor APIs. If Contributor's Modifications include an
+ application programming interface and Contributor has knowledge of
+ patent licenses which are reasonably necessary to implement that API,
+ Contributor must also include this information in the LEGAL file.</para>
+
+ <para>3.5. Required Notices. You must duplicate the notice in Exhibit A
+ in each file of the Source Code. If it is not possible to put such
+ notice in a particular Source Code file due to its structure, then You
+ must include such notice in a location (such as a relevant directory)
+ where a user would be likely to look for such a notice. If You created
+ one or more Modification(s) You may add your name as a Contributor to
+ the notice described in Exhibit A. You must also duplicate this License
+ in any documentation for the Source Code where You describe recipients'
+ rights or ownership rights relating to Covered Code. You may choose to
+ offer, and to charge a fee for, warranty, support, indemnity or
+ liability obligations to one or more recipients of Covered Code.
+ However, You may do so only on Your own behalf, and not on behalf of the
+ Initial Developer or any Contributor. You must make it absolutely clear
+ than any such warranty, support, indemnity or liability obligation is
+ offered by You alone, and You hereby agree to indemnify the Initial
+ Developer and every Contributor for any liability incurred by the
+ Initial Developer or such Contributor as a result of warranty, support,
+ indemnity or liability terms You offer.</para>
+
+ <para>3.6. Distribution of Executable Versions. You may distribute
+ Covered Code in Executable form only if the requirements of Section
+ 3.1-3.5 have been met for that Covered Code, and if You include a notice
+ stating that the Source Code version of the Covered Code is available
+ under the terms of this License, including a description of how and
+ where You have fulfilled the obligations of Section 3.2. The notice must
+ be conspicuously included in any notice in an Executable version,
+ related documentation or collateral in which You describe recipients'
+ rights relating to the Covered Code. You may distribute the Executable
+ version of Covered Code or ownership rights under a license of Your
+ choice, which may contain terms different from this License, provided
+ that You are in compliance with the terms of this License and that the
+ license for the Executable version does not attempt to limit or alter
+ the recipient's rights in the Source Code version from the rights set
+ forth in this License. If You distribute the Executable version under a
+ different license You must make it absolutely clear that any terms which
+ differ from this License are offered by You alone, not by the Initial
+ Developer or any Contributor. You hereby agree to indemnify the Initial
+ Developer and every Contributor for any liability incurred by the
+ Initial Developer or such Contributor as a result of any such terms You
+ offer.</para>
+
+ <para>3.7. Larger Works. You may create a Larger Work by combining
+ Covered Code with other code not governed by the terms of this License
+ and distribute the Larger Work as a single product. In such a case, You
+ must make sure the requirements of this License are fulfilled for the
+ Covered Code.</para>
+
+ <para>4. Inability to Comply Due to Statute or Regulation.If it is
+ impossible for You to comply with any of the terms of this License with
+ respect to some or all of the Covered Code due to statute, judicial
+ order, or regulation then You must: (a) comply with the terms of this
+ License to the maximum extent possible; and (b) describe the limitations
+ and the code they affect. Such description must be included in the LEGAL
+ file described in Section 3.4 and must be included with all
+ distributions of the Source Code. Except to the extent prohibited by
+ statute or regulation, such description must be sufficiently detailed
+ for a recipient of ordinary skill to be able to understand it.</para>
+
+ <para>5. Application of this License. This License applies to code to
+ which the Initial Developer has attached the notice in Exhibit A and to
+ related Covered Code.</para>
+
+ <para>6. Versions of the License.</para>
+
+ <para>6.1. New Versions. Netscape Communications Corporation
+ ("Netscape") may publish revised and/or new versions of the License from
+ time to time. Each version will be given a distinguishing version
+ number.</para>
+
+ <para>6.2. Effect of New Versions. Once Covered Code has been published
+ under a particular version of the License, You may always continue to
+ use it under the terms of that version. You may also choose to use such
+ Covered Code under the terms of any subsequent version of the License
+ published by Netscape. No one other than Netscape has the right to
+ modify the terms applicable to Covered Code created under this
+ License.</para>
+
+ <para>6.3. Derivative Works. If You create or use a modified version of
+ this License (which you may only do in order to apply it to code which
+ is not already Covered Code governed by this License), You must (a)
+ rename Your license so that the phrases "Mozilla", "MOZILLAPL", "MOZPL",
+ "Netscape", "MPL", "NPL" or any confusingly similar phrase do not appear
+ in your license (except to note that your license differs from this
+ License) and (b) otherwise make it clear that Your version of the
+ license contains terms which differ from the Mozilla Public License and
+ Netscape Public License. (Filling in the name of the Initial Developer,
+ Original Code or Contributor in the notice described in Exhibit A shall
+ not of themselves be deemed to be modifications of this License.)</para>
+
+ <para>7. DISCLAIMER OF WARRANTY.</para>
+
+ <para>COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS,
+ MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE
+ RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE IS WITH YOU.
+ SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE
+ INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY
+ NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY
+ CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED
+ CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.</para>
+
+ <para>8. TERMINATION.</para>
+
+ <para>8.1. This License and the rights granted hereunder will terminate
+ automatically if You fail to comply with terms herein and fail to cure
+ such breach within 30 days of becoming aware of the breach. All
+ sublicenses to the Covered Code which are properly granted shall survive
+ any termination of this License. Provisions which, by their nature, must
+ remain in effect beyond the termination of this License shall
+ survive.</para>
+
+ <para>8.2. If You initiate litigation by asserting a patent infringement
+ claim (excluding declaratory judgment actions) against Initial Developer
+ or a Contributor (the Initial Developer or Contributor against whom You
+ file such action is referred to as "Participant") alleging that:</para>
+
+ <para>(a) such Participant's Contributor Version directly or indirectly
+ infringes any patent, then any and all rights granted by such
+ Participant to You under Sections 2.1 and/or 2.2 of this License shall,
+ upon 60 days notice from Participant terminate prospectively, unless if
+ within 60 days after receipt of notice You either: (i) agree in writing
+ to pay Participant a mutually agreeable reasonable royalty for Your past
+ and future use of Modifications made by such Participant, or (ii)
+ withdraw Your litigation claim with respect to the Contributor Version
+ against such Participant. If within 60 days of notice, a reasonable
+ royalty and payment arrangement are not mutually agreed upon in writing
+ by the parties or the litigation claim is not withdrawn, the rights
+ granted by Participant to You under Sections 2.1 and/or 2.2
+ automatically terminate at the expiration of the 60 day notice period
+ specified above.</para>
+
+ <para>(b) any software, hardware, or device, other than such
+ Participant's Contributor Version, directly or indirectly infringes any
+ patent, then any rights granted to You by such Participant under
+ Sections 2.1(b) and 2.2(b) are revoked effective as of the date You
+ first made, used, sold, distributed, or had made, Modifications made by
+ that Participant.</para>
+
+ <para>8.3. If You assert a patent infringement claim against Participant
+ alleging that such Participant's Contributor Version directly or
+ indirectly infringes any patent where such claim is resolved (such as by
+ license or settlement) prior to the initiation of patent infringement
+ litigation, then the reasonable value of the licenses granted by such
+ Participant under Sections 2.1 or 2.2 shall be taken into account in
+ determining the amount or value of any payment or license.</para>
+
+ <para>8.4. In the event of termination under Sections 8.1 or 8.2 above,
+ all end user license agreements (excluding distributors and resellers)
+ which have been validly granted by You or any distributor hereunder
+ prior to termination shall survive termination.</para>
+
+ <para>9. LIMITATION OF LIABILITY. UNDER NO CIRCUMSTANCES AND UNDER NO
+ LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR
+ OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR
+ ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES,
+ BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR
+ CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION,
+ DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR
+ MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF
+ SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES.
+ THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR
+ PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT
+ APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT
+ ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL
+ DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.</para>
+
+ <para>10. U.S. GOVERNMENT END USERS. The Covered Code is a "commercial
+ item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995),
+ consisting of "commercial computer software" and "commercial computer
+ software documentation," as such terms are used in 48 C.F.R. 12.212
+ (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1
+ through 227.7202-4 (June 1995), all U.S. Government End Users acquire
+ Covered Code with only those rights set forth herein.</para>
+
+ <para>11. MISCELLANEOUS. This License represents the complete agreement
+ concerning subject matter hereof. If any provision of this License is
+ held to be unenforceable, such provision shall be reformed only to the
+ extent necessary to make it enforceable. This License shall be governed
+ by California law provisions (except to the extent applicable law, if
+ any, provides otherwise), excluding its conflict-of-law provisions. With
+ respect to disputes in which at least one party is a citizen of, or an
+ entity chartered or registered to do business in the United States of
+ America, any litigation relating to this License shall be subject to the
+ jurisdiction of the Federal Courts of the Northern District of
+ California, with venue lying in Santa Clara County, California, with the
+ losing party responsible for costs, including without limitation, court
+ costs and reasonable attorneys' fees and expenses. The application of
+ the United Nations Convention on Contracts for the International Sale of
+ Goods is expressly excluded. Any law or regulation which provides that
+ the language of a contract shall be construed against the drafter shall
+ not apply to this License.</para>
+
+ <para>12. RESPONSIBILITY FOR CLAIMS. As between Initial Developer and
+ the Contributors, each party is responsible for claims and damages
+ arising, directly or indirectly, out of its utilization of rights under
+ this License and You agree to work with Initial Developer and
+ Contributors to distribute such responsibility on an equitable basis.
+ Nothing herein is intended or shall be deemed to constitute any
+ admission of liability.</para>
+
+ <para>13. MULTIPLE-LICENSED CODE. Initial Developer may designate
+ portions of the Covered Code as "Multiple-Licensed". "Multiple-Licensed"
+ means that the Initial Developer permits you to utilize portions of the
+ Covered Code under Your choice of the NPL or the alternative licenses,
+ if any, specified by the Initial Developer in the file described in
+ Exhibit A.</para>
+
+ <para>EXHIBIT A -Mozilla Public License.</para>
+
+ <para>``The contents of this file are subject to the Mozilla Public
+ License Version 1.1 (the "License"); you may not use this file except in
+ compliance with the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/</para>
+
+ <para>Software distributed under the License is distributed on an "AS
+ IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ the License for the specific language governing rights and limitations
+ under the License.</para>
+
+ <para>The Original Code is
+ ______________________________________.</para>
+
+ <para>The Initial Developer of the Original Code is
+ ________________________. Portions created by ______________________ are
+ Copyright (C) ______ _______________________. All Rights
+ Reserved.</para>
+
+ <para>Contributor(s): ______________________________________.</para>
+
+ <para>Alternatively, the contents of this file may be used under the
+ terms of the _____ license (the "[___] License"), in which case the
+ provisions of [______] License are applicable instead of those above. If
+ you wish to allow use of your version of this file only under the terms
+ of the [____] License and not to allow others to use your version of
+ this file under the MPL, indicate your decision by deleting the
+ provisions above and replace them with the notice and other provisions
+ required by the [___] License. If you do not delete the provisions
+ above, a recipient may use your version of this file under either the
+ MPL or the [___] License."</para>
+
+ <para>[NOTE: The text of this Exhibit A may differ slightly from the
+ text of the notices in the Source Code files of the Original Code. You
+ should use the text of this Exhibit A rather than the text found in the
+ Original Code Source Code for Your Modifications.]</para>
+ </sect2>
+
+ <sect2 id="licMIT">
+ <title>MIT License</title>
+
+ <para>Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation files
+ (the "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:</para>
+
+ <para>The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.</para>
+
+ <para>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</para>
+ </sect2>
+
+ <sect2 id="licX11">
+ <title>X Consortium License (X11)</title>
+
+ <para>Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation files
+ (the "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:</para>
+
+ <para>The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.</para>
+
+ <para>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</para>
+ </sect2>
+
+ <sect2 id="licZLIB">
+ <title>zlib license</title>
+
+ <para>This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.</para>
+
+ <para>Permission is granted to anyone to use this software for any
+ purpose, including commercial applications, and to alter it and
+ redistribute it freely, subject to the following restrictions:</para>
+
+ <para>1. The origin of this software must not be misrepresented; you
+ must not claim that you wrote the original software. If you use this
+ software in a product, an acknowledgment in the product documentation
+ would be appreciated but is not required.</para>
+
+ <para>2. Altered source versions must be plainly marked as such, and
+ must not be misrepresented as being the original software.</para>
+
+ <para>3. This notice may not be removed or altered from any source
+ distribution.</para>
+
+ <screen>Jean-loup Gailly Mark Adler
+jloup@gzip.org madler@alumni.caltech.edu</screen>
+ </sect2>
+
+ <sect2 id="licSSL">
+ <title>OpenSSL license</title>
+
+ <para>This package is an SSL implementation written by Eric Young
+ (eay@cryptsoft.com). The implementation was written so as to conform
+ with Netscape's SSL.</para>
+
+ <para>This library is free for commercial and non-commercial use as long
+ as the following conditions are adhered to. The following conditions
+ apply to all code found in this distribution, be it the RC4, RSA, lhash,
+ DES, etc., code; not just the SSL code. The SSL documentation included
+ with this distribution is covered by the same copyright terms except
+ that the holder is Tim Hudson (tjh@cryptsoft.com).</para>
+
+ <para>Copyright remains Eric Young's, and as such any Copyright notices
+ in the code are not to be removed. If this package is used in a product,
+ Eric Young should be given attribution as the author of the parts of the
+ library used. This can be in the form of a textual message at program
+ startup or in documentation (online or textual) provided with the
+ package.</para>
+
+ <para>Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:</para>
+
+ <para>1. Redistributions of source code must retain the copyright
+ notice, this list of conditions and the following disclaimer.</para>
+
+ <para>2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following disclaimer
+ in the documentation and/or other materials provided with the
+ distribution.</para>
+
+ <para>3. All advertising materials mentioning features or use of this
+ software must display the following acknowledgement: "This product
+ includes cryptographic software written by Eric Young
+ (eay@cryptsoft.com)" The word 'cryptographic' can be left out if the
+ routines from the library being used are not cryptographic related
+ :-).</para>
+
+ <para>4. If you include any Windows specific code (or a derivative
+ thereof) from the apps directory (application code) you must include an
+ acknowledgement: "This product includes software written by Tim Hudson
+ (tjh@cryptsoft.com)"</para>
+
+ <para>THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.</para>
+
+ <para>The licence and distribution terms for any publicly available
+ version or derivative of this code cannot be changed. i.e. this code
+ cannot simply be copied and put under another distribution licence
+ [including the GNU Public Licence.]</para>
+ </sect2>
+
+ <sect2 id="licSlirp">
+ <title>Slirp license</title>
+
+ <para>Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:</para>
+
+ <para>1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.</para>
+
+ <para>2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following disclaimer
+ in the documentation and/or other materials provided with the
+ distribution.</para>
+
+ <para>3. All advertising materials mentioning features or use of this
+ software must display the following acknowledgment: This product
+ includes software developed by Danny Gasparovski.</para>
+
+ <para>THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+ NO EVENT SHALL DANNY GASPAROVSKI OR CONTRIBUTORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.</para>
+ </sect2>
+
+ <sect2 id="licLZF">
+ <title>liblzf license</title>
+
+ <para>Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:</para>
+
+ <para>1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.</para>
+
+ <para>2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following disclaimer
+ in the documentation and/or other materials provided with the
+ distribution.</para>
+
+ <para>3. The name of the author may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.</para>
+
+ <para>THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.</para>
+ </sect2>
+
+ <sect2>
+ <title>libpng license</title>
+
+ <para>The PNG Reference Library is supplied "AS IS". The Contributing
+ Authors and Group 42, Inc. disclaim all warranties, expressed or
+ implied, including, without limitation, the warranties of
+ merchantability and of fitness for any purpose. The Contributing Authors
+ and Group 42, Inc. assume no liability for direct, indirect, incidental,
+ special, exemplary, or consequential damages, which may result from the
+ use of the PNG Reference Library, even if advised of the possibility of
+ such damage.</para>
+
+ <para>Permission is hereby granted to use, copy, modify, and distribute
+ this source code, or portions hereof, for any purpose, without fee,
+ subject to the following restrictions:</para>
+
+ <para>1. The origin of this source code must not be
+ misrepresented.</para>
+
+ <para>2. Altered versions must be plainly marked as such and must not be
+ misrepresented as being the original source.</para>
+
+ <para>3. This Copyright notice may not be removed or altered from any
+ source or altered source distribution.</para>
+
+ <para>The Contributing Authors and Group 42, Inc. specifically permit,
+ without fee, and encourage the use of this source code as a component to
+ supporting the PNG file format in commercial products. If you use this
+ source code in a product, acknowledgment is not required but would be
+ appreciated.</para>
+ </sect2>
+
+ <sect2 id="licLWIP">
+ <title>lwIP license</title>
+
+ <para>Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:</para>
+
+ <para>1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.</para>
+
+ <para>2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following disclaimer
+ in the documentation and/or other materials provided with the
+ distribution.</para>
+
+ <para>3. The name of the author may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.</para>
+
+ <para>THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.</para>
+ </sect2>
+
+ <sect2 id="licLibXML">
+ <title>libxml license</title>
+
+ <para>Except where otherwise noted in the source code (e.g. the files
+ hash.c, list.c and the trio files, which are covered by a similar
+ licence but with different Copyright notices) all the files are:</para>
+
+ <para>Copyright (C) 1998-2003 Daniel Veillard. All Rights
+ Reserved.</para>
+
+ <para>Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation files
+ (the "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:</para>
+
+ <para>The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.</para>
+
+ <para>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ IN NO EVENT SHALL THE DANIEL VEILLARD BE LIABLE FOR ANY CLAIM, DAMAGES
+ OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ OTHER DEALINGS IN THE SOFTWARE.</para>
+
+ <para>Except as contained in this notice, the name of Daniel Veillard
+ shall not be used in advertising or otherwise to promote the sale, use
+ or other dealings in this Software without prior written authorization
+ from him.</para>
+ </sect2>
+
+ <sect2 id="licLibXSLT">
+ <title>libxslt licenses</title>
+
+ <para>Licence for libxslt except libexslt:</para>
+
+ <para>Copyright (C) 2001-2002 Daniel Veillard. All Rights
+ Reserved.</para>
+
+ <para>Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation files
+ (the "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:</para>
+
+ <para>The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.</para>
+
+ <para>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ IN NO EVENT SHALL THE DANIEL VEILLARD BE LIABLE FOR ANY CLAIM, DAMAGES
+ OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ OTHER DEALINGS IN THE SOFTWARE.</para>
+
+ <para>Except as contained in this notice, the name of Daniel Veillard
+ shall not be used in advertising or otherwise to promote the sale, use
+ or other dealings in this Software without prior written authorization
+ from him.</para>
+
+ <para>Licence for libexslt:</para>
+
+ <para>Copyright (C) 2001-2002 Thomas Broyer, Charlie Bozeman and Daniel
+ Veillard. All Rights Reserved.</para>
+
+ <para>Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation files
+ (the "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:</para>
+
+ <para>The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.</para>
+
+ <para>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ DEALINGS IN THE SOFTWARE.</para>
+
+ <para>Except as contained in this notice, the name of the authors shall
+ not be used in advertising or otherwise to promote the sale, use or
+ other dealings in this Software without prior written authorization from
+ him.</para>
+ </sect2>
+
+ <sect2 id="licgSOAP">
+ <title>gSOAP Public License Version 1.3a</title>
+
+ <para>The gSOAP public license is derived from the Mozilla Public
+ License (MPL1.1). The sections that were deleted from the original
+ MPL1.1 text are 1.0.1, 2.1.(c),(d), 2.2.(c),(d), 8.2.(b), 10, and 11.
+ Section 3.8 was added. The modified sections are 2.1.(b), 2.2.(b), 3.2
+ (simplified), 3.5 (deleted the last sentence), and 3.6
+ (simplified).</para>
+
+ <para>1 DEFINITIONS</para>
+
+ <para>1.1. "Contributor" means each entity that creates or contributes
+ to the creation of Modifications.</para>
+
+ <para>1.2. "Contributor Version" means the combination of the Original
+ Code, prior Modifications used by a Contributor, and the Modifications
+ made by that particular Contributor.</para>
+
+ <para>1.3. "Covered Code" means the Original Code, or Modifications or
+ the combination of the Original Code, and Modifications, in each case
+ including portions thereof.</para>
+
+ <para>1.4. "Electronic Distribution Mechanism" means a mechanism
+ generally accepted in the software development community for the
+ electronic transfer of data.</para>
+
+ <para>1.5. "Executable" means Covered Code in any form other than Source
+ Code.</para>
+
+ <para>1.6. "Initial Developer" means the individual or entity identified
+ as the Initial Developer in the Source Code notice required by Exhibit
+ A.</para>
+
+ <para>1.7. "Larger Work" means a work which combines Covered Code or
+ portions thereof with code not governed by the terms of this
+ License.</para>
+
+ <para>1.8. "License" means this document.</para>
+
+ <para>1.8.1. "Licensable" means having the right to grant, to the
+ maximum extent possible, whether at the time of the initial grant or
+ subsequently acquired, any and all of the rights conveyed herein.</para>
+
+ <para>1.9. "Modifications" means any addition to or deletion from the
+ substance or structure of either the Original Code or any previous
+ Modifications. When Covered Code is released as a series of files, a
+ Modification is:</para>
+
+ <para>A. Any addition to or deletion from the contents of a file
+ containing Original Code or previous Modifications.</para>
+
+ <para>B. Any new file that contains any part of the Original Code, or
+ previous Modifications.</para>
+
+ <para>1.10. "Original Code" means Source Code of computer software code
+ which is described in the Source Code notice required by Exhibit A as
+ Original Code, and which, at the time of its release under this License
+ is not already Covered Code governed by this License.</para>
+
+ <para>1.10.1. "Patent Claims" means any patent claim(s), now owned or
+ hereafter acquired, including without limitation, method, process, and
+ apparatus claims, in any patent Licensable by grantor.</para>
+
+ <para>1.11. "Source Code" means the preferred form of the Covered Code
+ for making modifications to it, including all modules it contains, plus
+ any associated interface definition files, scripts used to control
+ compilation and installation of an Executable, or source code
+ differential comparisons against either the Original Code or another
+ well known, available Covered Code of the Contributor's choice. The
+ Source Code can be in a compressed or archival form, provided the
+ appropriate decompression or de-archiving software is widely available
+ for no charge.</para>
+
+ <para>1.12. "You" (or "Your") means an individual or a legal entity
+ exercising rights under, and complying with all of the terms of, this
+ License or a future version of this License issued under Section 6.1.
+ For legal entities, "You" includes any entity which controls, is
+ controlled by, or is under common control with You. For purposes of this
+ definition, "control" means (a) the power, direct or indirect, to cause
+ the direction or management of such entity, whether by contract or
+ otherwise, or (b) ownership of more than fifty percent (50%) of the
+ outstanding shares or beneficial ownership of such entity.</para>
+
+ <para>2 SOURCE CODE LICENSE.</para>
+
+ <para>2.1. The Initial Developer Grant.</para>
+
+ <para>The Initial Developer hereby grants You a world-wide,
+ royalty-free, non-exclusive license, subject to third party intellectual
+ property claims:</para>
+
+ <para>(a) under intellectual property rights (other than patent or
+ trademark) Licensable by Initial Developer to use, reproduce, modify,
+ display, perform, sublicense and distribute the Original Code (or
+ portions thereof) with or without Modifications, and/or as part of a
+ Larger Work; and</para>
+
+ <para>(b) under patents now or hereafter owned or controlled by Initial
+ Developer, to make, have made, use and sell ("offer to sell and import")
+ the Original Code, Modifications, or portions thereof, but solely to the
+ extent that any such patent is reasonably necessary to enable You to
+ utilize, alone or in combination with other software, the Original Code,
+ Modifications, or any combination or portions thereof.</para>
+
+ <para>(c)</para>
+
+ <para>(d)</para>
+
+ <para>2.2. Contributor Grant.</para>
+
+ <para>Subject to third party intellectual property claims, each
+ Contributor hereby grants You a world-wide, royalty-free, non-exclusive
+ license</para>
+
+ <para>(a) under intellectual property rights (other than patent or
+ trademark) Licensable by Contributor, to use, reproduce, modify,
+ display, perform, sublicense and distribute the Modifications created by
+ such Contributor (or portions thereof) either on an unmodified basis,
+ with other Modifications, as Covered Code and/or as part of a Larger
+ Work; and</para>
+
+ <para>(b) under patents now or hereafter owned or controlled by
+ Contributor, to make, have made, use and sell ("offer to sell and
+ import") the Contributor Version (or portions thereof), but solely to
+ the extent that any such patent is reasonably necessary to enable You to
+ utilize, alone or in combination with other software, the Contributor
+ Version (or portions thereof).</para>
+
+ <para>(c)</para>
+
+ <para>(d)</para>
+
+ <para>3 DISTRIBUTION OBLIGATIONS.</para>
+
+ <para>3.1. Application of License.</para>
+
+ <para>The Modifications which You create or to which You contribute are
+ governed by the terms of this License, including without limitation
+ Section 2.2. The Source Code version of Covered Code may be distributed
+ only under the terms of this License or a future version of this License
+ released under Section 6.1, and You must include a copy of this License
+ with every copy of the Source Code You distribute. You may not offer or
+ impose any terms on any Source Code version that alters or restricts the
+ applicable version of this License or the recipients' rights hereunder.
+ However, You may include an additional document offering the additional
+ rights described in Section 3.5.</para>
+
+ <para>3.2. Availability of Source Code.</para>
+
+ <para>Any Modification created by You will be provided to the Initial
+ Developer in Source Code form and are subject to the terms of the
+ License. 3.3. Description of Modifications.</para>
+
+ <para>You must cause all Covered Code to which You contribute to contain
+ a file documenting the changes You made to create that Covered Code and
+ the date of any change. You must include a prominent statement that the
+ Modification is derived, directly or indirectly, from Original Code
+ provided by the Initial Developer and including the name of the Initial
+ Developer in (a) the Source Code, and (b) in any notice in an Executable
+ version or related documentation in which You describe the origin or
+ ownership of the Covered Code.</para>
+
+ <para>3.4. Intellectual Property Matters.</para>
+
+ <para>(a) Third Party Claims. If Contributor has knowledge that a
+ license under a third party's intellectual property rights is required
+ to exercise the rights granted by such Contributor under Sections 2.1 or
+ 2.2, Contributor must include a text file with the Source Code
+ distribution titled "LEGAL" which describes the claim and the party
+ making the claim in sufficient detail that a recipient will know whom to
+ contact. If Contributor obtains such knowledge after the Modification is
+ made available as described in Section 3.2, Contributor shall promptly
+ modify the LEGAL file in all copies Contributor makes available
+ thereafter and shall take other steps (such as notifying appropriate
+ mailing lists or newsgroups) reasonably calculated to inform those who
+ received the Covered Code that new knowledge has been obtained.</para>
+
+ <para>(b) Contributor APIs. If Contributor's Modifications include an
+ application programming interface and Contributor has knowledge of
+ patent licenses which are reasonably necessary to implement that API,
+ Contributor must also include this information in the LEGAL file.</para>
+
+ <para>(c) Representations. Contributor represents that, except as
+ disclosed pursuant to Section 3.4(a) above, Contributor believes that
+ Contributor's Modifications are Contributor's original creation(s)
+ and/or Contributor has sufficient rights to grant the rights conveyed by
+ this License.</para>
+
+ <para>3.5. Required Notices. You must duplicate the notice in Exhibit A
+ in each file of the Source Code. If it is not possible to put such
+ notice in a particular Source Code file due to its structure, then You
+ must include such notice in a location (such as a relevant directory)
+ where a user would be likely to look for such a notice. If You created
+ one or more Modification(s) You may add your name as a Contributor to
+ the notice described in Exhibit A. You must also duplicate this License
+ in any documentation for the Source Code where You describe recipients'
+ rights or ownership rights relating to Covered Code. You may choose to
+ offer, and to charge a fee for, warranty, support, indemnity or
+ liability obligations to one or more recipients of Covered Code.
+ However, You may do so only on Your own behalf, and not on behalf of the
+ Initial Developer or any Contributor.</para>
+
+ <para>3.6. Distribution of Executable Versions. You may distribute
+ Covered Code in Executable form only if the requirements of Section
+ 3.1-3.5 have been met for that Covered Code. You may distribute the
+ Executable version of Covered Code or ownership rights under a license
+ of Your choice, which may contain terms different from this License,
+ provided that You are in compliance with the terms of this License and
+ that the license for the Executable version does not attempt to limit or
+ alter the recipient's rights in the Source Code version from the rights
+ set forth in this License. If You distribute the Executable version
+ under a different license You must make it absolutely clear that any
+ terms which differ from this License are offered by You alone, not by
+ the Initial Developer or any Contributor. If you distribute executable
+ versions containing Covered Code as part of a product, you must
+ reproduce the notice in Exhibit B in the documentation and/or other
+ materials provided with the product.</para>
+
+ <para>3.7. Larger Works. You may create a Larger Work by combining
+ Covered Code with other code not governed by the terms of this License
+ and distribute the Larger Work as a single product. In such a case, You
+ must make sure the requirements of this License are fulfilled for the
+ Covered Code.</para>
+
+ <para>3.8. Restrictions. You may not remove any product identification,
+ copyright, proprietary notices or labels from gSOAP.</para>
+
+ <para>4 INABILITY TO COMPLY DUE TO STATUTE OR REGULATION.</para>
+
+ <para>If it is impossible for You to comply with any of the terms of
+ this License with respect to some or all of the Covered Code due to
+ statute, judicial order, or regulation then You must: (a) comply with
+ the terms of this License to the maximum extent possible; and (b)
+ describe the limitations and the code they affect. Such description must
+ be included in the LEGAL file described in Section 3.4 and must be
+ included with all distributions of the Source Code. Except to the extent
+ prohibited by statute or regulation, such description must be
+ sufficiently detailed for a recipient of ordinary skill to be able to
+ understand it.</para>
+
+ <para>5 APPLICATION OF THIS LICENSE.</para>
+
+ <para>This License applies to code to which the Initial Developer has
+ attached the notice in Exhibit A and to related Covered Code.</para>
+
+ <para>6 VERSIONS OF THE LICENSE.</para>
+
+ <para>6.1. New Versions.</para>
+
+ <para>Grantor may publish revised and/or new versions of the License
+ from time to time. Each version will be given a distinguishing version
+ number.</para>
+
+ <para>6.2. Effect of New Versions.</para>
+
+ <para>Once Covered Code has been published under a particular version of
+ the License, You may always continue to use it under the terms of that
+ version. You may also choose to use such Covered Code under the terms of
+ any subsequent version of the License.</para>
+
+ <para>6.3. Derivative Works.</para>
+
+ <para>If You create or use a modified version of this License (which you
+ may only do in order to apply it to code which is not already Covered
+ Code governed by this License), You must (a) rename Your license so that
+ the phrase "gSOAP" or any confusingly similar phrase do not appear in
+ your license (except to note that your license differs from this
+ License) and (b) otherwise make it clear that Your version of the
+ license contains terms which differ from the gSOAP Public License.
+ (Filling in the name of the Initial Developer, Original Code or
+ Contributor in the notice described in Exhibit A shall not of themselves
+ be deemed to be modifications of this License.)</para>
+
+ <para>7 DISCLAIMER OF WARRANTY.</para>
+
+ <para>COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS, IMPLIED OR STATUTORY,
+ INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, OF FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT OF
+ THIRD PARTY INTELLECTUAL PROPERTY RIGHTS, AND ANY WARRANTY THAT MAY
+ ARISE BY REASON OF TRADE USAGE, CUSTOM, OR COURSE OF DEALING. WITHOUT
+ LIMITING THE FOREGOING, YOU ACKNOWLEDGE THAT THE SOFTWARE IS PROVIDED
+ "AS IS" AND THAT THE AUTHORS DO NOT WARRANT THE SOFTWARE WILL RUN
+ UNINTERRUPTED OR ERROR FREE. LIMITED LIABILITY THE ENTIRE RISK AS TO
+ RESULTS AND PERFORMANCE OF THE SOFTWARE IS ASSUMED BY YOU. UNDER NO
+ CIRCUMSTANCES WILL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT,
+ INCIDENTAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES OF ANY KIND OR NATURE
+ WHATSOEVER, WHETHER BASED ON CONTRACT, WARRANTY, TORT (INCLUDING
+ NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, ARISING OUT OF OR IN ANY WAY
+ RELATED TO THE SOFTWARE, EVEN IF THE AUTHORS HAVE BEEN ADVISED ON THE
+ POSSIBILITY OF SUCH DAMAGE OR IF SUCH DAMAGE COULD HAVE BEEN REASONABLY
+ FORESEEN, AND NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
+ EXCLUSIVE REMEDY PROVIDED. SUCH LIMITATION ON DAMAGES INCLUDES, BUT IS
+ NOT LIMITED TO, DAMAGES FOR LOSS OF GOODWILL, LOST PROFITS, LOSS OF DATA
+ OR SOFTWARE, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION OR
+ IMPAIRMENT OF OTHER GOODS. IN NO EVENT WILL THE AUTHORS BE LIABLE FOR
+ THE COSTS OF PROCUREMENT OF SUBSTITUTE SOFTWARE OR SERVICES. YOU
+ ACKNOWLEDGE THAT THIS SOFTWARE IS NOT DESIGNED FOR USE IN ON-LINE
+ EQUIPMENT IN HAZARDOUS ENVIRONMENTS SUCH AS OPERATION OF NUCLEAR
+ FACILITIES, AIRCRAFT NAVIGATION OR CONTROL, OR LIFE-CRITICAL
+ APPLICATIONS. THE AUTHORS EXPRESSLY DISCLAIM ANY LIABILITY RESULTING
+ FROM USE OF THE SOFTWARE IN ANY SUCH ON-LINE EQUIPMENT IN HAZARDOUS
+ ENVIRONMENTS AND ACCEPTS NO LIABILITY IN RESPECT OF ANY ACTIONS OR
+ CLAIMS BASED ON THE USE OF THE SOFTWARE IN ANY SUCH ON-LINE EQUIPMENT IN
+ HAZARDOUS ENVIRONMENTS BY YOU. FOR PURPOSES OF THIS PARAGRAPH, THE TERM
+ "LIFE-CRITICAL APPLICATION" MEANS AN APPLICATION IN WHICH THE
+ FUNCTIONING OR MALFUNCTIONING OF THE SOFTWARE MAY RESULT DIRECTLY OR
+ INDIRECTLY IN PHYSICAL INJURY OR LOSS OF HUMAN LIFE. THIS DISCLAIMER OF
+ WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY
+ COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS
+ DISCLAIMER.</para>
+
+ <para>8 TERMINATION.</para>
+
+ <para>8.1.</para>
+
+ <para>This License and the rights granted hereunder will terminate
+ automatically if You fail to comply with terms herein and fail to cure
+ such breach within 30 days of becoming aware of the breach. All
+ sublicenses to the Covered Code which are properly granted shall survive
+ any termination of this License. Provisions which, by their nature, must
+ remain in effect beyond the termination of this License shall
+ survive.</para>
+
+ <para>8.2.</para>
+
+ <para>8.3.</para>
+
+ <para>If You assert a patent infringement claim against Participant
+ alleging that such Participant's Contributor Version directly or
+ indirectly infringes any patent where such claim is resolved (such as by
+ license or settlement) prior to the initiation of patent infringement
+ litigation, then the reasonable value of the licenses granted by such
+ Participant under Sections 2.1 or 2.2 shall be taken into account in
+ determining the amount or value of any payment or license.</para>
+
+ <para>8.4. In the event of termination under Sections 8.1 or 8.2 above,
+ all end user license agreements (excluding distributors and resellers)
+ which have been validly granted by You or any distributor hereunder
+ prior to termination shall survive termination.</para>
+
+ <para>9 LIMITATION OF LIABILITY.</para>
+
+ <para>UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+ (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
+ DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR
+ ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY
+ INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER
+ INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK
+ STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
+ COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
+ INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
+ LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
+ RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
+ PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION
+ OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION
+ AND LIMITATION MAY NOT APPLY TO YOU.</para>
+
+ <para>10 U.S. GOVERNMENT END USERS.</para>
+
+ <para>11 MISCELLANEOUS.</para>
+
+ <para>12 RESPONSIBILITY FOR CLAIMS.</para>
+
+ <para>As between Initial Developer and the Contributors, each party is
+ responsible for claims and damages arising, directly or indirectly, out
+ of its utilization of rights under this License and You agree to work
+ with Initial Developer and Contributors to distribute such
+ responsibility on an equitable basis. Nothing herein is intended or
+ shall be deemed to constitute any admission of liability.</para>
+
+ <para>EXHIBIT A.</para>
+
+ <para>"The contents of this file are subject to the gSOAP Public License
+ Version 1.3 (the "License"); you may not use this file except in
+ compliance with the License. You may obtain a copy of the License at
+ <ulink
+ url="http://www.cs.fsu.edu/~engelen/soaplicense.html">http://www.cs.fsu.edu/~engelen/soaplicense.html</ulink>.
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+ License for the specific language governing rights and limitations under
+ the License.</para>
+
+ <para>The Original Code of the gSOAP Software is: stdsoap.h, stdsoap2.h,
+ stdsoap.c, stdsoap2.c, stdsoap.cpp, stdsoap2.cpp, soapcpp2.h,
+ soapcpp2.c, soapcpp2_lex.l, soapcpp2_yacc.y, error2.h, error2.c,
+ symbol2.c, init2.c, soapdoc2.html, and soapdoc2.pdf, httpget.h,
+ httpget.c, stl.h, stldeque.h, stllist.h, stlvector.h, stlset.h.</para>
+
+ <para>The Initial Developer of the Original Code is Robert A. van
+ Engelen. Portions created by Robert A. van Engelen are Copyright (C)
+ 2001-2004 Robert A. van Engelen, Genivia inc. All Rights
+ Reserved.</para>
+
+ <para>Contributor(s): "________________________." [Note: The text of
+ this Exhibit A may differ slightly form the text of the notices in the
+ Source Code files of the Original code. You should use the text of this
+ Exhibit A rather than the text found in the Original Code Source Code
+ for Your Modifications.]</para>
+
+ <para>EXHIBIT B.</para>
+
+ <para>"Part of the software embedded in this product is gSOAP software.
+ Portions created by gSOAP are Copyright (C) 2001-2004 Robert A. van
+ Engelen, Genivia inc. All Rights Reserved. THE SOFTWARE IN THIS PRODUCT
+ WAS IN PART PROVIDED BY GENIVIA INC AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+ NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE."</para>
+ </sect2>
+
+ <sect2 id="licChromium">
+ <title>Chromium licenses</title>
+
+ <sect3>
+ <title>Main license</title>
+
+ <para>Copyright (c) 2002, Stanford University All rights
+ reserved.</para>
+
+ <para>Some portions of Chromium are copyrighted by individiual
+ organizations. Please see the files COPYRIGHT.LLNL and
+ COPYRIGHT.REDHAT for more information.</para>
+
+ <para>Redistribution and use in source and binary forms, with or
+ without modification, are permitted provided that the following
+ conditions are met:<itemizedlist>
+ <listitem>
+ <para>Redistributions of source code must retain the above
+ copyright notice, this list of conditions and the following
+ disclaimer.</para>
+ </listitem>
+
+ <listitem>
+ <para>Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.</para>
+ </listitem>
+
+ <listitem>
+ <para>Neither the name of Stanford University nor the names of
+ its contributors may be used to endorse or promote products
+ derived from this software without specific prior written
+ permission.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+ TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE.</para>
+ </sect3>
+
+ <sect3>
+ <title>COPYRIGHT.LLNL file</title>
+
+ <para>This Chromium distribution contains information and code which
+ is covered under the following notice:</para>
+
+ <para>Copyright (c) 2002, The Regents of the University of California.
+ Produced at the Lawrence Livermore National Laboratory For details,
+ contact: Randall Frank (rjfrank@llnl.gov). UCRL-CODE-2002-058 All
+ rights reserved.</para>
+
+ <para>This file is part of Chromium. For details, see accompanying
+ documentation.</para>
+
+ <para>Redistribution and use in source and binary forms, with or
+ without modification, are permitted provided that the following
+ conditions are met:</para>
+
+ <para>Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the disclaimer below.</para>
+
+ <para>Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the disclaimer (as noted
+ below) in the documentation and/or other materials provided with the
+ distribution.</para>
+
+ <para>Neither the name of the UC/LLNL nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.</para>
+
+ <para>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ REGENTS OF THE UNIVERSITY OF CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY
+ OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE.</para>
+
+ <para>Additional BSD Notice</para>
+
+ <para>1. This notice is required to be provided under our contract
+ with the U.S. Department of Energy (DOE). This work was produced at
+ the University of California, Lawrence Livermore National Laboratory
+ under Contract No. W-7405-ENG-48 with the DOE.</para>
+
+ <para>2. Neither the United States Government nor the University of
+ California nor any of their employees, makes any warranty, express or
+ implied, or assumes any liability or responsibility for the accuracy,
+ completeness, or usefulness of any information, apparatus, product, or
+ process disclosed, or represents that its use would not infringe
+ privately-owned rights.</para>
+
+ <para>3. Also, reference herein to any specific commercial products,
+ process, or services by trade name, trademark, manufacturer or
+ otherwise does not necessarily constitute or imply its endorsement,
+ recommendation, or favoring by the United States Government or the
+ University of California. The views and opinions of authors expressed
+ herein do not necessarily state or reflect those of the United States
+ Government or the University of California, and shall not be used for
+ advertising or product endorsement purposes.</para>
+ </sect3>
+
+ <sect3>
+ <title>COPYRIGHT.REDHAT file</title>
+
+ <para>This Chromium distribution contains information and code which
+ is covered under the following notice:</para>
+
+ <para>Copyright 2001,2002 Red Hat Inc., Durham, North Carolina.</para>
+
+ <para>All Rights Reserved.</para>
+
+ <para>Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation files
+ (the "Software"), to deal in the Software without restriction,
+ including without limitation on the rights to use, copy, modify,
+ merge, publish, distribute, sublicense, and/or sell copies of the
+ Software, and to permit persons to whom the Software is furnished to
+ do so, subject to the following conditions:</para>
+
+ <para>The above copyright notice and this permission notice (including
+ the next paragraph) shall be included in all copies or substantial
+ portions of the Software.</para>
+
+ <para>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS BE
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</para>
+ </sect3>
+ </sect2>
+
+ <sect2 id="licLibCurl">
+ <title>curl license</title>
+
+ <para>COPYRIGHT AND PERMISSION NOTICE</para>
+
+ <para>Copyright (c) 1996 - 2009, Daniel Stenberg, daniel@haxx.se.</para>
+
+ <para>All rights reserved.</para>
+
+ <para>Permission to use, copy, modify, and distribute this software for
+ any purpose with or without fee is hereby granted, provided that the
+ above copyright notice and this permission notice appear in all
+ copies.</para>
+
+ <para>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
+ THIRD PARTY RIGHTS. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.</para>
+
+ <para>Except as contained in this notice, the name of a copyright holder
+ shall not be used in advertising or otherwise to promote the sale, use
+ or other dealings in this Software without prior written authorization
+ of the copyright holder.</para>
+ </sect2>
+
+ <sect2 id="licLibgd">
+ <title>libgd license</title>
+
+ <para>Portions copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+ 2002 by Cold Spring Harbor Laboratory. Funded under Grant P41-RR02188 by
+ the National Institutes of Health.</para>
+
+ <para>Portions copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002 by
+ Boutell.Com, Inc.</para>
+
+ <para>Portions relating to GD2 format copyright 1999, 2000, 2001, 2002
+ Philip Warner.</para>
+
+ <para>Portions relating to PNG copyright 1999, 2000, 2001, 2002 Greg
+ Roelofs.</para>
+
+ <para>Portions relating to gdttf.c copyright 1999, 2000, 2001, 2002 John
+ Ellson (ellson@lucent.com).</para>
+
+ <para>Portions relating to gdft.c copyright 2001, 2002 John Ellson
+ (ellson@lucent.com).</para>
+
+ <para>Portions copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ Pierre-Alain Joye (pierre@libgd.org).</para>
+
+ <para>Portions relating to JPEG and to color quantization copyright
+ 2000, 2001, 2002, Doug Becker and copyright (C) 1994, 1995, 1996, 1997,
+ 1998, 1999, 2000, 2001, 2002, Thomas G. Lane. This software is based in
+ part on the work of the Independent JPEG Group. See the file
+ README-JPEG.TXT for more information.</para>
+
+ <para>Portions relating to WBMP copyright 2000, 2001, 2002 Maurice
+ Szmurlo and Johan Van den Brande.</para>
+
+ <para>Permission has been granted to copy, distribute and modify gd in
+ any context without fee, including a commercial application, provided
+ that this notice is present in user-accessible supporting
+ documentation.</para>
+
+ <para>This does not affect your ownership of the derived work itself,
+ and the intent is to assure proper credit for the authors of gd, not to
+ interfere with your productive use of gd. If you have questions, ask.
+ "Derived works" includes all programs that utilize the library. Credit
+ must be given in user-accessible documentation.</para>
+
+ <para>This software is provided "AS IS." The copyright holders disclaim
+ all warranties, either express or implied, including but not limited to
+ implied warranties of merchantability and fitness for a particular
+ purpose, with respect to this code and accompanying
+ documentation.</para>
+
+ <para>Although their code does not appear in gd, the authors wish to
+ thank David Koblas, David Rowley, and Hutchison Avenue Software
+ Corporation for their prior contributions.</para>
+ </sect2>
+
+ <sect2 id="licBsdIntel">
+ <title>BSD license from Intel</title>
+
+ <para>All rights reserved.</para>
+
+ <para>Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:</para>
+ <itemizedlist>
+ <listitem>
+ <para>Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.</para>
+ </listitem>
+ <listitem>
+ <para>Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.</para>
+ </listitem>
+ <listitem>
+ <para>Neither the name of the Intel Corporation nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.</para>
+ </listitem>
+ </itemizedlist>
+ <para>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE.</para>
+ </sect2>
+
+ <sect2 id="licJPEG">
+ <title>libjpeg License</title>
+
+ <para>The authors make NO WARRANTY or representation, either express or implied,
+ with respect to this software, its quality, accuracy, merchantability, or
+ fitness for a particular purpose. This software is provided "AS IS", and you,
+ its user, assume the entire risk as to its quality and accuracy.</para>
+
+ <para>This software is copyright (C) 1991-2010, Thomas G. Lane, Guido Vollbeding.
+ All Rights Reserved except as specified below.</para>
+
+ <para>Permission is hereby granted to use, copy, modify, and distribute this
+ software (or portions thereof) for any purpose, without fee, subject to these
+ conditions:</para>
+ <para>(1) If any part of the source code for this software is distributed, then this
+ README file must be included, with this copyright and no-warranty notice
+ unaltered; and any additions, deletions, or changes to the original files
+ must be clearly indicated in accompanying documentation.</para>
+ <para>(2) If only executable code is distributed, then the accompanying
+ documentation must state that "this software is based in part on the work of
+ the Independent JPEG Group".</para>
+ <para>(3) Permission for use of this software is granted only if the user accepts
+ full responsibility for any undesirable consequences; the authors accept
+ NO LIABILITY for damages of any kind.</para>
+
+ <para>These conditions apply to any software derived from or based on the IJG code,
+ not just to the unmodified library. If you use our work, you ought to
+ acknowledge us.</para>
+
+ <para>Permission is NOT granted for the use of any IJG author's name or company name
+ in advertising or publicity relating to this software or products derived from
+ it. This software may be referred to only as "the Independent JPEG Group's
+ software".</para>
+
+ <para>We specifically permit and encourage the use of this software as the basis of
+ commercial products, provided that all warranty or liability claims are
+ assumed by the product vendor.</para>
+
+ <para>ansi2knr.c is included in this distribution by permission of L. Peter Deutsch,
+ sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA.
+ ansi2knr.c is NOT covered by the above copyright and conditions, but instead
+ by the usual distribution terms of the Free Software Foundation; principally,
+ that you must include source code if you redistribute it. (See the file
+ ansi2knr.c for full details.) However, since ansi2knr.c is not needed as part
+ of any program generated from the IJG code, this does not limit you more than
+ the foregoing paragraphs do.</para>
+
+ <para>The Unix configuration script "configure" was produced with GNU Autoconf.
+ It is copyright by the Free Software Foundation but is freely distributable.
+ The same holds for its supporting scripts (config.guess, config.sub,
+ ltmain.sh). Another support script, install-sh, is copyright by X Consortium
+ but is also freely distributable.</para>
+
+ <para>The IJG distribution formerly included code to read and write GIF files.
+ To avoid entanglement with the Unisys LZW patent, GIF reading support has
+ been removed altogether, and the GIF writer has been simplified to produce
+ "uncompressed GIFs". This technique does not use the LZW algorithm; the
+ resulting GIF files are larger than usual, but are readable by all standard
+ GIF decoders.</para>
+
+ <para>We are required to state that</para>
+ <para>"The Graphics Interchange Format(c) is the Copyright property of
+ CompuServe Incorporated. GIF(sm) is a Service Mark property of
+ CompuServe Incorporated."</para>
+ </sect2>
+
+ <sect2 id="licJPEGSIMD">
+ <title>x86 SIMD extension for IJG JPEG library license</title>
+
+ <para>Copyright 2009 Pierre Ossman &lt;ossman@cendio.se&gt; for Cendio AB</para>
+ <para>Copyright 2010 D. R. Commander</para>
+
+ <para>Based on</para>
+ <para>x86 SIMD extension for IJG JPEG library - version 1.02</para>
+
+ <para>Copyright (C) 1999-2006, MIYASAKA Masaru.</para>
+
+ <para>This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.</para>
+
+ <para>Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:</para>
+
+ <para>1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.</para>
+ <para>2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.</para>
+ <para>3. This notice may not be removed or altered from any source distribution.</para>
+ </sect2>
+
+ </sect1>
+</appendix>
diff --git a/doc/manual/fr_FR/user_Troubleshooting.xml b/doc/manual/fr_FR/user_Troubleshooting.xml
new file mode 100644
index 00000000..f0b3d357
--- /dev/null
+++ b/doc/manual/fr_FR/user_Troubleshooting.xml
@@ -0,0 +1,1314 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<chapter id="Troubleshooting">
+ <title>Troubleshooting</title>
+
+ <para>This chapter provides answers to commonly asked questions. In order to
+ improve your user experience with VirtualBox, it is recommended to read this
+ section to learn more about common pitfalls and get recommendations on how
+ to use the product.</para>
+
+ <sect1>
+ <title>Procedures and tools</title>
+
+ <sect2>
+ <title>Categorizing and isolating problems</title>
+
+ <para>More often than not, a virtualized guest behaves like a physical
+ system. Any problems that a physical machine would encounter, a virtual
+ machine will encounter as well. If, for example, Internet connectivity
+ is lost due to external issues, virtual machines will be affected just
+ as much as physical ones.</para>
+
+ <para>If a true VirtualBox problem is encountered, it helps to
+ categorize and isolate the problem first. Here are some of the questions
+ that should be answered before reporting a problem:<orderedlist>
+ <listitem>
+ <para>Is the problem specific to a certain guest OS? Specific
+ release of a guest OS? Especially with Linux guest related
+ problems, the issue may be specific to a certain distribution and
+ version of Linux.</para>
+ </listitem>
+
+ <listitem>
+ <para>Is the problem specific to a certain host OS? Problems are
+ usually not host OS specific (because most of the VirtualBox code
+ base is shared across all supported platforms), but especially in
+ the areas of networking and USB support, there are significant
+ differences between host platforms. Some GUI related issues are
+ also host specific.</para>
+ </listitem>
+
+ <listitem>
+ <para>Is the problem specific to certain host hardware? This
+ category of issues is typically related to the host CPU. Because
+ of significant differences between VT-x and AMD-V, problems may be
+ specific to one or the other technology. The exact CPU model may
+ also make a difference (even for software virtualization) because
+ different CPUs support different features, which may affect
+ certain aspects of guest CPU operation.</para>
+ </listitem>
+
+ <listitem>
+ <para>Is the problem specific to a certain virtualization mode?
+ Some problems may only occur in software virtualization mode,
+ others may be specific to hardware virtualization.</para>
+ </listitem>
+
+ <listitem>
+ <para>Is the problem specific to guest SMP? That is, is it related
+ to the number of virtual CPUs (VCPUs) in the guest? Using more
+ than one CPU usually significantly affects the internal operation
+ of a guest OS.</para>
+ </listitem>
+
+ <listitem>
+ <para>Is the problem specific to the Guest Additions? In some
+ cases, this is a given (e.g., a shared folders problem), in other
+ cases it may be less obvious (for example, display problems). And
+ if the problem is Guest Additions specific, is it also specific to
+ a certain version of the Additions?</para>
+ </listitem>
+
+ <listitem>
+ <para>Is the problem specific to a certain environment? Some
+ problems are related to a particular environment external to the
+ VM; this usually involves network setup. Certain configurations of
+ external servers such as DHCP or PXE may expose problems which do
+ not occur with other, similar servers.</para>
+ </listitem>
+
+ <listitem>
+ <para>Is the problem a regression? Knowing that an issue is a
+ regression usually makes it significantly easier to find the
+ solution. In this case, it is crucial to know which version is
+ affected and which is not.</para>
+ </listitem>
+ </orderedlist></para>
+ </sect2>
+
+ <sect2>
+ <title>Collecting debugging information</title>
+
+ <para>For problem determination, it is often important to collect
+ debugging information which can be analyzed by VirtualBox support. This
+ section contains information about what kind of information can be
+ obtained.</para>
+
+ <para>Every time VirtualBox starts up a VM, a so-called <emphasis
+ role="bold">"release log file"</emphasis> is created containing lots of
+ information about the VM configuration and runtime events. The log file
+ is called <computeroutput><literal>VBox.log</literal></computeroutput>
+ and resides in the VM log file folder. Typically this will be a
+ directory like this:<screen>$HOME/VirtualBox VMs/{machinename}/Logs</screen></para>
+
+ <para>When starting a VM, the configuration file of the last run will be
+ renamed to <computeroutput>.1</computeroutput>, up to
+ <computeroutput>.3</computeroutput>. Sometimes when there is a problem,
+ it is useful to have a look at the logs. Also when requesting support
+ for VirtualBox, supplying the corresponding log file is
+ mandatory.</para>
+
+ <para>For convenience, for each virtual machine, the VirtualBox main
+ window can show these logs in a window. To access it, select a virtual
+ machine from the list on the left and select "Show logs..." from the
+ "Machine" window.</para>
+
+ <para>The release log file (VBox.log) contains a wealth of diagnostic
+ information, such as Host OS type and version, VirtualBox version and
+ build (32-bit or 64-bit), a complete dump of the guest's configuration
+ (CFGM), detailed information about the host CPU type and supported
+ features, whether hardware virtualization is enabled, information about
+ VT-x/AMD-V setup, state transitions (creating, running, paused,
+ stopping, etc.), guest BIOS messages, Guest Additions messages,
+ device-specific log entries and, at the end of execution, final guest
+ state and condensed statistics.</para>
+
+ <para>In case of crashes, it is very important to collect <emphasis
+ role="bold">crash dumps</emphasis>. This is true for both host and guest
+ crashes. For information about enabling core dumps on Linux, Solaris,
+ and OS X systems, refer to the core dump article on the VirtualBox
+ website.<footnote>
+ <para><ulink
+ url="http://www.virtualbox.org/wiki/Core_dump">http://www.virtualbox.org/wiki/Core_dump</ulink>.</para>
+ </footnote></para>
+
+ <para>You can also use <computeroutput>VBoxManage
+ debugvm</computeroutput> to create a dump of a complete virtual machine;
+ see <xref linkend="vboxmanage-debugvm" />.</para>
+
+ <para>For network related problems, it is often helpful to capture a
+ trace of network traffic. If the traffic is routed through an adapter on
+ the host, it is possible to use Wireshark or a similar tool to capture
+ the traffic there. However, this often also includes a lot of traffic
+ unrelated to the VM.</para>
+
+ <para>VirtualBox provides an ability to capture network traffic only on
+ a specific VM's network adapter. Refer to the network tracing article on
+ the VirtualBox website<footnote>
+ <para><ulink
+ url="http://www.virtualbox.org/wiki/Network_tips">http://www.virtualbox.org/wiki/Network_tips</ulink>.</para>
+ </footnote> for information on enabling this capture. The trace files
+ created by VirtualBox are in <computeroutput>.pcap</computeroutput>
+ format and can be easily analyzed with Wireshark.</para>
+ </sect2>
+
+ <sect2>
+ <title id="debugger">The built-in VM debugger</title>
+
+ <para>VirtualBox includes a built-in VM debugger, which advanced users
+ may find useful. This debugger allows for examining and, to some extent,
+ controlling the VM state.<warning>
+ <para>Use the VM debugger at your own risk. There is no support for
+ it, and the following documentation is only made available for
+ advanced users with a very high level of familiarity with the
+ x86/AMD64 machine instruction set, as well as detailed knowledge of
+ the PC architecture. A degree of familiarity with the internals of
+ the guest OS in question may also be very helpful.</para>
+ </warning></para>
+
+ <para>The VM debugger is available in all regular production versions of
+ VirtualBox, but it is disabled by default because the average user will
+ have little use for it. There are two ways to access the
+ debugger:<itemizedlist>
+ <listitem>
+ <para>A debugger console window displayed alongside the VM</para>
+ </listitem>
+
+ <listitem>
+ <para>Via the <computeroutput>telnet</computeroutput> protocol at
+ port 5000</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>The debugger can be enabled in three ways:<itemizedlist>
+ <listitem>
+ <para>Start the VM directly using <computeroutput>VirtualBox
+ --startvm</computeroutput>, with an additional
+ <computeroutput>--dbg</computeroutput>,
+ <computeroutput>--debug</computeroutput>, or
+ <computeroutput>--debug-command-line</computeroutput> argument.
+ See the VirtualBox usage help for details.</para>
+ </listitem>
+
+ <listitem>
+ <para>Set the
+ <computeroutput>VBOX_GUI_DBG_ENABLED</computeroutput> or
+ <computeroutput>VBOX_GUI_DBG_AUTO_SHOW</computeroutput>
+ environment variable to <computeroutput>true</computeroutput>
+ before launching the VirtualBox process. Setting these variables
+ (only their presence is checked) is effective even when the first
+ VirtualBox process is the VM selector window. VMs subsequently
+ launched from the selector will have the debugger enabled.</para>
+ </listitem>
+
+ <listitem>
+ <para>Set the <computeroutput>GUI/Dbg/Enabled</computeroutput>
+ extra data item to <computeroutput>true</computeroutput> before
+ launching the VM. This can be set globally or on a per VM
+ basis.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>A new 'Debug' menu entry will be added to the VirtualBox
+ application. This menu allows the user to open the debugger
+ console.</para>
+
+ <para>The VM debugger command syntax is loosely modeled on Microsoft and
+ IBM debuggers used on DOS, OS/2 and Windows. Users familiar with symdeb,
+ CodeView, or the OS/2 kernel debugger will find the VirtualBox VM
+ debugger familiar.</para>
+
+ <para>The most important command is
+ <computeroutput>help</computeroutput>. This will print brief usage help
+ for all debugger commands. The set of commands supported by the VM
+ debugger changes frequently and the
+ <computeroutput>help</computeroutput> command is always
+ up-to-date.</para>
+
+ <para>A brief summary of frequently used commands follows:<itemizedlist>
+ <listitem>
+ <para><computeroutput>stop</computeroutput> -- stops the VM
+ execution and enables single stepping</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>g</computeroutput> -- continue VM
+ execution</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>t</computeroutput> -- single step an
+ instruction</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>rg/rh/r</computeroutput> -- print the
+ guest/hypervisor/current registers</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>kg/kh/k</computeroutput> -- print the
+ guest/hypervisor/current call stack</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>da/db/dw/dd/dq</computeroutput> -- print
+ memory contents as ASCII/bytes/words/dwords/qwords</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>u</computeroutput> -- unassemble
+ memory</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>dg</computeroutput> -- print the guest's
+ GDT</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>di</computeroutput> -- print the guest's
+ IDT</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>dl</computeroutput> -- print the guest's
+ LDT</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>dt</computeroutput> -- print the guest's
+ TSS</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>dp*</computeroutput> -- print the guest's
+ page table structures</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>bp/br</computeroutput> -- set a
+ normal/recompiler breakpoint</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>bl</computeroutput> -- list
+ breakpoints</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>bc</computeroutput> -- clear a
+ breakpoint</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>writecore</computeroutput> -- writes a VM
+ core file to disk, refer <xref linkend="guestcoreformat" /></para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>See the built-in <computeroutput>help</computeroutput> for other
+ available commands.</para>
+
+ <para>The VM debugger supports symbolic debugging, although symbols for
+ guest code are often not available. For Solaris guests, the
+ <computeroutput>detect</computeroutput> command automatically determines
+ the guest OS version and locates kernel symbols in guest's memory.
+ Symbolic debugging is then available. For Linux guests, the
+ <computeroutput>detect</computeroutput> commands also determines the
+ guest OS version, but there are no symbols in the guest's memory. Kernel
+ symbols are available in the file
+ <computeroutput>/proc/kallsyms</computeroutput> on Linux guests. This
+ file must be copied to the host, for example using
+ <computeroutput>scp</computeroutput>. The
+ <computeroutput>loadmap</computeroutput> debugger command can be used to
+ make the symbol information available to the VM debugger. Note that the
+ <computeroutput>kallsyms</computeroutput> file contains the symbols for
+ the currently loaded modules; if the guest's configuration changes, the
+ symbols will change as well and must be updated.</para>
+
+ <para>For all guests, a simple way to verify that the correct symbols
+ are loaded is the <computeroutput>k</computeroutput> command. The guest
+ is normally idling and it should be clear from the symbolic information
+ that the guest operating system's idle loop is being executed.</para>
+
+ <para>Another group of debugger commands is the set of
+ <computeroutput>info</computeroutput> commands. Running
+ <computeroutput>info help</computeroutput> provides complete usage
+ information. The information commands provide ad-hoc data pertinent to
+ various emulated devices and aspects of the VMM. There is no general
+ guideline for using the <computeroutput>info</computeroutput> commands,
+ the right command to use depends entirely on the problem being
+ investigated. Some of the info commands are:<itemizedlist>
+ <listitem>
+ <para><computeroutput>cfgm</computeroutput> -- print a branch of
+ the configuration tree</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>cpuid</computeroutput> -- display the guest
+ CPUID leaves</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>ioport</computeroutput> -- print registered
+ I/O port ranges</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>mmio</computeroutput> -- print registered
+ MMIO ranges</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>mode</computeroutput> -- print the current
+ paging mode</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>pit</computeroutput> -- print the i8254 PIT
+ state</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>pic</computeroutput> -- print the i8259A PIC
+ state</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>ohci/ehci</computeroutput> -- print a subset
+ of the OHCI/EHCI USB controller state</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>pcnet0</computeroutput> -- print the PCnet
+ state</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>vgatext</computeroutput> -- print the
+ contents of the VGA framebuffer formatted as standard text
+ mode</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>timers</computeroutput> -- print all VM
+ timers</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>The output of the <computeroutput>info</computeroutput> commands
+ generally requires in-depth knowledge of the emulated device and/or
+ VirtualBox VMM internals. However, when used properly, the information
+ provided can be invaluable.</para>
+ </sect2>
+
+ <sect2 id="guestcoreformat">
+ <title>VM core format</title>
+
+ <para>VirtualBox uses the 64-bit ELF format for its VM core files
+ created by <computeroutput>VBoxManage debugvm</computeroutput>; see
+ <xref linkend="vboxmanage-debugvm" />. The VM core file contain the
+ memory and CPU dumps of the VM and can be useful for debugging your
+ guest OS. The 64-bit ELF object format specficiation can be obtained
+ here: <literal><ulink
+ url="http://downloads.openwatcom.org/ftp/devel/docs/elf-64-gen.pdf">http://downloads.openwatcom.org/ftp/devel/docs/elf-64-gen.pdf</ulink></literal>.</para>
+
+ <para>The overall layout of the VM core format is as follows:</para>
+
+ <para><screen>[ ELF 64 Header]
+[ Program Header, type PT_NOTE ]
+ -&gt; offset to COREDESCRIPTOR
+[ Program Header, type PT_LOAD ] - one for each contiguous physical memory range
+ -&gt; Memory offset of range
+ -&gt; File offset
+[ Note Header, type NT_VBOXCORE ]
+[ COREDESCRIPTOR ]
+ -&gt; Magic
+ -&gt; VM core file version
+ -&gt; VBox version
+ -&gt; Number of vCPUs etc.
+[ Note Header, type NT_VBOXCPU ] - one for each vCPU
+[ vCPU 1 Note Header ]
+ [ CPUMCTX - vCPU 1 dump ]
+[ Additional Notes + Data ] - currently unused
+[ Memory dump ]</screen></para>
+
+ <para>The memory descriptors contain physical addresses relative to the
+ guest and not virtual addresses. Regions of memory such as MMIO regions
+ are not included in the core file.</para>
+
+ <para>The relevant data structures and definitions can be found in the
+ VirtualBox sources under the following header files:
+ <computeroutput>include/VBox/dbgfcorefmt.h</computeroutput>,
+ <computeroutput>include/VBox/cpumctx.h</computeroutput> and
+ <computeroutput>src/VBox/Runtime/include/internal/ldrELFCommon.h</computeroutput>.</para>
+
+ <para>The VM core file can be inspected using
+ <computeroutput>elfdump</computeroutput> and GNU
+ <computeroutput>readelf</computeroutput> or other similar
+ utilities.</para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>General</title>
+
+ <sect2 id="configPeriodicFlush">
+ <title>Guest shows IDE/SATA errors for file-based images on slow host
+ file system</title>
+
+ <para>Occasionally, some host file systems provide very poor writing
+ performance and as a consequence cause the guest to time out IDE/SATA
+ commands. This is normal behavior and should normally cause no real
+ problems, as the guest should repeat commands that have timed out.
+ However some guests (e.g. some Linux versions) have severe problems if a
+ write to an image file takes longer than about 15 seconds. Some file
+ systems however require more than a minute to complete a single write,
+ if the host cache contains a large amount of data that needs to be
+ written.</para>
+
+ <para>The symptom for this problem is that the guest can no longer
+ access its files during large write or copying operations, usually
+ leading to an immediate hang of the guest.</para>
+
+ <para>In order to work around this problem (the true fix is to use a
+ faster file system that doesn't exhibit such unacceptable write
+ performance), it is possible to flush the image file after a certain
+ amount of data has been written. This interval is normally infinite, but
+ can be configured individually for each disk of a VM.</para>
+
+ <para>For IDE disks use the following command:</para>
+
+ <screen>VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/piix3ide/0/LUN#[x]/Config/FlushInterval" [b]</screen>
+
+ <para>For SATA disks use the following command:</para>
+
+ <screen>VBoxManage setextradata "VM name"
+ "VBoxInternal/Devices/ahci/0/LUN#[x]/Config/FlushInterval" [b]</screen>
+
+ <para>The value [x] that selects the disk for IDE is 0 for the master
+ device on the first channel, 1 for the slave device on the first
+ channel, 2 for the master device on the second channel or 3 for the
+ master device on the second channel. For SATA use values between 0 and
+ 29. Only disks support this configuration option; it must not be set for
+ CD/DVD drives.</para>
+
+ <para>The unit of the interval [b] is the number of bytes written since
+ the last flush. The value for it must be selected so that the occasional
+ long write delays do not occur. Since the proper flush interval depends
+ on the performance of the host and the host filesystem, finding the
+ optimal value that makes the problem disappear requires some
+ experimentation. Values between 1000000 and 10000000 (1 to 10 megabytes)
+ are a good starting point. Decreasing the interval both decreases the
+ probability of the problem and the write performance of the guest.
+ Setting the value unnecessarily low will cost performance without
+ providing any benefits. An interval of 1 will cause a flush for each
+ write operation and should solve the problem in any case, but has a
+ severe write performance penalty.</para>
+
+ <para>Providing a value of 0 for [b] is treated as an infinite flush
+ interval, effectively disabling this workaround. Removing the extra data
+ key by specifying no value for [b] has the same effect.</para>
+ </sect2>
+
+ <sect2>
+ <title>Responding to guest IDE/SATA flush requests</title>
+
+ <para>If desired, the virtual disk images can be flushed when the guest
+ issues the IDE FLUSH CACHE command. Normally these requests are ignored
+ for improved performance. The parameters below are only accepted for
+ disk drives. They must not be set for DVD drives.</para>
+
+ <para>To enable flushing for IDE disks, issue the following
+ command:</para>
+
+ <screen>VBoxManage setextradata "VM name" "VBoxInternal/Devices/piix3ide/0/LUN#[x]/Config/IgnoreFlush" 0</screen>
+
+ <para>The value [x] that selects the disk is 0 for the master device on
+ the first channel, 1 for the slave device on the first channel, 2 for
+ the master device on the second channel or 3 for the master device on
+ the second channel.</para>
+
+ <para>To enable flushing for SATA disks, issue the following
+ command:</para>
+
+ <screen>VBoxManage setextradata "VM name" "VBoxInternal/Devices/ahci/0/LUN#[x]/Config/IgnoreFlush" 0</screen>
+
+ <para>The value [x] that selects the disk can be a value between 0 and
+ 29.</para>
+
+ <para>Note that this doesn't affect the flushes performed according to
+ the configuration described in <xref linkend="configPeriodicFlush"
+ xrefstyle="template: %n" />. Restoring the default of ignoring flush
+ commands is possible by setting the value to 1 or by removing the
+ key.</para>
+ </sect2>
+
+ <sect2 id="hostPowerMgmt">
+ <title>Poor performance caused by host power management</title>
+
+ <para>On some hardware platforms and operating systems, virtualization
+ performance is negatively affected by host CPU power management. The
+ symptoms may be choppy audio in the guest or erratic guest clock
+ behavior.</para>
+
+ <para>Some of the problems may be caused by firmware and/or host
+ operating system bugs. Therefore, updating the firmware and applying
+ operating systems fixes is recommended.</para>
+
+ <para>For optimal virtualization performance, the C1E power state
+ support in the system's BIOS should be disabled, if such a setting is
+ available (not all systems support the C1E power state). Disabling other
+ power management settings may also improve performance. However, a
+ balance between performance and power consumption must always be
+ considered.</para>
+ </sect2>
+
+ <sect2 id="gui2D_grayedout">
+ <title>GUI: 2D Video Acceleration option is grayed out</title>
+
+ <para>To use 2D Video Acceleration within VirtualBox, your host's video
+ card should support certain OpenGL extensions. On startup, VirtualBox
+ checks for those extensions, and, if the test fails, this option is
+ silently grayed out.</para>
+
+ <para>To find out why it has failed, you can manually execute the
+ following command:</para>
+
+ <screen>VBoxTestOGL --log "log_file_name" --test 2D</screen>
+
+ <para>It will list the required OpenGL extensions one by one and will
+ show you which one failed the test. This usually means that you are
+ running an outdated or misconfigured OpenGL driver on your host. It can
+ also mean that your video chip is lacking required functionality.</para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Windows guests</title>
+
+ <sect2>
+ <title>Windows bluescreens after changing VM configuration</title>
+
+ <para>Changing certain virtual machine settings can cause Windows guests
+ to fail during start up with a bluescreen. This may happen if you change
+ VM settings after installing Windows, or if you copy a disk image with
+ an already installed Windows to a newly created VM which has settings
+ that differ from the original machine.</para>
+
+ <para>This applies in particular to the following settings:<itemizedlist>
+ <listitem>
+ <para>The ACPI and I/O APIC settings should never be changed after
+ installing Windows. Depending on the presence of these hardware
+ features, the Windows installation program chooses special kernel
+ and device driver versions and will fail to startup should these
+ hardware features be removed. (Enabling them for a Windows VM
+ which was installed without them does not cause any harm. However,
+ Windows will not use these features in this case.)</para>
+ </listitem>
+
+ <listitem>
+ <para>Changing the storage controller hardware will cause bootup
+ failures as well. This might also apply to you if you copy a disk
+ image from an older version of VirtualBox to a virtual machine
+ created with a newer VirtualBox version; the default subtype of
+ IDE controller hardware was changed from PIIX3 to PIIX4 with
+ VirtualBox 2.2. Make sure these settings are identical.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect2>
+
+ <sect2>
+ <title>Windows 0x101 bluescreens with SMP enabled (IPI timeout)</title>
+
+ <para>If a VM is configured to have more than one processor (symmetrical
+ multiprocessing, SMP), some configurations of Windows guests crash with
+ an 0x101 error message, indicating a timeout for inter-processor
+ interrupts (IPIs). These interrupts synchronize memory management
+ between processors.</para>
+
+ <para>According to Microsoft, this is due to a race condition in
+ Windows. A hotfix is available.<footnote>
+ <para>See <ulink
+ url="http://support.microsoft.com/kb/955076">http://support.microsoft.com/kb/955076</ulink>.</para>
+ </footnote> If this does not help, please reduce the number of virtual
+ processors to 1.</para>
+ </sect2>
+
+ <sect2>
+ <title>Windows 2000 installation failures</title>
+
+ <para>When installing Windows 2000 guests, you might run into one of the
+ following issues:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Installation reboots, usually during component
+ registration.</para>
+ </listitem>
+
+ <listitem>
+ <para>Installation fills the whole hard disk with empty log
+ files.</para>
+ </listitem>
+
+ <listitem>
+ <para>Installation complains about a failure installing
+ <literal>msgina.dll</literal>.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>These problems are all caused by a bug in the hard disk driver of
+ Windows 2000. After issuing a hard disk request, there is a race
+ condition in the Windows driver code which leads to corruption if the
+ operation completes too fast, i.e. the hardware interrupt from the IDE
+ controller arrives too soon. With physical hardware, there is a
+ guaranteed delay in most systems so the problem is usually hidden there
+ (however it should be possible to reproduce it on physical hardware as
+ well). In a virtual environment, it is possible for the operation to be
+ done immediately (especially on very fast systems with multiple CPUs)
+ and the interrupt is signaled sooner than on a physical system. The
+ solution is to introduce an artificial delay before delivering such
+ interrupts. This delay can be configured for a VM using the following
+ command:</para>
+
+ <screen>VBoxManage setextradata "VM name" "VBoxInternal/Devices/piix3ide/0/Config/IRQDelay" 1</screen>
+
+ <para>This sets the delay to one millisecond. In case this doesn't help,
+ increase it to a value between 1 and 5 milliseconds. Please note that
+ this slows down disk performance. After installation, you should be able
+ to remove the key (or set it to 0).</para>
+ </sect2>
+
+ <sect2>
+ <title>How to record bluescreen information from Windows guests</title>
+
+ <para>When Windows guests run into a kernel crash, they display the
+ infamous bluescreen. Depending on how Windows is configured, the
+ information will remain on the screen until the machine is restarted or
+ it will reboot automatically. During installation, Windows is usually
+ configured to reboot automatically. With automatic reboots, there is no
+ chance to record the bluescreen information which might be important for
+ problem determination.</para>
+
+ <para>VirtualBox provides a method of halting a guest when it wants to
+ perform a reset. In order to enable this feature, issue the following
+ command:</para>
+
+ <para><screen>VBoxManage setextradata "VM name" "VBoxInternal/PDM/HaltOnReset" 1</screen></para>
+ </sect2>
+
+ <sect2>
+ <title>No networking in Windows Vista guests</title>
+
+ <para>With Windows Vista, Microsoft dropped support for the AMD PCNet
+ card that VirtualBox used to provide as the default virtual network card
+ before version 1.6.0. For Windows Vista guests, VirtualBox now uses an
+ Intel E1000 card by default.</para>
+
+ <para>If, for some reason, you still want to use the AMD card, you need
+ to download the PCNet driver from the AMD website (available for 32-bit
+ Windows only). You can transfer it into the virtual machine using a
+ shared folder, see (see <xref linkend="sharedfolders" />).</para>
+ </sect2>
+
+ <sect2>
+ <title>Windows guests may cause a high CPU load</title>
+
+ <para>Several background applications of Windows guests, especially
+ virus scanners, are known to increases the CPU load notably even if the
+ guest appears to be idle. We recommend to deactivate virus scanners
+ within virtualized guests if possible.</para>
+ </sect2>
+
+ <sect2>
+ <title>Long delays when accessing shared folders</title>
+
+ <para>The performance for accesses to shared folders from a Windows
+ guest might be decreased due to delays during the resolution of the
+ VirtualBox shared folders name service. To fix these delays, add the
+ following entries to the file
+ <computeroutput>\windows\system32\drivers\etc\lmhosts</computeroutput>
+ of the Windows guest:</para>
+
+ <screen>255.255.255.255 VBOXSVR #PRE
+255.255.255.255 VBOXSRV #PRE</screen>
+
+ <para>After doing this change, a reboot of the guest is required.</para>
+ </sect2>
+
+ <sect2>
+ <title>USB tablet coordinates wrong in Windows 98 guests</title>
+
+ <para>If a Windows 98 VM is configured to use the emulated USB tablet
+ (absolute pointing device), the coordinate translation may be incorrect
+ and the pointer is restricted to the upper left quarter of the guest's
+ screen.
+ </para>
+
+ <para>The USB HID (Human Interface Device) drivers in Windows 98 are very
+ old and do not handle tablets the same way all more recent operating
+ systems do (Windows 2000 and later, Mac OS X, Solaris). To
+ work around the problem, issue the following command:
+ </para>
+
+ <para><screen>VBoxManage setextradata "VM name" "VBoxInternal/USB/HidMouse/0/Config/CoordShift" 0</screen></para>
+
+ <para>To restore the default behavior, remove the key or set its value
+ to 1.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Windows guests are removed from an Active Directory domain after
+ restoring a snapshot</title>
+
+ <para>If a Windows guest is a member of an Active Directory domain and
+ the snapshot feature of VirtualBox is used, it could happen it loses
+ this status after you restore an older snapshot.
+ </para>
+
+ <para>The reason is the automatic machine password changing performed by
+ Windows in regular intervals for security purposes. You can disable
+ this feature by following the instruction of this <ulink
+ url="http://support.microsoft.com/kb/154501">http://support.microsoft.com/kb/154501</ulink>
+ article from Microsoft.
+ </para>
+ </sect2>
+
+ </sect1>
+
+ <sect1>
+ <title>Linux and X11 guests</title>
+
+ <sect2>
+ <title>Linux guests may cause a high CPU load</title>
+
+ <para>Some Linux guests may cause a high CPU load even if the guest
+ system appears to be idle. This can be caused by a high timer frequency
+ of the guest kernel. Some Linux distributions, for example Fedora, ship
+ a Linux kernel configured for a timer frequency of <emphasis
+ role="bold"> 1000Hz</emphasis>. We recommend to recompile the guest
+ kernel and to select a timer frequency of 100Hz.</para>
+
+ <para>Linux kernels shipped with Red Hat Enterprise Linux (RHEL) as of
+ release 4.7 and 5.1 as well as kernels of related Linux distributions
+ (for instance CentOS and Oracle Enterprise Linux) support a kernel
+ parameter <emphasis>divider=N</emphasis>. Hence, such kernels support a
+ lower timer frequency without recompilation. We suggest to add the
+ kernel parameter <emphasis>divider=10</emphasis> to select a guest
+ kernel timer frequency of 100Hz.</para>
+ </sect2>
+
+ <sect2>
+ <title>AMD Barcelona CPUs</title>
+
+ <para>Most Linux-based guests will fail with AMD Phenoms or
+ Barcelona-level Opterons due to a bug in the Linux kernel. Enable the
+ I/O-APIC to work around the problem (see <xref
+ linkend="settings-system" />).</para>
+ </sect2>
+
+ <sect2 id="trouble-linux-buggy">
+ <title>Buggy Linux 2.6 kernel versions</title>
+
+ <para>The following bugs in Linux kernels prevent them from executing
+ correctly in VirtualBox, causing VM boot crashes:<itemizedlist>
+ <listitem>
+ <para>The Linux kernel version 2.6.18 (and some 2.6.17 versions)
+ introduced a race condition that can cause boot crashes in
+ VirtualBox. Please use a kernel version 2.6.19 or later.</para>
+ </listitem>
+
+ <listitem>
+ <para>With hardware virtualization and the I/O APIC enabled,
+ kernels before 2.6.24-rc6 may panic on boot with the following
+ message:<screen>Kernel panic - not syncing: IO-APIC + timer doesn't work! Boot with
+apic=debug and send a report. Then try booting with the 'noapic' option</screen></para>
+
+ <para>If you see this message, either disable hardware
+ virtualization or the I/O APIC (see <xref
+ linkend="settings-system" />), or upgrade the guest to a newer
+ kernel.<footnote>
+ <para>See <ulink
+ url="http://www.mail-archive.com/git-commits-head@vger.kernel.org/msg30813.html">http://www.mail-archive.com/git-commits-head@vger.kernel.org/msg30813.html</ulink>
+ for details about the kernel fix.</para>
+ </footnote></para>
+ </listitem>
+ </itemizedlist></para>
+ </sect2>
+
+ <sect2>
+ <title>Shared clipboard, auto-resizing and seamless desktop in X11
+ guests</title>
+
+ <para>Guest desktop services in guests running the X11 window system
+ (Solaris, Linux and others) are provided by a guest service called
+ <computeroutput>VBoxClient</computeroutput>, which runs under the ID of
+ the user who started the desktop session and is automatically started
+ using the following command lines <screen>VBoxClient --clipboard
+VBoxClient --display
+VBoxClient --seamless</screen> when your X11 user session is started if you
+ are using a common desktop environment (Gnome, KDE and others). If a
+ particular desktop service is not working correctly, it is worth
+ checking whether the process which should provide it is running.</para>
+
+ <para>The <computeroutput>VBoxClient</computeroutput> processes create
+ files in the user's home directory with names of the form
+ <computeroutput>.vboxclient-*.pid</computeroutput> when they are running
+ in order to prevent a given service from being started twice. It can
+ happen due to misconfiguration that these files are created owned by
+ root and not deleted when the services are stopped, which will prevent
+ them from being started in future sessions. If the services cannot be
+ started, you may wish to check whether these files still exist.</para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Windows hosts</title>
+
+ <sect2>
+ <title>VBoxSVC out-of-process COM server issues</title>
+
+ <para>VirtualBox makes use of the Microsoft Component Object Model (COM)
+ for inter- and intra-process communication. This allows VirtualBox to
+ share a common configuration among different virtual machine processes
+ and provide several user interface options based on a common
+ architecture. All global status information and configuration is
+ maintained by the process <computeroutput>VBoxSVC.exe</computeroutput>,
+ which is an out-of-process COM server. Whenever a VirtualBox process is
+ started, it requests access to the COM server and Windows automatically
+ starts the process. Note that it should never be started by the end
+ user.</para>
+
+ <para>When the last process disconnects from the COM server, it will
+ terminate itself after some seconds. The VirtualBox configuration (XML
+ files) is maintained and owned by the COM server and the files are
+ locked whenever the server runs.</para>
+
+ <para>In some cases - such as when a virtual machine is terminated
+ unexpectedly - the COM server will not notice that the client is
+ disconnected and stay active for a longer period (10 minutes or so)
+ keeping the configuration files locked. In other rare cases the COM
+ server might experience an internal error and subsequently other
+ processes fail to initialize it. In these situations, it is recommended
+ to use the Windows task manager to kill the process
+ <computeroutput>VBoxSVC.exe</computeroutput>.</para>
+ </sect2>
+
+ <sect2>
+ <title>CD/DVD changes not recognized</title>
+
+ <para>In case you have assigned a physical CD/DVD drive to a guest and
+ the guest does not notice when the medium changes, make sure that the
+ Windows media change notification (MCN) feature is not turned off. This
+ is represented by the following key in the Windows registry:<screen><literal>HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Cdrom\Autorun</literal></screen>Certain
+ applications may disable this key against Microsoft's advice. If it is
+ set to 0, change it to 1 and reboot your system. VirtualBox relies on
+ Windows notifying it of media changes.</para>
+ </sect2>
+
+ <sect2>
+ <title>Sluggish response when using Microsoft RDP client</title>
+
+ <para>If connecting to a Virtual Machine via the Microsoft RDP client
+ (called Remote Desktop Connection), there can be large delays between
+ input (moving the mouse over a menu is the most obvious situation) and
+ output. This is because this RDP client collects input for a certain
+ time before sending it to the RDP server.</para>
+
+ <para>The interval can be decreased by setting a Windows registry key to
+ smaller values than the default of 100. The key does not exist initially
+ and must be of type DWORD. The unit for its values is milliseconds.
+ Values around 20 are suitable for low-bandwidth connections between the
+ RDP client and server. Values around 4 can be used for a gigabit
+ Ethernet connection. Generally values below 10 achieve a performance
+ that is very close to that of the local input devices and screen of the
+ host on which the Virtual Machine is running.</para>
+
+ <para>Depending whether the setting should be changed for an individual
+ user or for the system, either</para>
+
+ <screen>HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Min Send Interval</screen>
+
+ <para>or</para>
+
+ <screen>HKEY_LOCAL_MACHINE\Software\Microsoft\Terminal Server Client\Min Send Interval</screen>
+
+ <para>can be set appropriately.</para>
+ </sect2>
+
+ <sect2>
+ <title>Running an iSCSI initiator and target on a single system</title>
+
+ <para>Deadlocks can occur on a Windows host when attempting to access an
+ iSCSI target running in a guest virtual machine with an iSCSI initiator
+ (e.g. Microsoft iSCSI Initiator) that is running on the host. This is
+ caused by a flaw in the Windows cache manager component, and causes
+ sluggish host system response for several minutes, followed by a
+ "Delayed Write Failed" error message in the system tray or in a separate
+ message window. The guest is blocked during that period and may show
+ error messages or become unstable.</para>
+
+ <para>Setting the environment variable
+ <computeroutput>VBOX_DISABLE_HOST_DISK_CACHE</computeroutput> to 1 will
+ enable a workaround for this problem until Microsoft addresses the
+ issue. For example, open a command prompt window and start VirtualBox
+ like this:</para>
+
+ <screen>set VBOX_DISABLE_HOST_DISK_CACHE=1
+VirtualBox</screen>
+
+ <para>While this will decrease guest disk performance (especially
+ writes), it does not affect the performance of other applications
+ running on the host.</para>
+ </sect2>
+
+ <sect2>
+ <title>Bridged networking adapters missing</title>
+
+ <para>If no bridged adapters show up in the "Networking" section of the
+ VM settings, this typically means that the bridged networking driver was
+ not installed properly on your host. This could be due to the following
+ reasons: <itemizedlist>
+ <listitem>
+ <para>The maximum allowed filter count was reached on the host. In
+ this case, the MSI log would mention the
+ <computeroutput>0x8004a029</computeroutput> error code returned on
+ NetFlt network component install:<screen>VBoxNetCfgWinInstallComponent: Install failed, hr (0x8004a029)</screen></para>
+
+ <para>You can try to increase the maximum filter count in the
+ Windows registry at the following key:<screen>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\MaxNumFilters</screen>The
+ maximum number allowed is 14. After a reboot, try to re-install
+ VirtualBox.</para>
+ </listitem>
+
+ <listitem>
+ <para>The INF cache is corrupt. In this case, the install log
+ (<computeroutput>%windir%\inf\setupapi.log</computeroutput> on XP
+ or <computeroutput>%windir%\inf\setupapi.dev.log</computeroutput>
+ on Vista or later) would typically mention the failure to find a
+ suitable driver package for either the
+ <computeroutput>sun_VBoxNetFlt</computeroutput> or
+ <computeroutput>sun_VBoxNetFltmp</computeroutput> components. The
+ solution then is to uninstall VirtualBox, remove the INF cache
+ (<computeroutput>%windir%\inf\INFCACHE.1</computeroutput>), reboot
+ and try to re-install VirtualBox</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect2>
+
+ <sect2>
+ <title>Host-only networking adapters cannot be created</title>
+
+ <para>If host-only adapter cannot be created (either via the Manager or
+ VBoxManage), then the INF cache is probably corrupt. In this case, the
+ install log (<computeroutput>%windir%\inf\setupapi.log</computeroutput>
+ on XP or <computeroutput>%windir%\inf\setupapi.dev.log</computeroutput>
+ on Vista or later) would typically mention the failure to find a
+ suitable driver package for the
+ <computeroutput>sun_VBoxNetAdp</computeroutput> component. Again, as
+ with the bridged networking problem described above, the solution is to
+ uninstall VirtualBox, remove the INF cache
+ (<computeroutput>%windir%\inf\INFCACHE.1</computeroutput>), reboot and
+ try to re-install VirtualBox.</para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Linux hosts</title>
+
+ <sect2 id="linuxkernelmodulefailstoload">
+ <title>Linux kernel module refuses to load</title>
+
+ <para>If the VirtualBox kernel module
+ (<computeroutput>vboxdrv</computeroutput>) refuses to load, i.e. you get
+ an "Error inserting vboxdrv: Invalid argument", check (as root) the
+ output of the <computeroutput>dmesg</computeroutput> command to find out
+ why the load failed. Most probably the kernel disagrees with the version
+ of the gcc used to compile the module. Make sure that you use the same
+ compiler as used to build the kernel.</para>
+ </sect2>
+
+ <sect2>
+ <title>Linux host CD/DVD drive not found</title>
+
+ <para>If you have configured a virtual machine to use the host's CD/DVD
+ drive, but this does not appear to work, make sure that the current user
+ has permission to access the corresponding Linux device file
+ (<computeroutput>/dev/hdc</computeroutput> or
+ <computeroutput>/dev/scd0</computeroutput> or
+ <computeroutput>/dev/cdrom</computeroutput> or similar). On most
+ distributions, the user must be added to a corresponding group (usually
+ called <computeroutput>cdrom</computeroutput> or
+ <computeroutput>cdrw</computeroutput>).</para>
+ </sect2>
+
+ <sect2>
+ <title>Linux host CD/DVD drive not found (older distributions)</title>
+
+ <para>On older Linux distributions, if your CD/DVD device has a
+ different name, VirtualBox may be unable to find it. On older Linux
+ hosts, VirtualBox performs the following steps to locate your CD/DVD
+ drives:</para>
+
+ <para><orderedlist>
+ <listitem>
+ <para>VirtualBox examines if the environment variable
+ <computeroutput>VBOX_CDROM</computeroutput> is defined (see
+ below). If so, VirtualBox omits all the following checks.</para>
+ </listitem>
+
+ <listitem>
+ <para>VirtualBox tests if
+ <computeroutput>/dev/cdrom</computeroutput> works.</para>
+ </listitem>
+
+ <listitem>
+ <para>In addition, VirtualBox checks if any CD/DVD drives are
+ currently mounted by checking
+ <computeroutput>/etc/mtab</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para>In addition, VirtualBox checks if any of the entries in
+ <computeroutput>/etc/fstab</computeroutput> point to CD/DVD
+ devices.</para>
+ </listitem>
+ </orderedlist></para>
+
+ <para>In other words, you can try to set VBOX_CDROM to contain a list of
+ your CD/DVD devices, separated by colons, for example as follows:</para>
+
+ <para><screen>export VBOX_CDROM='/dev/cdrom0:/dev/cdrom1'</screen>On
+ modern Linux distributions, VirtualBox uses the hardware abstraction
+ layer (hal) to locate CD and DVD hardware.</para>
+ </sect2>
+
+ <sect2>
+ <title>Linux host floppy not found</title>
+
+ <para>The previous instructions (for CD and DVD drives) apply
+ accordingly to floppy disks, except that on older distributions
+ VirtualBox tests for <computeroutput>/dev/fd*</computeroutput> devices
+ by default, and this can be overridden with the
+ <computeroutput>VBOX_FLOPPY</computeroutput> environment
+ variable.</para>
+ </sect2>
+
+ <sect2>
+ <title>Strange guest IDE error messages when writing to CD/DVD</title>
+
+ <para>If the experimental CD/DVD writer support is enabled with an
+ incorrect VirtualBox, host or guest configuration, it is possible that
+ any attempt to access the CD/DVD writer fails and simply results in
+ guest kernel error messages (for Linux guests) or application error
+ messages (for Windows guests). VirtualBox performs the usual consistency
+ checks when a VM is powered up (in particular it aborts with an error
+ message if the device for the CD/DVD writer is not writable by the user
+ starting the VM), but it cannot detect all misconfigurations. The
+ necessary host and guest OS configuration is not specific for
+ VirtualBox, but a few frequent problems are listed here which occurred
+ in connection with VirtualBox.</para>
+
+ <para>Special care must be taken to use the correct device. The
+ configured host CD/DVD device file name (in most cases
+ <literal>/dev/cdrom</literal>) must point to the device that allows
+ writing to the CD/DVD unit. For CD/DVD writer units connected to a SCSI
+ controller or to a IDE controller that interfaces to the Linux SCSI
+ subsystem (common for some SATA controllers), this must refer to the
+ SCSI device node (e.g. <literal>/dev/scd0</literal>). Even for IDE
+ CD/DVD writer units this must refer to the appropriate SCSI CD-ROM
+ device node (e.g. <literal>/dev/scd0</literal>) if the
+ <literal>ide-scsi</literal> kernel module is loaded. This module is
+ required for CD/DVD writer support with all Linux 2.4 kernels and some
+ early 2.6 kernels. Many Linux distributions load this module whenever a
+ CD/DVD writer is detected in the system, even if the kernel would
+ support CD/DVD writers without the module. VirtualBox supports the use
+ of IDE device files (e.g. <literal>/dev/hdc</literal>), provided the
+ kernel supports this and the <literal>ide-scsi</literal> module is not
+ loaded.</para>
+
+ <para>Similar rules (except that within the guest the CD/DVD writer is
+ always an IDE device) apply to the guest configuration. Since this setup
+ is very common, it is likely that the default configuration of the guest
+ works as expected.</para>
+ </sect2>
+
+ <sect2>
+ <title>VBoxSVC IPC issues</title>
+
+ <para>On Linux, VirtualBox makes use of a custom version of Mozilla
+ XPCOM (cross platform component object model) for inter- and
+ intra-process communication (IPC). The process
+ <computeroutput>VBoxSVC</computeroutput> serves as a communication hub
+ between different VirtualBox processes and maintains the global
+ configuration, i.e. the XML database. When starting a VirtualBox
+ component, the processes <computeroutput>VBoxSVC</computeroutput> and
+ <computeroutput>VirtualBoxXPCOMIPCD</computeroutput> are started
+ automatically. They are only accessible from the user account they are
+ running under. <computeroutput>VBoxSVC</computeroutput> owns the
+ VirtualBox configuration database which normally resides in
+ <computeroutput>~/.VirtualBox</computeroutput>. While it is running, the
+ configuration files are locked. Communication between the various
+ VirtualBox components and <computeroutput>VBoxSVC</computeroutput> is
+ performed through a local domain socket residing in
+ <computeroutput>/tmp/.vbox-&lt;username&gt;-ipc</computeroutput>. In
+ case there are communication problems (i.e. a VirtualBox application
+ cannot communicate with <computeroutput>VBoxSVC</computeroutput>),
+ terminate the daemons and remove the local domain socket
+ directory.</para>
+ </sect2>
+
+ <sect2 id="usb_linux">
+ <title>USB not working</title>
+
+ <para>If USB is not working on your Linux host, make sure that the
+ current user is a member of the
+ <computeroutput>vboxusers</computeroutput> group. On older hosts, you
+ need to make sure that the user has permission to access the USB
+ filesystem (<computeroutput>usbfs</computeroutput>), which VirtualBox
+ relies on to retrieve valid information about your host's USB devices.
+ The rest of this section only applies to those older systems.</para>
+
+ <para>As <computeroutput>usbfs</computeroutput> is a virtual filesystem,
+ a <computeroutput>chmod</computeroutput> on
+ <computeroutput>/proc/bus/usb</computeroutput> has no effect. The
+ permissions for <computeroutput>usbfs</computeroutput> can therefore
+ <emphasis>only</emphasis> be changed by editing the
+ <computeroutput>/etc/fstab</computeroutput> file.</para>
+
+ <para>For example, most Linux distributions have a user group called
+ <computeroutput>usb</computeroutput> or similar, of which the current
+ user must be a member. To give all users of that group access to usbfs,
+ make sure the following line is present:<screen># 85 is the USB group
+none /proc/bus/usb usbfs devgid=85,devmode=664 0 0</screen>Replace
+ 85 with the group ID that matches your system (search
+ <computeroutput>/etc/group</computeroutput> for "usb" or similar).
+ Alternatively, if you don't mind the security hole, give all users
+ access to USB by changing "664" to "666".</para>
+
+ <para>The various distributions are very creative from which script the
+ <computeroutput>usbfs</computeroutput> filesystem is mounted. Sometimes
+ the command is hidden in unexpected places. For SuSE 10.0 the mount
+ command is part of the udev configuration file
+ <computeroutput>/etc/udev/rules.d/50-udev.rules</computeroutput>. As
+ this distribution has no user group called
+ <computeroutput>usb</computeroutput>, you may e.g. use the
+ <computeroutput>vboxusers</computeroutput> group which was created by
+ the VirtualBox installer. Since group numbers are allocated dynamically,
+ the following example uses 85 as a placeholder. Modify the line
+ containing (a linebreak has been inserted to improve
+ readability)<screen>DEVPATH="/module/usbcore", ACTION=="add",
+ RUN+="/bin/mount -t usbfs usbfs /proc/bus/usb"</screen> and add the
+ necessary options (make sure that everything is in a single
+ line):<screen>DEVPATH="/module/usbcore", ACTION=="add",
+ RUN+="/bin/mount -t usbfs usbfs /proc/bus/usb -o devgid=85,devmode=664"</screen></para>
+
+ <para>Debian Etch has the mount command in
+ <computeroutput>/etc/init.d/mountkernfs.sh</computeroutput>. Since that
+ distribution has no group <computeroutput>usb</computeroutput>, it is
+ also the easiest solution to allow all members of the group
+ <computeroutput>vboxusers</computeroutput> to access the USB subsystem.
+ Modify the line <screen>domount usbfs usbdevfs /proc/bus/usb -onoexec,nosuid,nodev</screen>
+ so that it contains <screen>domount usbfs usbdevfs /proc/bus/usb -onoexec,nosuid,nodev,devgid=85,devmode=664</screen>
+ As usual, replace the 85 with the actual group number which should get
+ access to USB devices.</para>
+
+ <para>Other distributions do similar operations in scripts stored in the
+ <computeroutput>/etc/init.d</computeroutput> directory.</para>
+ </sect2>
+
+ <sect2>
+ <title>PAX/grsec kernels</title>
+
+ <para>Linux kernels including the grsec patch (see <literal><ulink
+ url="http://www.grsecurity.net/">http://www.grsecurity.net/</ulink></literal>)
+ and derivates have to disable PAX_MPROTECT for the VBox binaries to be
+ able to start a VM. The reason is that VBox has to create executable
+ code on anonymous memory.</para>
+ </sect2>
+
+ <sect2>
+ <title>Linux kernel vmalloc pool exhausted</title>
+
+ <para>When running a large number of VMs with a lot of RAM on a Linux
+ system (say 20 VMs with 1GB of RAM each), additional VMs might fail to
+ start with a kernel error saying that the vmalloc pool is exhausted and
+ should be extended. The error message also tells you to specify
+ <computeroutput>vmalloc=256MB</computeroutput> in your kernel parameter
+ list. If adding this parameter to your GRUB or LILO configuration makes
+ the kernel fail to boot (with a weird error message such as "failed to
+ mount the root partition"), then you have probably run into a memory
+ conflict of your kernel and initial RAM disk. This can be solved by
+ adding the following parameter to your GRUB configuration:</para>
+
+ <screen>uppermem 524288</screen>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Solaris hosts</title>
+
+ <sect2>
+ <title>Cannot start VM, not enough contiguous memory</title>
+
+ <para>The ZFS file system is known to use all available RAM as cache if
+ the default system settings are not changed. This may lead to a heavy
+ fragmentation of the host memory preventing VirtualBox VMs from being
+ started. We recommend to limit the ZFS cache by adding a line<screen>set zfs:zfs_arc_max = xxxx</screen>
+ to /etc/system where <computeroutput>xxxx</computeroutput> bytes is the
+ amount of memory usable for the ZFS cache.</para>
+ </sect2>
+
+ <sect2>
+ <title>VM aborts with out of memory errors on Solaris 10 hosts</title>
+
+ <para>32-bit Solaris 10 hosts (bug 1225025) require swap space equal to,
+ or greater than the host's physical memory size. For example, 8 GB
+ physical memory would require at least 8 GB swap. This can be configured
+ during a Solaris 10 install by choosing a 'custom install' and changing
+ the default partitions.</para>
+
+ <note>
+ <para>This restriction applies only to 32-bit Solaris hosts, 64-bit
+ hosts are not affected!</para>
+ </note>
+
+ <para>For existing Solaris 10 installs, an additional swap image needs
+ to be mounted and used as swap. Hence if you have 1 GB swap and 8 GB of
+ physical memory, you require to add 7 GB more swap. This can be done as
+ follows:</para>
+
+ <para>For ZFS (as root user):</para>
+
+ <para><screen>zfs create -V 8gb /_&lt;ZFS volume&gt;_/swap
+swap -a /dev/zvol/dsk/_&lt;ZFS volume&gt;_/swap</screen></para>
+
+ <para>To mount if after reboot, add the following line to
+ /etc/vfstab:</para>
+
+ <screen>/dev/zvol/dsk/_&lt;ZFS volume&gt;_/swap - - swap - no -</screen>
+
+ <para>Alternatively, you could grow the existing swap using:</para>
+
+ <screen>zfs set volsize=8G rpool/swap</screen>
+
+ <para>And reboot the system for the changes to take effect.</para>
+
+ <para>For UFS (as root user):</para>
+
+ <screen>mkfile 7g /path/to/swapfile.img
+swap -a /path/to/swapfile.img</screen>
+
+ <para>To mount it after reboot, add the following line to
+ /etc/vfstab:</para>
+
+ <screen>/path/to/swap.img - - swap - no -</screen>
+ </sect2>
+ </sect1>
+</chapter>
diff --git a/doc/manual/fr_FR/user_VBoxManage.xml b/doc/manual/fr_FR/user_VBoxManage.xml
new file mode 100644
index 00000000..78ccc8cb
--- /dev/null
+++ b/doc/manual/fr_FR/user_VBoxManage.xml
@@ -0,0 +1,3381 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<chapter id="vboxmanage">
+ <title>VBoxManage</title>
+
+ <sect1>
+ <title>Introduction</title>
+
+ <para>As briefly mentioned in <xref linkend="frontends" />, VBoxManage is
+ the command-line interface to VirtualBox. With it, you can completely
+ control VirtualBox from the command line of your host operating system.
+ VBoxManage supports all the features that the graphical user interface
+ gives you access to, but it supports a lot more than that. It exposes
+ really all the features of the virtualization engine, even those that
+ cannot (yet) be accessed from the GUI.</para>
+
+ <para>You will need to use the command line if you want to</para>
+
+ <para><itemizedlist>
+ <listitem>
+ <para>use a different user interface than the main GUI (for example,
+ VBoxSDL or the VBoxHeadless server);</para>
+ </listitem>
+
+ <listitem>
+ <para>control some of the more advanced and experimental
+ configuration settings for a VM.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>There are two main things to keep in mind when using
+ <computeroutput>VBoxManage</computeroutput>: First,
+ <computeroutput>VBoxManage</computeroutput> must always be used with a
+ specific "subcommand", such as "list" or "createvm" or "startvm". All the
+ subcommands that <computeroutput>VBoxManage</computeroutput> supports are
+ described in detail in <xref linkend="vboxmanage" />.</para>
+
+ <para>Second, most of these subcommands require that you specify a
+ particular virtual machine after the subcommand. There are two ways you
+ can do this:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>You can specify the VM name, as it is shown in the VirtualBox
+ GUI. Note that if that name contains spaces, then you must enclose the
+ entire name in double quotes (as it is always required with command
+ line arguments that contain spaces).</para>
+
+ <para>For example:<screen>VBoxManage startvm "Windows XP"</screen></para>
+ </listitem>
+
+ <listitem>
+ <para>You can specify the UUID, which is the internal unique
+ identifier that VirtualBox uses to refer to the virtual machine.
+ Assuming that the aforementioned VM called "Windows XP" has the UUID
+ shown below, the following command has the same effect as the
+ previous:<screen>VBoxManage startvm 670e746d-abea-4ba6-ad02-2a3b043810a5</screen></para>
+ </listitem>
+ </itemizedlist>
+
+ <para>You can type <computeroutput>VBoxManage list vms</computeroutput> to
+ have all currently registered VMs listed with all their settings,
+ including their respective names and UUIDs.</para>
+
+ <para>Some typical examples of how to control VirtualBox from the command
+ line are listed below:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>To create a new virtual machine from the command line and
+ immediately register it with VirtualBox, use
+ <computeroutput>VBoxManage createvm</computeroutput> with the
+ <computeroutput>--register</computeroutput> option,<footnote>
+ <para>For details, see <xref
+ linkend="vboxmanage-createvm" />.</para>
+ </footnote> like this:</para>
+
+ <screen>$ VBoxManage createvm --name "SUSE 10.2" --register
+VirtualBox Command Line Management Interface Version $VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILD
+(C) 2005-$VBOX_C_YEAR $VBOX_VENDOR
+All rights reserved.
+
+Virtual machine 'SUSE 10.2' is created.
+UUID: c89fc351-8ec6-4f02-a048-57f4d25288e5
+Settings file: '/home/username/.VirtualBox/Machines/SUSE 10.2/SUSE 10.2.xml'
+</screen>
+
+ <para>As can be seen from the above output, a new virtual machine has
+ been created with a new UUID and a new XML settings file.</para>
+ </listitem>
+
+ <listitem>
+ <para>To show the configuration of a particular VM, use
+ <computeroutput>VBoxManage showvminfo</computeroutput>; see <xref
+ linkend="vboxmanage-showvminfo" /> for details and an example.</para>
+ </listitem>
+
+ <listitem>
+ <para>To change settings while a VM is powered off, use
+ <computeroutput>VBoxManage modifyvm</computeroutput>, e.g. as
+ follows:<screen>VBoxManage modifyvm "Windows XP" --memory "512MB"</screen></para>
+
+ <para>For details, see <xref linkend="vboxmanage-modifyvm" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>To change the storage configuration (e.g. to add a storage
+ controller and then a virtual disk), use <computeroutput>VBoxManage
+ storagectl</computeroutput> and <computeroutput>VBoxManage
+ storageattach</computeroutput>; see <xref
+ linkend="vboxmanage-storagectl" /> and <xref
+ linkend="vboxmanage-storageattach" /> for details.</para>
+ </listitem>
+
+ <listitem>
+ <para>To control VM operation, use one of the following:<itemizedlist>
+ <listitem>
+ <para>To start a VM that is currently powered off, use
+ <computeroutput>VBoxManage startvm</computeroutput>; see <xref
+ linkend="vboxmanage-startvm" /> for details.</para>
+ </listitem>
+
+ <listitem>
+ <para>To pause or save a VM that is currently running or change
+ some of its settings, use <computeroutput>VBoxManage
+ controlvm</computeroutput>; see <xref
+ linkend="vboxmanage-controlvm" /> for details.</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Commands overview</title>
+
+ <para>When running VBoxManage without parameters or when supplying an
+ invalid command line, the below syntax diagram will be shown. Note that
+ the output will be slightly different depending on the host platform; when
+ in doubt, check the output of <computeroutput>VBoxManage</computeroutput>
+ for the commands available on your particular host.</para>
+
+ <screen>$VBOX_MANAGE_OUTPUT</screen>
+
+ <para>Each time VBoxManage is invoked, only one command can be executed.
+ However, a command might support several subcommands which then can be
+ invoked in one single call. The following sections provide detailed
+ reference information on the different commands.</para>
+ </sect1>
+
+ <sect1 id="vboxmanage-list">
+ <title>VBoxManage list</title>
+
+ <para>The <computeroutput>list</computeroutput> command gives relevant
+ information about your system and information about VirtualBox's current
+ settings.</para>
+
+ <para>The following subcommands are available with
+ <computeroutput>VBoxManage list</computeroutput>: <itemizedlist>
+ <listitem>
+ <para><computeroutput>vms</computeroutput> lists all virtual
+ machines currently registered with VirtualBox. By default this
+ displays a compact list with each VM's name and UUID; if you also
+ specify <computeroutput>--long</computeroutput> or
+ <computeroutput>-l</computeroutput>, this will be a detailed list as
+ with the <computeroutput>showvminfo</computeroutput> command (see
+ below).</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>runningvms</computeroutput> lists all
+ currently running virtual machines by their unique identifiers
+ (UUIDs) in the same format as with
+ <computeroutput>vms</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>ostypes</computeroutput> lists all guest
+ operating systems presently known to VirtualBox, along with the
+ identifiers used to refer to them with the
+ <computeroutput>modifyvm</computeroutput> command.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>hostdvds</computeroutput>,
+ <computeroutput>hostfloppies</computeroutput>, respectively, list
+ DVD, floppy, bridged networking and host-only networking interfaces
+ on the host, along with the name used to access them from within
+ VirtualBox.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>bridgedifs</computeroutput>,
+ <computeroutput>hostonlyifs</computeroutput> and
+ <computeroutput>dhcpservers</computeroutput>, respectively, list
+ bridged network interfaces, host-only network interfaces and DHCP
+ servers currently available on the host. Please see <xref
+ linkend="networkingdetails" /> for details on these.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>hostinfo</computeroutput> displays information
+ about the host system, such as CPUs, memory size and operating
+ system version.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>hostcpuids</computeroutput> dumps the CPUID
+ parameters for the host CPUs. This can be used for a more fine
+ grained analyis of the host's virtualization capabilities.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>hddbackends</computeroutput> lists all known
+ virtual disk back-ends of VirtualBox. For each such format (such as
+ VDI, VMDK or RAW), this lists the back-end's capabilities and
+ configuration.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>hdds</computeroutput>,
+ <computeroutput>dvds</computeroutput> and
+ <computeroutput>floppies</computeroutput> all give you information
+ about virtual disk images currently in use by VirtualBox, including
+ all their settings, the unique identifiers (UUIDs) associated with
+ them by VirtualBox and all files associated with them. This is the
+ command-line equivalent of the Virtual Media Manager; see <xref
+ linkend="vdis" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>usbhost</computeroutput> supplies information
+ about USB devices attached to the host, notably information useful
+ for constructing USB filters and whether they are currently in use
+ by the host.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>usbfilters</computeroutput> lists all global
+ USB filters registered with VirtualBox -- that is, filters for
+ devices which are accessible to all virtual machines -- and displays
+ the filter parameters.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>systemproperties</computeroutput> displays
+ some global VirtualBox settings, such as minimum and maximum guest
+ RAM and virtual hard disk size, folder settings and the current
+ authentication library in use.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>extpacks</computeroutput> displays all
+ VirtualBox extension packs currently installed; see <xref
+ linkend="intro-installing" /> and <xref
+ linkend="vboxmanage-extpack" /> for more information.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect1>
+
+ <sect1 id="vboxmanage-showvminfo">
+ <title>VBoxManage showvminfo</title>
+
+ <para>The <computeroutput>showvminfo</computeroutput> command shows
+ information about a particular virtual machine. This is the same
+ information as <computeroutput>VBoxManage list vms --long</computeroutput>
+ would show for all virtual machines.</para>
+
+ <para>You will get information similar to the following:</para>
+
+ <para><screen>$ VBoxManage showvminfo "Windows XP"
+VirtualBox Command Line Management Interface Version $VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILD
+(C) 2005-$VBOX_C_YEAR $VBOX_VENDOR
+All rights reserved.
+
+Name: Windows XP
+Guest OS: Other/Unknown
+UUID: 1bf3464d-57c6-4d49-92a9-a5cc3816b7e7
+Config file: /home/username/.VirtualBox/Machines/Windows XP/Windows XP.xml
+Memory size: 512MB
+VRAM size: 12MB
+Number of CPUs: 2
+Synthetic Cpu: off
+Boot menu mode: message and menu
+Boot Device (1): DVD
+Boot Device (2): HardDisk
+Boot Device (3): Not Assigned
+Boot Device (4): Not Assigned
+ACPI: on
+IOAPIC: on
+PAE: on
+Time offset: 0 ms
+Hardw. virt.ext: on
+Hardw. virt.ext exclusive: on
+Nested Paging: on
+VT-x VPID: off
+State: powered off (since 2009-10-20T14:52:19.000000000)
+Monitor count: 1
+3D Acceleration: off
+2D Video Acceleration: off
+Teleporter Enabled: off
+Teleporter Port: 0
+Teleporter Address:
+Teleporter Password:
+Storage Controller (0): IDE Controller
+Storage Controller Type (0): PIIX4
+Storage Controller (1): Floppy Controller 1
+Storage Controller Type (1): I82078
+IDE Controller (0, 0): /home/user/windows.vdi (UUID: 46f6e53a-4557-460a-9b95-68b0f17d744b)
+IDE Controller (0, 1): /home/user/openbsd-cd46.iso (UUID: 4335e162-59d3-4512-91d5-b63e94eebe0b)
+Floppy Controller 1 (0, 0): /home/user/floppy.img (UUID: 62ac6ccb-df36-42f2-972e-22f836368137)
+NIC 1: disabled
+NIC 2: disabled
+NIC 3: disabled
+NIC 4: disabled
+NIC 5: disabled
+NIC 6: disabled
+NIC 7: disabled
+NIC 8: disabled
+UART 1: disabled
+UART 2: disabled
+Audio: disabled (Driver: Unknown)
+Clipboard Mode: Bidirectional
+VRDE: disabled
+USB: disabled
+
+USB Device Filters:
+&lt;none&gt;
+
+Shared folders:
+&lt;none&gt;
+
+Statistics update: disabled
+</screen></para>
+ </sect1>
+
+ <sect1 id="vboxmanage-registervm">
+ <title>VBoxManage registervm / unregistervm</title>
+
+ <para>The <computeroutput>registervm</computeroutput> command allows you
+ to import a virtual machine definition in an XML file into VirtualBox. The
+ machine must not conflict with one already registered in VirtualBox and it
+ may not have any hard or removable disks attached. It is advisable to
+ place the definition file in the machines folder before registering
+ it.<note>
+ <para>When creating a new virtual machine with
+ <computeroutput>VBoxManage createvm</computeroutput> (see below), you
+ can directly specify the <computeroutput>--register</computeroutput>
+ option to avoid having to register it separately.</para>
+ </note></para>
+
+ <para>The <computeroutput>unregistervm</computeroutput> command
+ unregisters a virtual machine. If
+ <computeroutput>--delete</computeroutput> is also specified, the following
+ files will automatically be deleted as well:<orderedlist>
+ <listitem>
+ <para>all hard disk image files, including differencing files, which
+ are used by the machine and not shared with other machines;</para>
+ </listitem>
+
+ <listitem>
+ <para>saved state files that the machine created, if any (one if the
+ machine was in "saved" state and one for each online
+ snapshot);</para>
+ </listitem>
+
+ <listitem>
+ <para>the machine XML file and its backups;</para>
+ </listitem>
+
+ <listitem>
+ <para>the machine log files, if any;</para>
+ </listitem>
+
+ <listitem>
+ <para>the machine directory, if it is empty after having deleted all
+ the above.</para>
+ </listitem>
+ </orderedlist></para>
+ </sect1>
+
+ <sect1>
+ <title id="vboxmanage-createvm">VBoxManage createvm</title>
+
+ <para>This command creates a new XML virtual machine definition
+ file.</para>
+
+ <para>The <computeroutput>--name &lt;name&gt;</computeroutput> parameter
+ is required and must specify the name of the machine. Since this name is
+ used by default as the file name of the settings file (with the extension
+ <computeroutput>.xml</computeroutput>) and the machine folder (a subfolder
+ of the <computeroutput>.VirtualBox/Machines</computeroutput> folder), it
+ must conform to your host operating system's requirements for file name
+ specifications. If the VM is later renamed, the file and folder names will
+ change automatically.</para>
+
+ <para>However, if the <computeroutput>--basefolder
+ &lt;path&gt;</computeroutput> option is used, the machine folder will be
+ named <computeroutput>&lt;path&gt;</computeroutput>. In this case, the
+ names of the file and the folder will not change if the virtual machine is
+ renamed.</para>
+
+ <para>By default, this command only creates the XML file without
+ automatically registering the VM with your VirtualBox installation. To
+ register the VM instantly, use the optional
+ <computeroutput>--register</computeroutput> option, or run
+ <computeroutput>VBoxManage registervm</computeroutput> separately
+ afterwards.</para>
+ </sect1>
+
+ <sect1 id="vboxmanage-modifyvm">
+ <title>VBoxManage modifyvm</title>
+
+ <para>This command changes the properties of a registered virtual machine
+ which is not running. Most of the properties that this command makes
+ available correspond to the VM settings that VirtualBox graphical user
+ interface displays in each VM's "Settings" dialog; these were described in
+ <xref linkend="BasicConcepts" />. Some of the more advanced settings,
+ however, are only available through the
+ <computeroutput>VBoxManage</computeroutput> interface.</para>
+
+ <para>These commands require that the machine is powered off (neither
+ running nor in "saved" state). Some machine settings can also be changed
+ while a machine is running; those settings will then have a corresponding
+ subcommand with the <computeroutput>VBoxManage controlvm</computeroutput>
+ subcommand (see <xref linkend="vboxmanage-controlvm" />).</para>
+
+ <sect2>
+ <title>General settings</title>
+
+ <para>The following general settings are available through
+ <computeroutput>VBoxManage modifyvm</computeroutput>:<itemizedlist>
+ <listitem>
+ <para><computeroutput>--name &lt;name&gt;</computeroutput>: This
+ changes the VM's name and possibly renames the internal virtual
+ machine files, as described with <computeroutput>VBoxManage
+ createvm</computeroutput> above.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--ostype &lt;ostype&gt;</computeroutput>:
+ This specifies what guest operating system is supposed to run in
+ the VM. To learn about the various identifiers that can be used
+ here, use <computeroutput>VBoxManage list
+ ostypes</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--memory
+ &lt;memorysize&gt;</computeroutput>: This sets the amount of RAM,
+ in MB, that the virtual machine should allocate for itself from
+ the host. See the remarks in <xref linkend="gui-createvm" /> for
+ more information.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--vram &lt;vramsize&gt;</computeroutput>:
+ This sets the amount of RAM that the virtual graphics card should
+ have. See <xref linkend="settings-display" /> for details.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--acpi on|off</computeroutput>;
+ <computeroutput>--ioapic on|off</computeroutput>: These two
+ determine whether the VM should have ACPI and I/O APIC support,
+ respectively; see <xref linkend="settings-motherboard" /> for
+ details.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--hardwareuuid
+ &lt;uuid&gt;</computeroutput>: The UUID presented to the guest via
+ memory tables (DMI/SMBIOS), hardware and guest properties. By
+ default this is the same as the VM uuid. Useful when cloning a VM.
+ Teleporting takes care of this automatically.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--cpus &lt;cpucount&gt;</computeroutput>:
+ This sets the number of virtual CPUs for the virtual machine (see
+ <xref linkend="settings-processor" />). If CPU hot-plugging is
+ enabled (see below), this then sets the
+ <emphasis>maximum</emphasis> number of virtual CPUs that can be
+ plugged into the virtual machines.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--rtcuseutc on|off</computeroutput>: This
+ option lets the real-time clock (RTC) operate in UTC time (see
+ <xref linkend="settings-motherboard" />).</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--cpuhotplug on|off</computeroutput>: This
+ enables CPU hot-plugging. When enabled, virtual CPUs can be added
+ to and removed from a virtual machine while it is running. See
+ <xref linkend="cpuhotplug" /> for more information.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--plugcpu|unplugcpu
+ &lt;id&gt;</computeroutput>: If CPU hot-plugging is enabled (see
+ above), this adds a virtual CPU to the virtual machines (or
+ removes one). <computeroutput>&lt;id&gt;</computeroutput>
+ specifies the index of the virtual CPU to be added or removed and
+ must be a number from 0 to the maximum no. of CPUs configured with
+ the <computeroutput>--cpus</computeroutput> option. CPU 0 can
+ never be removed.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--cpuexecutioncap
+ &lt;1-100&gt;</computeroutput>: This setting controls how much cpu
+ time a virtual CPU can use. A value of 50 implies a single virtual
+ CPU can use up to 50% of a single host CPU.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--synthcpu on|off</computeroutput>: This
+ setting determines whether VirtualBox will expose a synthetic CPU
+ to the guest to allow live migration between host systems that
+ differ significantly.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--pae on|off</computeroutput>: This
+ enables/disables PAE (see <xref
+ linkend="settings-processor" />).</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--hpet on|off</computeroutput>: This
+ enables/disables a High Precision Event Timer (HPET) which can
+ replace the legacy system timers. This is turned off by default.
+ Note that Windows supports a HPET only from Vista onwards.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--hwvirtex on|off</computeroutput>: This
+ enables or disables the use of hardware virtualization extensions
+ (Intel VT-x or AMD-V) in the processor of your host system; see
+ <xref linkend="hwvirt" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--hwvirtexexcl on|off</computeroutput>: This
+ specifies whether VirtualBox will make exclusive use of the
+ hardware virtualization extensions (Intel VT-x or AMD-V) in the
+ processor of your host system; see <xref linkend="hwvirt" />. If
+ you wish to simultaneously share these extensions with other
+ hypervisors, then you must disable this setting. Doing so has
+ negative performance implications.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--nestedpaging on|off</computeroutput>: If
+ hardware virtualization is enabled, this additional setting
+ enables or disables the use of the nested paging feature in the
+ processor of your host system; see <xref
+ linkend="hwvirt" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--largepages on|off</computeroutput>: If
+ hardware virtualization <emphasis>and</emphasis> nested paging are
+ enabled, for Intel VT-x only, an additional performance
+ improvement of up to 5% can be obtained by enabling this setting.
+ This causes the hypervisor to use large pages to reduce TLB use
+ and overhead.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--vtxvpid on|off</computeroutput>: If
+ hardware virtualization is enabled, for Intel VT-x only, this
+ additional setting enables or disables the use of the tagged TLB
+ (VPID) feature in the processor of your host system; see <xref
+ linkend="hwvirt" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--accelerate3d on|off</computeroutput>: This
+ enables, if the Guest Additions are installed, whether hardware 3D
+ acceleration should be available; see <xref
+ linkend="guestadd-3d" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>You can influence the BIOS logo that is displayed when a
+ virtual machine starts up with a number of settings. Per default,
+ a VirtualBox logo is displayed.</para>
+
+ <para>With <computeroutput>--bioslogofadein
+ on|off</computeroutput> and <computeroutput>--bioslogofadeout
+ on|off</computeroutput>, you can determine whether the logo should
+ fade in and out, respectively.</para>
+
+ <para>With <computeroutput>--bioslogodisplaytime
+ &lt;msec&gt;</computeroutput> you can set how long the logo should
+ be visible, in milliseconds.</para>
+
+ <para>With <computeroutput>--bioslogoimagepath
+ &lt;imagepath&gt;</computeroutput> you can, if you are so
+ inclined, replace the image that is shown, with your own logo. The
+ image must be an uncompressed 256 color BMP file.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--biosbootmenu
+ disabled|menuonly|messageandmenu</computeroutput>: This specifies
+ whether the BIOS allows the user to select a temporary boot
+ device. <computeroutput>menuonly</computeroutput> suppresses the
+ message, but the user can still press F12 to select a temporary
+ boot device.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--boot&lt;1-4&gt;
+ none|floppy|dvd|disk|net</computeroutput>: This specifies the boot
+ order for the virtual machine. There are four "slots", which the
+ VM will try to access from 1 to 4, and for each of which you can
+ set a device that the VM should attempt to boot from.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--snapshotfolder
+ default|&lt;path&gt;</computeroutput>: This allows you to specify
+ the folder in which snapshots will be kept for a virtual
+ machine.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--firmware efi|bios</computeroutput>:
+ Specifies which firmware is used to boot particular virtual
+ machine: EFI or BIOS. Use EFI only if your fully understand what
+ you're doing.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--guestmemoryballoon
+ &lt;size&gt;</computeroutput> sets the default size of the guest
+ memory balloon, that is, memory allocated by the VirtualBox Guest
+ Additions from the guest operating system and returned to the
+ hypervisor for re-use by other virtual machines. &lt;size&gt; must
+ be specified in megabytes. The default size is 0 megabytes. For
+ details, see <xref linkend="guestadd-balloon" />.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect2>
+
+ <sect2>
+ <title>Networking settings</title>
+
+ <para>The following networking settings are available through
+ <computeroutput>VBoxManage modifyvm</computeroutput>. With all these
+ settings, the decimal number directly following the option name ("1-N"
+ in the list below) specifies the virtual network adapter whose settings
+ should be changed.<itemizedlist>
+ <listitem>
+ <para><computeroutput>--nic&lt;1-N&gt;
+ none|null|nat|bridged|intnet|hostonly|generic
+ </computeroutput>: With
+ this, you can set, for each of the VM's virtual network cards,
+ what type of networking should be available. They can be not
+ present (<computeroutput>none</computeroutput>), not connected to
+ the host (<computeroutput>null</computeroutput>), use network
+ address translation (<computeroutput>nat</computeroutput>),
+ bridged networking (<computeroutput>bridged</computeroutput>) or
+ communicate with other virtual machines using internal networking
+ (<computeroutput>intnet</computeroutput>), host-only networking
+ (<computeroutput>hostonly</computeroutput>), or access rarely used
+ sub-modes (<computeroutput>generic</computeroutput>).
+ These options correspond
+ to the modes which are described in detail in <xref
+ linkend="networkingmodes" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--nictype&lt;1-N&gt;
+ Am79C970A|Am79C973|82540EM|82543GC|82545EM|virtio</computeroutput>:
+ This allows you, for each of the VM's virtual network cards, to
+ specify which networking hardware VirtualBox presents to the
+ guest; see <xref linkend="nichardware" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--cableconnected&lt;1-N&gt;
+ on|off</computeroutput>: This allows you to temporarily disconnect
+ a virtual network interface, as if a network cable had been pulled
+ from a real network card. This might be useful for resetting
+ certain software components in the VM.</para>
+ </listitem>
+
+ <listitem>
+ <para>With the "nictrace" options, you can optionally trace
+ network traffic by dumping it to a file, for debugging
+ purposes.</para>
+
+ <para>With <computeroutput>--nictrace&lt;1-N&gt;
+ on|off</computeroutput>, you can enable network tracing for a
+ particular virtual network card.</para>
+
+ <para>If enabled, you must specify with
+ <computeroutput>--nictracefile&lt;1-N&gt;
+ &lt;filename&gt;</computeroutput> what file the trace should be
+ logged to.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--bridgeadapter&lt;1-N&gt;
+ none|&lt;devicename&gt;</computeroutput>: If bridged networking
+ has been enabled for a virtual network card (see the
+ <computeroutput>--nic</computeroutput> option above; otherwise
+ this setting has no effect), use this option to specify which host
+ interface the given virtual network interface will use. For
+ details, please see <xref linkend="network_bridged" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--hostonlyadapter&lt;1-N&gt;
+ none|&lt;devicename&gt;</computeroutput>: If host-only networking
+ has been enabled for a virtual network card (see the --nic option
+ above; otherwise this setting has no effect), use this option to
+ specify which host-only networking interface the given virtual
+ network interface will use. For details, please see <xref
+ linkend="network_hostonly" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--intnet&lt;1-N&gt;
+ network</computeroutput>: If internal networking has been enabled
+ for a virtual network card (see the
+ <computeroutput>--nic</computeroutput> option above; otherwise
+ this setting has no effect), use this option to specify the name
+ of the internal network (see <xref
+ linkend="network_internal" />).</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--macaddress&lt;1-N&gt;
+ auto|&lt;mac&gt;</computeroutput>: With this option you can set
+ the MAC address of the virtual network card. Normally, each
+ virtual network card is assigned a random address by VirtualBox at
+ VM creation.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--nicgenericdrv&lt;1-N&gt;
+ &lt;backend driver&gt;</computeroutput>: If generic networking has been
+ enabled for a virtual network card (see the
+ <computeroutput>--nic</computeroutput> option above; otherwise
+ this setting has no effect), this mode allows you to access
+ rarely used networking sub-modes, such as VDE network or UDP Tunnel.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--nicproperty&lt;1-N&gt;
+ &lt;paramname&gt;="paramvalue"</computeroutput>:
+ This option, in combination with "nicgenericdrv" allows you to
+ pass parameters to rarely-used network backends.</para><para>
+ Those parameters are backend engine-specific, and are different
+ between UDP Tunnel and the VDE backend drivers. For example,
+ please see <xref linkend="network_udp_tunnel" />.
+ </para>
+ </listitem>
+ </itemizedlist></para>
+
+ <sect3>
+ <title>NAT Networking settings.</title>
+
+ <para>The following NAT networking settings are available through
+ <computeroutput>VBoxManage modifyvm</computeroutput>. With all these
+ settings, the decimal number directly following the option name ("1-N"
+ in the list below) specifies the virtual network adapter whose
+ settings should be changed.<itemizedlist>
+ <listitem>
+ <para><computeroutput>--natpf&lt;1-N&gt;
+ [&lt;name&gt;],tcp|udp,[&lt;hostip&gt;],&lt;hostport&gt;,[&lt;guestip&gt;],
+ &lt;guestport&gt;</computeroutput>: This option defines a NAT
+ port-forwarding rule (please see <xref linkend="natforward" />
+ for details).</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--natpf&lt;1-N&gt; delete
+ &lt;name&gt;</computeroutput>: This option deletes a NAT
+ port-forwarding rule (please see <xref linkend="natforward" />
+ for details).</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--nattftpprefix&lt;1-N&gt;
+ &lt;prefix&gt;</computeroutput>: This option defines a prefix
+ for the built-in TFTP server, i.e. where the boot file is
+ located (please see <xref linkend="nat-tftp" /> and <xref
+ linkend="nat-adv-tftp" /> for details).</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--nattftpfile&lt;1-N&gt;
+ &lt;bootfile&gt;</computeroutput>: This option defines the TFT
+ boot file (please see <xref linkend="nat-adv-tftp" /> for
+ details).</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--nattftpserver&lt;1-N&gt;
+ &lt;tftpserver&gt;</computeroutput>: This option defines the
+ TFTP server address to boot from (please see <xref
+ linkend="nat-adv-tftp" /> for details).</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--natdnspassdomain&lt;1-N&gt;
+ on|off</computeroutput>: This option specifies whether the
+ built-in DHCP server passes the domain name for network name
+ resolution.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--natdnsproxy&lt;1-N&gt;
+ on|off</computeroutput>: This option makes the NAT engine proxy
+ all guest DNS requests to the host's DNS servers (please see
+ <xref linkend="nat-adv-dns" /> for details).</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--natdnshostresolver&lt;1-N&gt;
+ on|off</computeroutput>: This option makes the NAT engine use
+ the host's resolver mechanisms to handle DNS requests (please
+ see <xref linkend="nat-adv-dns" /> for details).</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--natnatsettings&lt;1-N&gt;
+ [&lt;mtu&gt;],[&lt;socksnd&gt;],[&lt;sockrcv&gt;],[&lt;tcpsnd&gt;],
+ [&lt;tcprcv&gt;]</computeroutput>: This option controls several
+ NAT settings (please see <xref linkend="nat-adv-settings" /> for
+ details).</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--nataliasmode&lt;1-N&gt;
+ default|[log],[proxyonly],[sameports]</computeroutput>: This
+ option defines behaviour of NAT engine core: log - enables
+ logging, proxyonly - switches of aliasing mode makes NAT
+ transparent, sameports enforces NAT engine to send packets via
+ the same port as they originated on, default - disable all
+ mentioned modes above . (please see <xref
+ linkend="nat-adv-alias" /> for details).</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect3>
+ </sect2>
+
+ <sect2 id="vboxmanage-modifyvm-other">
+ <title>Serial port, audio, clipboard, remote desktop and USB
+ settings</title>
+
+ <para>The following other hardware settings are available through
+ <computeroutput>VBoxManage modifyvm</computeroutput>:<itemizedlist>
+ <listitem>
+ <para><computeroutput>--uart&lt;1-N&gt; off|&lt;I/O base&gt;
+ &lt;IRQ&gt;</computeroutput>: With this option you can configure
+ virtual serial ports for the VM; see <xref
+ linkend="serialports" /> for an introduction.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--uartmode&lt;1-N&gt;
+ &lt;arg&gt;</computeroutput>: This setting controls how VirtualBox
+ connects a given virtual serial port (previously configured with
+ the <computeroutput>--uartX</computeroutput> setting, see above)
+ to the host on which the virtual machine is running. As described
+ in detail in <xref linkend="serialports" />, for each such port,
+ you can specify <computeroutput>&lt;arg&gt;</computeroutput> as
+ one of the following options:<itemizedlist>
+ <listitem>
+ <para><computeroutput>disconnected</computeroutput>: Even
+ though the serial port is shown to the guest, it has no
+ "other end" -- like a real COM port without a cable.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>server
+ &lt;pipename&gt;</computeroutput>: On a Windows host, this
+ tells VirtualBox to create a named pipe on the host named
+ <computeroutput>&lt;pipename&gt;</computeroutput> and
+ connect the virtual serial device to it. Note that Windows
+ requires that the name of a named pipe begin with
+ <computeroutput>\\.\pipe\</computeroutput>.</para>
+
+ <para>On a Linux host, instead of a named pipe, a local
+ domain socket is used.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>client
+ &lt;pipename&gt;</computeroutput>: This operates just like
+ <computeroutput>server ...</computeroutput>, except that the
+ pipe (or local domain socket) is not created by VirtualBox,
+ but assumed to exist already.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>&lt;devicename&gt;</computeroutput>:
+ If, instead of the above, the device name of a physical
+ hardware serial port of the host is specified, the virtual
+ serial port is connected to that hardware port. On a Windows
+ host, the device name will be a COM port such as
+ <computeroutput>COM1</computeroutput>; on a Linux host, the
+ device name will look like
+ <computeroutput>/dev/ttyS0</computeroutput>. This allows you
+ to "wire" a real serial port to a virtual machine.</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--audio none|null|oss</computeroutput>: With
+ this option, you can set whether the VM should have audio
+ support.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--clipboard
+ disabled|hosttoguest|guesttohost|bidirectional</computeroutput>:
+ With this setting, you can select whether the guest operating
+ system's clipboard should be shared with the host; see <xref
+ linkend="generalsettings" />. This requires that the Guest
+ Additions be installed in the virtual machine.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--monitorcount
+ &lt;count&gt;</computeroutput>: This enables multi-monitor
+ support; see <xref linkend="settings-display" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--usb on|off</computeroutput>: This option
+ enables or disables the VM's virtual USB controller; see <xref
+ linkend="settings-usb" /> for details.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--usbehci on|off</computeroutput>: This
+ option enables or disables the VM's virtual USB 2.0 controller;
+ see <xref linkend="settings-usb" /> for details.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect2>
+
+ <sect2>
+ <title>Remote machine settings</title>
+
+ <para>The following settings that affect remote machine behavior are
+ available through <computeroutput>VBoxManage
+ modifyvm</computeroutput>:<itemizedlist>
+ <listitem>
+ <para><computeroutput>--vrde on|off</computeroutput>: With the
+ VirtualBox graphical user interface, this enables or disables the
+ VirtualBox remote desktop extension (VRDE) server. Note that if
+ you are using <computeroutput>VBoxHeadless</computeroutput> (see
+ <xref linkend="vboxheadless" />), VRDE is enabled by
+ default.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--vrdeport
+ default|&lt;ports&gt;</computeroutput>: A port or a range of ports
+ the VRDE server can bind to; "default" or "0" means port 3389, the
+ standard port for RDP. You can specify a comma-separated list of
+ ports or ranges of ports. Use a dash between two port numbers to
+ specify a range. The VRDE server will bind to <emphasis
+ role="bold">one</emphasis> of available ports from the specified
+ list. Only one machine can use a given port at a time. For
+ example, the option <computeroutput> --vrdeport
+ 5000,5010-5012</computeroutput> will tell the server to bind to
+ one of following ports: 5000, 5010, 5011 or 5012.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--vrdeaddress &lt;IP
+ address&gt;</computeroutput>: The IP address of the host network
+ interface the VRDE server will bind to. If specified, the server
+ will accept connections only on the specified host network
+ interface.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--vrdeauthtype
+ null|external|guest</computeroutput>: This allows you to choose
+ whether and how authorization will be performed; see <xref
+ linkend="vbox-auth" /> for details.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--vrdemulticon on|off</computeroutput>: This
+ enables multiple connections to the same VRDE server, if the
+ server supports this feature; see <xref lang=""
+ linkend="vrde-multiconnection" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--vrdereusecon on|off</computeroutput>: This
+ specifies the VRDE server behavior when multiple connections are
+ disabled. When this option is enabled, the server will allow a new
+ client to connect and will drop the existing connection. When this
+ option is disabled (this is the default setting), a new connection
+ will not be accepted if there is already a client connected to the
+ server.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--vrdevideochannel on|off</computeroutput>:
+ This enables video redirection, if it is supported by the VRDE
+ server; see <xref lang="" linkend="vrde-videochannel" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--vrdevideochannelquality
+ &lt;percent&gt;</computeroutput>: Sets the image quality for video
+ redirection; see <xref lang=""
+ linkend="vrde-videochannel" />.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect2>
+
+ <sect2 id="vboxmanage-modifyvm-teleport">
+ <title>Teleporting settings</title>
+
+ <para>With the following commands for <computeroutput>VBoxManage
+ modifyvm</computeroutput> you can configure a machine to be a target for
+ teleporting. See <xref linkend="teleporting" /> for an
+ introduction.<itemizedlist>
+ <listitem>
+ <para><computeroutput>--teleporter on|off</computeroutput>: With
+ this setting you turn on or off whether a machine waits for a
+ teleporting request to come in on the network when it is started.
+ If "on", when the machine is started, it does not boot the virtual
+ machine as it would normally; instead, it then waits for a
+ teleporting request to come in on the port and address listed with
+ the next two parameters.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--teleporterport
+ &lt;port&gt;</computeroutput>, <computeroutput>--teleporteraddress
+ &lt;address&gt;</computeroutput>: these must be used with
+ --teleporter and tell the virtual machine on which port and
+ address it should listen for a teleporting request from another
+ virtual machine. <computeroutput>&lt;port&gt;</computeroutput> can
+ be any free TCP/IP port number (e.g. 6000);
+ <computeroutput>&lt;address&gt;</computeroutput> can be any IP
+ address or hostname and specifies the TCP/IP socket to bind to.
+ The default is "0.0.0.0", which means any address.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--teleporterpassword
+ &lt;password&gt;</computeroutput>: if this optional argument is
+ given, then the teleporting request will only succeed if the
+ source machine specifies the same password as the one given with
+ this command.<note>
+ <para>Currently, the password is stored without encryption
+ (i.e. in clear text) in the XML machine configuration
+ file.</para>
+ </note></para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>--cpuid &lt;leaf&gt; &lt;eax&gt; &lt;ebx&gt;
+ &lt;ecx&gt; &lt;edx&gt;</computeroutput>: Advanced users can use
+ this command before a teleporting operation to restrict the
+ virtual CPU capabilities that VirtualBox presents to the guest
+ operating system. This must be run on both the source and the
+ target machines involved in the teleporting and will then modify
+ what the guest sees when it executes the
+ <computeroutput>CPUID</computeroutput> machine instruction. This
+ might help with misbehaving applications that wrongly assume that
+ certain CPU capabilities are present. The meaning of the
+ parameters is hardware dependent; please refer to the AMD or Intel
+ processor manuals.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="vboxmanage-clonevm">
+ <title>VBoxManage clonevm</title>
+
+ <para>This command creates a full or linked copy of an existing virtual
+ machine.</para>
+
+ <para>The <computeroutput>clonevm</computeroutput> subcommand takes at
+ least the name of the virtual machine which should be cloned. The following
+ additional settings can be used to further configure the clone VM
+ operation:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><computeroutput>--snapshot &lt;uuid&gt;|&lt;name&gt;</computeroutput>:
+ Select a specific snapshot where the clone operation should refer
+ to. Default is referring to the current state.</para>
+ </listitem>
+ <listitem>
+ <para><computeroutput>--mode machine|machineandchildren|all</computeroutput>:
+ Selects the cloning mode of the operation. If
+ <computeroutput>machine</computeroutput> is selected (the default),
+ the current state of the VM without any snapshots is cloned. In the
+ <computeroutput>machineandchildren</computeroutput> mode the snapshot
+ provided by <computeroutput>--snapshot</computeroutput> and all
+ child snapshots are cloned. If <computeroutput>all</computeroutput>
+ is the selected mode all snapshots and the current state are cloned.
+ </para>
+ </listitem>
+ <listitem>
+ <para><computeroutput>--options link|keepallmacs|keepnatmacs|keepdisknames</computeroutput>:
+ Allows additional fine tuning of the clone operation. The first
+ option defines that a linked clone should be created, which is
+ only possible for a machine clone from a snapshot. The next two
+ options allow to define how the MAC addresses of every virtual
+ network card should be handled. They can either be reinitialized
+ (the default), left unchanged
+ (<computeroutput>keepallmacs</computeroutput>) or left unchanged
+ when the network type is NAT
+ (<computeroutput>keepnatmacs</computeroutput>). If you add
+ <computeroutput>keepdisknames</computeroutput> all new disk images
+ are called like the original once, otherwise they are
+ renamed.</para>
+ </listitem>
+ <listitem>
+ <para><computeroutput>--name &lt;name&gt;</computeroutput>: Select a
+ new name for the new virtual machine. Default is "Original Name
+ Clone".</para>
+ </listitem>
+ <listitem>
+ <para><computeroutput>--basefolder &lt;basefolder&gt;</computeroutput>:
+ Select the folder where the new virtual machine configuration should
+ be saved in.</para>
+ </listitem>
+ <listitem>
+ <para><computeroutput>--uuid &lt;uuid&gt;</computeroutput>:
+ Select the UUID the new VM should have. This id has to be unique in
+ the VirtualBox instance this clone should be registered. Default is
+ creating a new UUID.</para>
+ </listitem>
+ <listitem>
+ <para><computeroutput>--register</computeroutput>:
+ Automatically register the new clone in this VirtualBox
+ installation. If you manually want register the new VM later, see
+ <xref linkend="vboxmanage-registervm" /> for instructions how to do
+ so.</para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1 id="vboxmanage-import">
+ <title>VBoxManage import</title>
+
+ <para>This command imports a virtual appliance in OVF format by copying
+ the virtual disk images and creating virtual machines in VirtualBox. See
+ <xref linkend="ovf" /> for an introduction to appliances.</para>
+
+ <para>The <computeroutput>import</computeroutput> subcommand takes at
+ least the path name of an OVF file as input and expects the disk images,
+ if needed, in the same directory as the OVF file. A lot of additional
+ command-line options are supported to control in detail what is being
+ imported and modify the import parameters, but the details depend on the
+ content of the OVF file.</para>
+
+ <para>It is therefore recommended to first run the import subcommand with
+ the <computeroutput>--dry-run</computeroutput> or
+ <computeroutput>-n</computeroutput> option. This will then print a
+ description of the appliance's contents to the screen how it would be
+ imported into VirtualBox, together with the optional command-line options
+ to influence the import behavior.</para>
+
+ <para>As an example, here is the screen output with a sample appliance
+ containing a Windows XP guest:<screen>VBoxManage import WindowsXp.ovf --dry-run
+Interpreting WindowsXp.ovf...
+OK.
+Virtual system 0:
+ 0: Suggested OS type: "WindowsXP"
+ (change with "--vsys 0 --ostype &lt;type&gt;"; use "list ostypes" to list all)
+ 1: Suggested VM name "Windows XP Professional_1"
+ (change with "--vsys 0 --vmname &lt;name&gt;")
+ 3: Number of CPUs: 1
+ (change with "--vsys 0 --cpus &lt;n&gt;")
+ 4: Guest memory: 956 MB (change with "--vsys 0 --memory &lt;MB&gt;")
+ 5: Sound card (appliance expects "ensoniq1371", can change on import)
+ (disable with "--vsys 0 --unit 5 --ignore")
+ 6: USB controller
+ (disable with "--vsys 0 --unit 6 --ignore")
+ 7: Network adapter: orig bridged, config 2, extra type=bridged
+ 8: Floppy
+ (disable with "--vsys 0 --unit 8 --ignore")
+ 9: SCSI controller, type BusLogic
+ (change with "--vsys 0 --unit 9 --scsitype {BusLogic|LsiLogic}";
+ disable with "--vsys 0 --unit 9 --ignore")
+10: IDE controller, type PIIX4
+ (disable with "--vsys 0 --unit 10 --ignore")
+11: Hard disk image: source image=WindowsXp.vmdk,
+ target path=/home/user/disks/WindowsXp.vmdk, controller=9;channel=0
+ (change controller with "--vsys 0 --unit 11 --controller &lt;id&gt;";
+ disable with "--vsys 0 --unit 11 --ignore")</screen></para>
+
+ <para>As you can see, the individual configuration items are numbered, and
+ depending on their type support different command-line options. The import
+ subcommand can be directed to ignore many such items with a
+ <computeroutput>--vsys X --unit Y --ignore</computeroutput> option, where
+ X is the number of the virtual system (zero unless there are several
+ virtual system descriptions in the appliance) and Y the item number, as
+ printed on the screen.</para>
+
+ <para>In the above example, Item #1 specifies the name of the target
+ machine in VirtualBox. Items #9 and #10 specify hard disk controllers,
+ respectively. Item #11 describes a hard disk image; in this case, the
+ additional <computeroutput>--controller</computeroutput> option indicates
+ which item the disk image should be connected to, with the default coming
+ from the OVF file.</para>
+
+ <para>You can combine several items for the same virtual system behind the
+ same <computeroutput>--vsys</computeroutput> option. For example, to
+ import a machine as described in the OVF, but without the sound card and
+ without the USB controller, and with the disk image connected to the IDE
+ controller instead of the SCSI controller, use this:<screen>VBoxManage import WindowsXp.ovf
+ --vsys 0 --unit 5 --ignore --unit 6 --ignore --unit 11 --controller 10</screen></para>
+ </sect1>
+
+ <sect1 id="vboxmanage-export">
+ <title>VBoxManage export</title>
+
+ <para>This command exports one or more virtual machines from VirtualBox
+ into a virtual appliance in OVF format, including copying their virtual
+ disk images to compressed VMDK. See <xref linkend="ovf" /> for an
+ introduction to appliances.</para>
+
+ <para>The <computeroutput>export</computeroutput> command is simple to
+ use: list the machine (or the machines) that you would like to export to
+ the same OVF file and specify the target OVF file after an additional
+ <computeroutput>--output</computeroutput> or
+ <computeroutput>-o</computeroutput> option. Note that the directory of the
+ target OVF file will also receive the exported disk images in the
+ compressed VMDK format (regardless of the original format) and should have
+ enough disk space left for them.</para>
+
+ <para>Beside a simple export of a given virtual machine, you can append
+ several product information to the appliance file. Use
+ <computeroutput>--product</computeroutput>,
+ <computeroutput>--producturl</computeroutput>,
+ <computeroutput>--vendor</computeroutput>,
+ <computeroutput>--vendorurl</computeroutput> and
+ <computeroutput>--version</computeroutput> to specify this additional
+ information. For legal reasons you may add a license text or the content
+ of a license file by using the <computeroutput>--eula</computeroutput> and
+ <computeroutput>--eulafile</computeroutput> option respectively. As with
+ OVF import, you must use the <computeroutput>--vsys X</computeroutput>
+ option to direct the previously mentioned options to the correct virtual
+ machine.</para>
+
+ <para>For virtualization products which aren't fully compatible with the
+ OVF standard 1.0 you can enable a OVF 0.9 legacy mode with the
+ <computeroutput>--legacy09</computeroutput> option.</para>
+ </sect1>
+
+ <sect1 id="vboxmanage-startvm">
+ <title>VBoxManage startvm</title>
+
+ <para>This command starts a virtual machine that is currently in the
+ "Powered off" or "Saved" states.</para>
+
+ <note>
+ <para>This is provided for backwards compatibility only. We recommend to
+ start virtual machines directly by running the respective front-end, as
+ you might otherwise miss important error and state information that
+ VirtualBox may display on the console. This is especially important for
+ front-ends other than <computeroutput>VirtualBox</computeroutput>, our
+ graphical user interface, because those cannot display error messages in
+ a popup window. See <xref linkend="vboxheadless" /> for more
+ information.</para>
+ </note>
+
+ <para>The optional <computeroutput>--type</computeroutput> specifier
+ determines whether the machine will be started in a window (GUI mode,
+ which is the default) or whether the output should go through
+ <computeroutput>VBoxHeadless</computeroutput>, with VRDE enabled or not;
+ see <xref linkend="vboxheadless" /> for more information. The list of
+ types is subject to change, and it's not guaranteed that all types are
+ accepted by any product variant.</para>
+
+ <para>The following values are allowed:</para>
+
+ <glosslist>
+ <glossentry>
+ <glossterm>gui</glossterm>
+
+ <glossdef>
+ <para>Starts a VM showing a GUI window. This is the default.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>headless</glossterm>
+
+ <glossdef>
+ <para>Starts a VM without a window for remote display only.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist>
+ </sect1>
+
+ <sect1 id="vboxmanage-controlvm">
+ <title>VBoxManage controlvm</title>
+
+ <para>The <computeroutput>controlvm</computeroutput> subcommand allows you
+ to change the state of a virtual machine that is currently running. The
+ following can be specified:</para>
+
+ <para><itemizedlist>
+ <listitem>
+ <para><computeroutput>VBoxManage controlvm &lt;vm&gt;
+ pause</computeroutput> temporarily puts a virtual machine on hold,
+ without changing its state for good. The VM window will be painted
+ in gray to indicate that the VM is currently paused. (This is
+ equivalent to selecting the "Pause" item in the "Machine" menu of
+ the GUI.)</para>
+ </listitem>
+
+ <listitem>
+ <para>Use <computeroutput>VBoxManage controlvm &lt;vm&gt;
+ resume</computeroutput> to undo a previous
+ <computeroutput>pause</computeroutput> command. (This is equivalent
+ to selecting the "Resume" item in the "Machine" menu of the
+ GUI.)</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>VBoxManage controlvm &lt;vm&gt;
+ reset</computeroutput> has the same effect on a virtual machine as
+ pressing the "Reset" button on a real computer: a cold reboot of the
+ virtual machine, which will restart and boot the guest operating
+ system again immediately. The state of the VM is not saved
+ beforehand, and data may be lost. (This is equivalent to selecting
+ the "Reset" item in the "Machine" menu of the GUI.)</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>VBoxManage controlvm &lt;vm&gt;
+ poweroff</computeroutput> has the same effect on a virtual machine
+ as pulling the power cable on a real computer. Again, the state of
+ the VM is not saved beforehand, and data may be lost. (This is
+ equivalent to selecting the "Close" item in the "Machine" menu of
+ the GUI or pressing the window's close button, and then selecting
+ "Power off the machine" in the dialog.)</para>
+
+ <para>After this, the VM's state will be "Powered off". From there,
+ it can be started again; see <xref
+ linkend="vboxmanage-startvm" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>VBoxManage controlvm &lt;vm&gt;
+ savestate</computeroutput> will save the current state of the VM to
+ disk and then stop the VM. (This is equivalent to selecting the
+ "Close" item in the "Machine" menu of the GUI or pressing the
+ window's close button, and then selecting "Save the machine state"
+ in the dialog.)</para>
+
+ <para>After this, the VM's state will be "Saved". From there, it can
+ be started again; see <xref linkend="vboxmanage-startvm" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>VBoxManage controlvm &lt;vm&gt; teleport
+ --hostname &lt;name&gt; --port &lt;port&gt; [--password
+ &lt;password&gt;]</computeroutput> makes the machine the source of a
+ teleporting operation and initiates a teleport to the given target.
+ See <xref linkend="teleporting" /> for an introduction. If the
+ optional password is specified, it must match the password that was
+ given to the <computeroutput>modifyvm</computeroutput> command for
+ the target machine; see <xref
+ linkend="vboxmanage-modifyvm-teleport" /> for details.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>A few extra options are available with
+ <computeroutput>controlvm</computeroutput> that do not directly affect the
+ VM's running state:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>The <computeroutput>setlinkstate&lt;1-N&gt;</computeroutput>
+ operation connects or disconnects virtual network cables from their
+ network interfaces.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>nic&lt;1-N&gt;
+ null|nat|bridged|intnet|hostonly|generic</computeroutput>: With this, you can
+ set, for each of the VM's virtual network cards, what type of
+ networking should be available. They can be not connected to the host
+ (<computeroutput>null</computeroutput>), use network address
+ translation (<computeroutput>nat</computeroutput>), bridged networking
+ (<computeroutput>bridged</computeroutput>) or communicate with other
+ virtual machines using internal networking
+ (<computeroutput>intnet</computeroutput>) or host-only networking
+ (<computeroutput>hostonly</computeroutput>) or access to rarely used
+ sub-modes
+ (<computeroutput>generic</computeroutput>). These options correspond
+ to the modes which are described in detail in <xref
+ linkend="networkingmodes" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>usbattach</computeroutput> and
+ <computeroutput>usbdettach</computeroutput> make host USB devices
+ visible to the virtual machine on the fly, without the need for
+ creating filters first. The USB devices can be specified by UUID
+ (unique identifier) or by address on the host system.</para>
+
+ <para>You can use <computeroutput>VBoxManage list
+ usbhost</computeroutput> to locate this information.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>vrde on|off</computeroutput> lets you enable or
+ disable the VRDE server, if it is installed.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>vrdeport default|&lt;ports&gt;</computeroutput>
+ changes the port or a range of ports that the VRDE server can bind to;
+ "default" or "0" means port 3389, the standard port for RDP. For
+ details, see the description for the
+ <computeroutput>--vrdeport</computeroutput> option in <xref
+ linkend="vboxmanage-modifyvm-other" />.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>setvideomodehint</computeroutput> requests that
+ the guest system change to a particular video mode. This requires that
+ the Guest Additions be installed, and will not work for all guest
+ systems.</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>screenshotpng</computeroutput> takes a screenshot
+ of the guest display and saves it in PNG format.</para>
+ </listitem>
+
+ <listitem>
+ <para>The <computeroutput>setcredentials</computeroutput> operation is
+ used for remote logons in Windows guests. For details, please refer to
+ <xref linkend="autologon" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>The <computeroutput>guestmemoryballoon</computeroutput>
+ operation changes the size of the guest memory balloon, that is,
+ memory allocated by the VirtualBox Guest Additions from the guest
+ operating system and returned to the hypervisor for re-use by other
+ virtual machines. This must be specified in megabytes. For details,
+ see <xref linkend="guestadd-balloon" />.</para>
+ </listitem>
+
+ <listitem>
+ <para>The <computeroutput>cpuexecutioncap
+ &lt;1-100&gt;</computeroutput>: This operation controls how much cpu
+ time a virtual CPU can use. A value of 50 implies a single virtual CPU
+ can use up to 50% of a single host CPU.</para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>VBoxManage discardstate</title>
+
+ <para>This command discards the saved state of a virtual machine which is
+ not currently running, which will cause its operating system to restart
+ next time you start it. This is the equivalent of pulling out the power
+ cable on a physical machine, and should be avoided if possible.</para>
+ </sect1>
+
+ <sect1>
+ <title>VBoxManage adoptstate</title>
+
+ <para>If you have a saved state file (<computeroutput>.sav</computeroutput>)
+ that is seperate from the VM configuration, you can use this command to
+ "adopt" the file. This will change the VM to saved state and when you
+ start it, VirtualBox will attempt to restore it from the saved state file
+ you indicated. This command should only be used in special setups.</para>
+ </sect1>
+
+ <sect1>
+ <title>VBoxManage snapshot</title>
+
+ <para>This command is used to control snapshots from the command line. A
+ snapshot consists of a complete copy of the virtual machine settings,
+ copied at the time when the snapshot was taken, and optionally a virtual
+ machine saved state file if the snapshot was taken while the machine was
+ running. After a snapshot has been taken, VirtualBox creates differencing
+ hard disk for each normal hard disk associated with the machine so that
+ when a snapshot is restored, the contents of the virtual machine's virtual
+ hard disks can be quickly reset by simply dropping the pre-existing
+ differencing files.</para>
+
+ <para>The <computeroutput>take</computeroutput> operation takes a snapshot
+ of the current state of the virtual machine. You must supply a name for
+ the snapshot and can optionally supply a description. The new snapshot is
+ inserted into the snapshots tree as a child of the current snapshot and
+ then becomes the new current snapshot.</para>
+
+ <para>The <computeroutput>delete</computeroutput> operation deletes a
+ snapshot (specified by name or by UUID). This can take a while to finish
+ since the differencing images associated with the snapshot might need to
+ be merged with their child differencing images.</para>
+
+ <para>The <computeroutput>restore</computeroutput> operation will restore
+ the given snapshot (specified by name or by UUID) by resetting the virtual
+ machine's settings and current state to that of the snapshot. The previous
+ current state of the machine will be lost. After this, the given snapshot
+ becomes the new "current" snapshot so that subsequent snapshots are
+ inserted under the snapshot from which was restored.</para>
+
+ <para>The <computeroutput>restorecurrent</computeroutput> operation is a
+ shortcut to restore the current snapshot (i.e. the snapshot from which the
+ current state is derived). This subcommand is equivalent to using the
+ "restore" subcommand with the name or UUID of the current snapshot, except
+ that it avoids the extra step of determining that name or UUID.</para>
+
+ <para>With the <computeroutput>edit</computeroutput> operation, you can
+ change the name or description of an existing snapshot.</para>
+
+ <para>With the <computeroutput>showvminfo</computeroutput> operation, you
+ can view the virtual machine settings that were stored with an existing
+ snapshot.</para>
+ </sect1>
+
+ <sect1 id="vboxmanage-closemedium">
+ <title>VBoxManage closemedium</title>
+
+ <para>This commands removes a hard disk, DVD or floppy image from a
+ VirtualBox media registry.<footnote>
+ <para>Before VirtualBox 4.0, it was necessary to call VBoxManage
+ openmedium before a medium could be attached to a virtual machine;
+ that call "registered" the medium with the global VirtualBox media
+ registry. With VirtualBox 4.0 this is no longer necessary; media are
+ added to media registries automatically. The "closemedium" call has
+ been retained, however, to allow for explicitly removing a medium from
+ a registry.</para>
+ </footnote></para>
+
+ <para>Optionally, you can request that the image be deleted. You will get
+ appropriate diagnostics that the deletion failed, however the image will
+ become unregistered in any case.</para>
+ </sect1>
+
+ <sect1>
+ <title id="vboxmanage-storageattach">VBoxManage storageattach</title>
+
+ <para>This command attaches/modifies/removes a storage medium connected to
+ a storage controller that was previously added with the
+ <computeroutput>storagectl</computeroutput> command (see the previous
+ section). The syntax is as follows:</para>
+
+ <screen>VBoxManage storageattach &lt;uuid|vmname&gt;
+ --storagectl &lt;name&gt;
+ [--port &lt;number&gt;]
+ [--device &lt;number&gt;]
+ [--type dvddrive|hdd|fdd]
+ [--medium none|emptydrive|
+ &lt;uuid&gt;|&lt;filename&gt;|host:&lt;drive&gt;|iscsi]
+ [--mtype normal|writethrough|immutable|shareable]
+ [--comment &lt;text&gt;]
+ [--setuuid &lt;uuid&gt;]
+ [--setparentuuid &lt;uuid&gt;]
+ [--passthrough on|off]
+ [--tempeject on|off]
+ [--bandwidthgroup name|none]
+ [--forceunmount]
+ [--server &lt;name&gt;|&lt;ip&gt;]
+ [--target &lt;target&gt;]
+ [--tport &lt;port&gt;]
+ [--lun &lt;lun&gt;]
+ [--encodedlun &lt;lun&gt;]
+ [--username &lt;username&gt;]
+ [--password &lt;password&gt;]
+ [--intnet]
+</screen>
+
+ <para>A number of parameters are commonly required; the ones at the end of
+ the list are required only for iSCSI targets (see below).</para>
+
+ <para>The common parameters are:<glosslist>
+ <glossentry>
+ <glossterm>uuid|vmname</glossterm>
+
+ <glossdef>
+ <para>The VM UUID or VM Name. Mandatory.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>storagectl</glossterm>
+
+ <glossdef>
+ <para>Name of the storage controller. Mandatory. The list of the
+ storage controllers currently attached to a VM can be obtained
+ with <computeroutput>VBoxManage showvminfo</computeroutput>; see
+ <xref linkend="vboxmanage-showvminfo" />.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>port</glossterm>
+
+ <glossdef>
+ <para>The number of the storage controller's port which is to be
+ modified. Mandatory, unless the storage controller has only a
+ single port.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>device</glossterm>
+
+ <glossdef>
+ <para>The number of the port's device which is to be modified.
+ Mandatory, unless the storage controller has only a single device
+ per port.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>type</glossterm>
+
+ <glossdef>
+ <para>Define the type of the drive to which the medium is being
+ attached/detached/modified. This argument can only be omitted if
+ the type of medium can be determined from either the medium given
+ with the <computeroutput>--medium</computeroutput> argument or
+ from a previous medium attachment.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>medium</glossterm>
+
+ <glossdef>
+ <para>Specifies what is to be attached. The following values are
+ supported:<itemizedlist>
+ <listitem>
+ <para>"none": Any existing device should be removed from the
+ given slot.</para>
+ </listitem>
+
+ <listitem>
+ <para>"emptydrive": For a virtual DVD or floppy drive only,
+ this makes the device slot behaves like a removeable drive
+ into which no media has been inserted.</para>
+ </listitem>
+
+ <listitem>
+ <para>If a UUID is specified, it must be the UUID of a
+ storage medium that is already known to VirtualBox (e.g.
+ because it has been attached to another virtual machine).
+ See <xref linkend="vboxmanage-list" /> for how to list known
+ media. This medium is then attached to the given device
+ slot.</para>
+ </listitem>
+
+ <listitem>
+ <para>If a filename is specified, it must be the full path
+ of an existing disk image (ISO, RAW, VDI, VMDK or other),
+ which is then attached to the given device slot.</para>
+ </listitem>
+
+ <listitem>
+ <para>"host:&lt;drive&gt;": For a virtual DVD or floppy
+ drive only, this connects the given device slot to the
+ specified DVD or floppy drive on the host computer.</para>
+ </listitem>
+
+ <listitem>
+ <para>"iscsi": For virtual hard disks only, this allows for
+ specifying an iSCSI target. In this case, more parameters
+ must be given; see below.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>Some of the above changes, in particular for removeable
+ media (floppies and CDs/DVDs), can be effected while a VM is
+ running. Others (device changes or changes in hard disk device
+ slots) require the VM to be powered off.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>mtype</glossterm>
+
+ <glossdef>
+ <para>Defines how this medium behaves with respect to snapshots
+ and write operations. See <xref linkend="hdimagewrites" /> for
+ details.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>comment</glossterm>
+
+ <glossdef>
+ <para>Any description that you want to have stored with this
+ medium (optional; for example, for an iSCSI target, "Big storage
+ server downstairs"). This is purely descriptive and not needed for
+ the medium to function correctly.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>setuuid, setparentuuid</glossterm>
+
+ <glossdef>
+ <para>Modifies the UUID or parent UUID of a medium before
+ attaching it to a VM. This is an expert option. Inappropriate use
+ can make the medium unusable or lead to broken VM configurations
+ if any other VM is referring to the same media already. The most
+ frequently used variant is <code>--setuuid ""</code>, which assigns
+ a new (random) UUID to an image. This is useful to resolve the
+ duplicate UUID errors if one duplicated an image using file copy
+ utilities.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>passthrough</glossterm>
+
+ <glossdef>
+ <para>For a virtual DVD drive only, you can enable DVD writing
+ support (currently experimental; see <xref
+ linkend="storage-cds" />).</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>tempeject</glossterm>
+
+ <glossdef>
+ <para>For a virtual DVD drive only, you can configure the behavior
+ for guest-triggered medium eject. If this is set to "on", the eject
+ has only temporary effects. If the VM is powered off and restarted
+ the originally configured medium will be still in the drive.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>bandwidthgroup</glossterm>
+
+ <glossdef>
+ <para>Sets the bandwidth group to use for the given device; see
+ <xref linkend="storage-bandwidth-limit" />.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>forceunmount</glossterm>
+
+ <glossdef>
+ <para>For a virtual DVD or floppy drive only, this forcibly
+ unmounts the DVD/CD/Floppy or mounts a new DVD/CD/Floppy even if
+ the previous one is locked down by the guest for reading. Again,
+ see <xref linkend="storage-cds" /> for details.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+
+ <para>When "iscsi" is used with the
+ <computeroutput>--medium</computeroutput> parameter for iSCSI support --
+ see <xref linkend="storage-iscsi" /> --, additional parameters must or can
+ be used:<glosslist>
+ <glossentry>
+ <glossterm>server</glossterm>
+
+ <glossdef>
+ <para>The host name or IP address of the iSCSI target;
+ required.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>target</glossterm>
+
+ <glossdef>
+ <para>Target name string. This is determined by the iSCSI target
+ and used to identify the storage resource; required.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>port</glossterm>
+
+ <glossdef>
+ <para>TCP/IP port number of the iSCSI service on the target
+ (optional).</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>lun</glossterm>
+
+ <glossdef>
+ <para>Logical Unit Number of the target resource (optional).
+ Often, this value is zero.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>username, password</glossterm>
+
+ <glossdef>
+ <para>Username and password for target authentication, if required
+ (optional).<note>
+ <para>Currently, username and password are stored without
+ encryption (i.e. in clear text) in the XML machine
+ configuration file.</para>
+ </note></para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>intnet</glossterm>
+
+ <glossdef>
+ <para>If specified, connect to the iSCSI target via Internal
+ Networking. This needs further configuration which is described in
+ <xref linkend="iscsi-intnet" />.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+ </sect1>
+
+ <sect1 id="vboxmanage-storagectl">
+ <title>VBoxManage storagectl</title>
+
+ <para>This command attaches/modifies/removes a storage controller. After
+ this, virtual media can be attached to the controller with the
+ <computeroutput>storageattach</computeroutput> command (see the next
+ section).</para>
+
+ <para>The syntax is as follows:</para>
+
+ <screen>VBoxManage storagectl &lt;uuid|vmname&gt;
+ --name &lt;name&gt;
+ [--add &lt;ide/sata/scsi/floppy&gt;]
+ [--controller &lt;LsiLogic|LSILogicSAS|BusLogic|
+ IntelAhci|PIIX3|PIIX4|ICH6|I82078&gt;]
+ [--sataideemulation&lt;1-4&gt; &lt;1-30&gt;]
+ [--sataportcount &lt;1-30&gt;]
+ [--hostiocache on|off]
+ [--bootable on|off]
+ [--remove]</screen>
+
+ <para>where the parameters mean: <glosslist>
+ <glossentry>
+ <glossterm>uuid|vmname</glossterm>
+
+ <glossdef>
+ <para>The VM UUID or VM Name. Mandatory.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>name</glossterm>
+
+ <glossdef>
+ <para>Name of the storage controller. Mandatory.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>add</glossterm>
+
+ <glossdef>
+ <para>Define the type of the system bus to which the storage
+ controller must be connected.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>controller</glossterm>
+
+ <glossdef>
+ <para>Allows to choose the type of chipset being emulated for the
+ given storage controller.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>sataideemulation</glossterm>
+
+ <glossdef>
+ <para>This specifies which SATA ports should operate in IDE
+ emulation mode. As explained in <xref
+ linkend="harddiskcontrollers" />, by default, this is the case for
+ SATA ports 1-4; with this command, you can map four IDE channels
+ to any of the 30 supported SATA ports.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>sataportcount</glossterm>
+
+ <glossdef>
+ <para>This determines how many ports the SATA controller should
+ support.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>hostiocache</glossterm>
+
+ <glossdef>
+ <para>Configures the use of the host I/O cache for all disk images
+ attached to this storage controller. For details, please see <xref
+ linkend="iocaching" />.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>bootable</glossterm>
+
+ <glossdef>
+ <para>Selects whether this controller is bootable.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>remove</glossterm>
+
+ <glossdef>
+ <para>Removes the storage controller from the VM config.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+ </sect1>
+
+ <sect1>
+ <title>VBoxManage bandwidthctl</title>
+
+ <para>This command creates/deletes/modifies bandwidth groups of the given
+ virtual machine:<screen>VBoxManage bandwidthctl &lt;uuid|vmname&gt;
+ --name &lt;name&gt;
+ [--add disk
+ [--delete]
+ [--limit MB/s]</screen></para>
+
+ <para>See <xref linkend="storage-bandwidth-limit" /> for an introduction
+ to bandwidth limits. The parameters mean:<glosslist>
+ <glossentry>
+ <glossterm>uuid|vmname</glossterm>
+
+ <glossdef>
+ <para>The VM UUID or VM Name. Mandatory.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>name</glossterm>
+
+ <glossdef>
+ <para>Name of the bandwidth group. Mandatory.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>add</glossterm>
+
+ <glossdef>
+ <para>Creates a new bandwdith group with the given type.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>delete</glossterm>
+
+ <glossdef>
+ <para>Deletes a bandwdith group if it isn't used anymore.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>limit</glossterm>
+
+ <glossdef>
+ <para>Sets the limit for the given group to the specified amount.
+ Can be changed while the VM is running.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+ </sect1>
+
+ <sect1>
+ <title>VBoxManage showhdinfo</title>
+
+ <para>This command shows information about a virtual hard disk image,
+ notably its size, its size on disk, its type and the virtual machines
+ which use it.<note>
+ <para>For compatibility with earlier versions of VirtualBox, the
+ "showvdiinfo" command is also supported and mapped internally to the
+ "showhdinfo" command.</para>
+ </note></para>
+ <para>The disk image must be specified either by its UUID (if the medium
+ is registered) or by its filename. Registered images can be listed by
+ <computeroutput>VBoxManage list hdds</computeroutput> (see <xref linkend="vboxmanage-list" />
+ for more information). A filename must be specified as valid path, either
+ as an absolute path or as a relative path starting from the current
+ directory.</para>
+ </sect1>
+
+ <sect1 id="vboxmanage-createvdi">
+ <title>VBoxManage createhd</title>
+
+ <para>This command creates a new virtual hard disk image. The syntax is as
+ follows:</para>
+
+ <screen>VBoxManage createhd --filename &lt;filename&gt;
+ --size &lt;megabytes&gt;
+ [--format VDI|VMDK|VHD] (default: VDI)
+ [--variant Standard,Fixed,Split2G,Stream,ESX]</screen>
+
+ <para>where the parameters mean:<glosslist>
+ <glossentry>
+ <glossterm>filename</glossterm>
+
+ <glossdef>
+ <para>Allows to choose a file name. Mandatory.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>size</glossterm>
+
+ <glossdef>
+ <para>Allows to define the image capacity, in 1 MiB units.
+ Mandatory.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>format</glossterm>
+
+ <glossdef>
+ <para>Allows to choose a file format for the output file different
+ from the file format of the input file.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>variant</glossterm>
+
+ <glossdef>
+ <para>Allows to choose a file format variant for the output file.
+ It is a comma-separated list of variant flags. Not all
+ combinations are supported, and specifying inconsistent flags will
+ result in an error message.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist> <note>
+ <para>For compatibility with earlier versions of VirtualBox, the
+ "createvdi" command is also supported and mapped internally to the
+ "createhd" command.</para>
+ </note></para>
+ </sect1>
+
+ <sect1 id="vboxmanage-modifyvdi">
+ <title>VBoxManage modifyhd</title>
+
+ <para>With the <computeroutput>modifyhd</computeroutput> command, you can
+ change the characteristics of a disk image after it has been
+ created:<screen>VBoxManage modifyhd &lt;uuid&gt;|&lt;filename&gt;
+ [--type normal|writethrough|immutable|shareable|
+ readonly|multiattach]
+ [--autoreset on|off]
+ [--compact]
+ [--resize &lt;megabytes&gt;|--resizebyte &lt;bytes&gt;]</screen><note>
+ <para>Despite the "hd" in the subcommand name, the command works with
+ all disk images, not only hard disks. For compatibility with earlier
+ versions of VirtualBox, the "modifyvdi" command is also supported and
+ mapped internally to the "modifyhd" command.</para>
+ </note></para>
+
+ <para>The disk image to modify must be specified either by its UUID
+ (if the medium is registered) or by its filename. Registered images
+ can be listed by <computeroutput>VBoxManage list hdds</computeroutput>
+ (see <xref linkend="vboxmanage-list" /> for more information).
+ A filename must be specified as valid path, either as an absolute path
+ or as a relative path starting from the current directory.</para>
+ <para>The following options are available:<itemizedlist>
+ <listitem>
+ <para>With the <computeroutput>--type</computeroutput> argument, you
+ can change the type of an existing image between the normal,
+ immutable, write-through and other modes; see <xref
+ linkend="hdimagewrites" /> for details.</para>
+ </listitem>
+
+ <listitem>
+ <para>For immutable (differencing) hard disks only, the
+ <computeroutput>--autoreset on|off</computeroutput> option
+ determines whether the disk is automatically reset on every VM
+ startup (again, see <xref linkend="hdimagewrites" />). The default
+ is "on".</para>
+ </listitem>
+
+ <listitem>
+ <para>With the <computeroutput>--compact</computeroutput> option,
+ can be used to compact disk images, i.e. remove blocks that only
+ contains zeroes. This will shrink a dynamically allocated image
+ again; it will reduce the <emphasis>physical</emphasis> size of the
+ image without affecting the logical size of the virtual disk.
+ Compaction works both for base images and for diff images created as
+ part of a snapshot.</para>
+
+ <para>For this operation to be effective, it is required that free
+ space in the guest system first be zeroed out using a suitable
+ software tool. For Windows guests, you can use the
+ <computeroutput>sdelete</computeroutput> tool provided by Microsoft.
+ Execute <computeroutput>sdelete -c</computeroutput> in the guest to
+ zero the free disk space before compressing the virtual disk
+ image. For Linux, use the <code>zerofree</code> utility which
+ supports ext2/ext3 filesystems.</para>
+
+ <para>Please note that compacting is currently only available for
+ VDI images. A similar effect can be achieved by zeroing out free
+ blocks and then cloning the disk to any other dynamically allocated
+ format. You can use this workaround until compacting is also
+ supported for disk formats other than VDI.</para>
+ </listitem>
+
+ <listitem>
+ <para>The <computeroutput>--resize</computeroutput> option allows you
+ to change the capacity of an existing image; this adjusts the
+ <emphasis>logical</emphasis> size of a virtual disk without affecting
+ the physical size much.<footnote>
+ <para>Image resizing was added with VirtualBox 4.0.</para>
+ </footnote> This currently works only for expanding the capacity of
+ VDI and VHD formats, and only for the dynamically allocated variants.
+ For example, if you originally created a 10G disk which is now full,
+ you can use the <computeroutput>--resize 15360</computeroutput>
+ command to add 5 GByte more space to the virtual disk without
+ having to create a new image and copy all data from within a virtual
+ machine.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect1>
+
+ <sect1 id="vboxmanage-clonevdi">
+ <title>VBoxManage clonehd</title>
+
+ <para>This command duplicates a registered virtual hard disk image to a
+ new image file with a new unique identifier (UUID). The new image can be
+ transferred to another host system or imported into VirtualBox again using
+ the Virtual Media Manager; see <xref linkend="vdis" /> and <xref
+ linkend="cloningvdis" />. The syntax is as follows:</para>
+
+ <screen>VBoxManage clonehd &lt;uuid&gt;|&lt;filename&gt; &lt;outputfile&gt;
+ [--format VDI|VMDK|VHD|RAW|&lt;other&gt;]
+ [--variant Standard,Fixed,Split2G,Stream,ESX]
+ [--existing]</screen>
+
+ <para>The disk image to clone as well as the target image must be described
+ either by its UUIDs (if the mediums are registered) or by its filename.
+ Registered images can be listed by <computeroutput>VBoxManage list hdds</computeroutput>
+ (see <xref linkend="vboxmanage-list" /> for more information).
+ A filename must be specified as valid path, either as an absolute path or
+ as a relative path starting from the current directory.</para>
+ <para>The following options are available:<glosslist>
+ <glossentry>
+ <glossterm>format</glossterm>
+
+ <glossdef>
+ <para>Allow to choose a file format for the output file different
+ from the file format of the input file.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>variant</glossterm>
+
+ <glossdef>
+ <para>Allow to choose a file format variant for the output file.
+ It is a comma-separated list of variant flags. Not all
+ combinations are supported, and specifying inconsistent flags will
+ result in an error message.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>existing</glossterm>
+
+ <glossdef>
+ <para>Perform the clone operation to an already existing
+ destination medium. Only the portion of the source medium which
+ fits into the destination medium is copied. This means if the
+ destination medium is smaller than the source only a part of it is
+ copied, and if the destination medium is larger than the source
+ the remaining part of the destination medium is unchanged.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist> <note>
+ <para>For compatibility with earlier versions of VirtualBox, the
+ "clonevdi" command is also supported and mapped internally to the
+ "clonehd" command.</para>
+ </note></para>
+ </sect1>
+
+ <sect1>
+ <title>VBoxManage convertfromraw</title>
+
+ <para>This command converts a raw disk image to a VirtualBox Disk Image
+ (VDI) file. The syntax is as follows:</para>
+
+ <screen>VBoxManage convertfromraw &lt;filename&gt; &lt;outputfile&gt;
+ [--format VDI|VMDK|VHD]
+ [--variant Standard,Fixed,Split2G,Stream,ESX]
+VBoxManage convertfromraw stdin &lt;outputfile&gt; &lt;bytes&gt;
+ [--format VDI|VMDK|VHD]
+ [--variant Standard,Fixed,Split2G,Stream,ESX]</screen>
+
+ <para>where the parameters mean:<glosslist>
+ <glossentry>
+ <glossterm>format</glossterm>
+
+ <glossdef>
+ <para>Select the disk image format to create. Default is
+ VDI.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>variant</glossterm>
+
+ <glossdef>
+ <para>Allow to choose a file format variant for the output file.
+ It is a comma-separated list of variant flags. Not all
+ combinations are supported, and specifying inconsistent flags will
+ result in an error message.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist> The second form forces VBoxManage to read the content for
+ the disk image from standard input (useful for using that command in a
+ pipe).</para>
+
+ <para><note>
+ <para>For compatibility with earlier versions of VirtualBox, the
+ "convertdd" command is also supported and mapped internally to the
+ "convertfromraw" command.</para>
+ </note></para>
+ </sect1>
+
+ <sect1>
+ <title>VBoxManage getextradata/setextradata</title>
+
+ <para>These commands let you attach and retrieve string data to a virtual
+ machine or to a VirtualBox configuration (by specifying
+ <computeroutput>global</computeroutput> instead of a virtual machine
+ name). You must specify a key (as a text string) to associate the data
+ with, which you can later use to retrieve it. For example:</para>
+
+ <screen>VBoxManage setextradata Fedora5 installdate 2006.01.01
+VBoxManage setextradata SUSE10 installdate 2006.02.02</screen>
+
+ <para>would associate the string "2006.01.01" with the key installdate for
+ the virtual machine Fedora5, and "2006.02.02" on the machine SUSE10. You
+ could retrieve the information as follows:</para>
+
+ <screen>VBoxManage getextradata Fedora5 installdate</screen>
+
+ <para>which would return</para>
+
+ <screen>VirtualBox Command Line Management Interface Version $VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILD
+(C) 2005-$VBOX_C_YEAR $VBOX_VENDOR
+All rights reserved.
+
+Value: 2006.01.01</screen>
+ </sect1>
+
+ <sect1 id="vboxmanage-setproperty">
+ <title>VBoxManage setproperty</title>
+
+ <para>This command is used to change global settings which affect the
+ entire VirtualBox installation. Some of these correspond to the settings
+ in the "Global settings" dialog in the graphical user interface. The
+ following properties are available:<glosslist>
+ <glossentry>
+ <glossterm>machinefolder</glossterm>
+
+ <glossdef>
+ <para>This specifies the default folder in which virtual machine
+ definitions are kept; see <xref linkend="vboxconfigdata" /> for
+ details.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>vrdeauthlibrary</glossterm>
+
+ <glossdef>
+ <para>This specifies which library to use when "external"
+ authentication has been selected for a particular virtual machine;
+ see <xref linkend="vbox-auth" /> for details.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>websrvauthlibrary</glossterm>
+
+ <glossdef>
+ <para>This specifies which library the web service uses to
+ authenticate users. For details about the VirtualBox web service,
+ please refer to the separate VirtualBox SDK reference (see <xref
+ linkend="VirtualBoxAPI" />).</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>vrdelibrary</glossterm>
+
+ <glossdef>
+ <para>This specifies which library implements the VirtualBox
+ Remote Desktop Extension.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>hwvirtexenabled</glossterm>
+
+ <glossdef>
+ <para>This selects whether or not hardware virtualization support
+ is enabled by default.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+ </sect1>
+
+ <sect1>
+ <title>VBoxManage usbfilter add/modify/remove</title>
+
+ <para>The <computeroutput>usbfilter</computeroutput> commands are used for
+ working with USB filters in virtual machines, or global filters which
+ affect the whole VirtualBox setup. Global filters are applied before
+ machine-specific filters, and may be used to prevent devices from being
+ captured by any virtual machine. Global filters are always applied in a
+ particular order, and only the first filter which fits a device is
+ applied. So for example, if the first global filter says to hold (make
+ available) a particular Kingston memory stick device and the second to
+ ignore all Kingston devices, that memory stick will be available to any
+ machine with an appropriate filter, but no other Kingston device
+ will.</para>
+
+ <para>When creating a USB filter using <computeroutput>usbfilter
+ add</computeroutput>, you must supply three or four mandatory parameters.
+ The index specifies the position in the list at which the filter should be
+ placed. If there is already a filter at that position, then it and the
+ following ones will be shifted back one place. Otherwise the new filter
+ will be added onto the end of the list. The
+ <computeroutput>target</computeroutput> parameter selects the virtual
+ machine that the filter should be attached to or use "global" to apply it
+ to all virtual machines. <computeroutput>name</computeroutput> is a name
+ for the new filter and for global filters,
+ <computeroutput>action</computeroutput> says whether to allow machines
+ access to devices that fit the filter description ("hold") or not to give
+ them access ("ignore"). In addition, you should specify parameters to
+ filter by. You can find the parameters for devices attached to your system
+ using <computeroutput>VBoxManage list usbhost</computeroutput>. Finally,
+ you can specify whether the filter should be active, and for local
+ filters, whether they are for local devices, remote (over an RDP
+ connection) or either.</para>
+
+ <para>When you modify a USB filter using <computeroutput>usbfilter
+ modify</computeroutput>, you must specify the filter by index (see the
+ output of <computeroutput>VBoxManage list usbfilters</computeroutput> to
+ find global filter indexes and that of <computeroutput>VBoxManage
+ showvminfo</computeroutput> to find indexes for individual machines) and
+ by target, which is either a virtual machine or "global". The properties
+ which can be changed are the same as for <computeroutput>usbfilter
+ add</computeroutput>. To remove a filter, use <computeroutput>usbfilter
+ remove</computeroutput> and specify the index and the target.</para>
+ </sect1>
+
+ <sect1 id="vboxmanage-sharedfolder">
+ <title>VBoxManage sharedfolder add/remove</title>
+
+ <para>This command allows you to share folders on the host computer with
+ guest operating systems. For this, the guest systems must have a version
+ of the VirtualBox Guest Additions installed which supports this
+ functionality.</para>
+
+ <para>Shared folders are described in detail in <xref
+ linkend="sharedfolders" />.</para>
+ </sect1>
+
+ <sect1 id="vboxmanage-guestproperty">
+ <title>VBoxManage guestproperty</title>
+
+ <para>The "guestproperty" commands allow you to get or set properties of a
+ running virtual machine. Please see <xref linkend="guestadd-guestprops" />
+ for an introduction. As explained there, guest properties are arbitrary
+ key/value string pairs which can be written to and read from by either the
+ guest or the host, so they can be used as a low-volume communication
+ channel for strings, provided that a guest is running and has the Guest
+ Additions installed. In addition, a number of values whose keys begin with
+ "/VirtualBox/" are automatically set and maintained by the Guest
+ Additions.</para>
+
+ <para>The following subcommands are available (where
+ <computeroutput>&lt;vm&gt;</computeroutput>, in each case, can either be a
+ VM name or a VM UUID, as with the other VBoxManage commands):<itemizedlist>
+ <listitem>
+ <para><computeroutput>enumerate &lt;vm&gt; [--patterns
+ &lt;pattern&gt;]</computeroutput>: This lists all the guest
+ properties that are available for the given VM, including the value.
+ This list will be very limited if the guest's service process cannot
+ be contacted, e.g. because the VM is not running or the Guest
+ Additions are not installed.</para>
+
+ <para>If <computeroutput>--patterns &lt;pattern&gt;</computeroutput>
+ is specified, it acts as a filter to only list properties that match
+ the given pattern. The pattern can contain the following wildcard
+ characters:<itemizedlist>
+ <listitem>
+ <para><computeroutput>*</computeroutput> (asterisk):
+ represents any number of characters; for example,
+ "<computeroutput>/VirtualBox*</computeroutput>" would match
+ all properties beginning with "/VirtualBox".</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>?</computeroutput> (question mark):
+ represents a single arbitrary character; for example,
+ "<computeroutput>fo?</computeroutput>" would match both "foo"
+ and "for".</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>|</computeroutput> (pipe symbol): can be
+ used to specify multiple alternative patterns; for example,
+ "<computeroutput>s*|t*</computeroutput>" would match anything
+ starting with either "s" or "t".</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>get &lt;vm&gt;</computeroutput>: This
+ retrieves the value of a single property only. If the property
+ cannot be found (e.g. because the guest is not running), this will
+ print <screen>No value set!</screen></para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>set &lt;vm&gt; &lt;property&gt; [&lt;value&gt;
+ [--flags &lt;flags&gt;]]</computeroutput>: This allows you to set a
+ guest property by specifying the key and value. If
+ <computeroutput>&lt;value&gt;</computeroutput> is omitted, the
+ property is deleted. With <computeroutput>--flags</computeroutput>
+ you can optionally specify additional behavior (you can combine
+ several by separating them with commas):<itemizedlist>
+ <listitem>
+ <para><computeroutput>TRANSIENT</computeroutput>: the value
+ will not be stored with the VM data when the VM exits;</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>TRANSRESET</computeroutput>: the value
+ will be deleted as soon as the VM restarts and/or exits;</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>RDONLYGUEST</computeroutput>: the value
+ can only be changed by the host, but the guest can only read
+ it;</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>RDONLYHOST</computeroutput>: reversely,
+ the value can only be changed by the guest, but the host can
+ only read it;</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>READONLY</computeroutput>: a combination
+ of the two, the value cannot be changed at all.</para>
+ </listitem>
+ </itemizedlist></para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>wait &lt;vm&gt; &lt;pattern&gt; --timeout
+ &lt;timeout&gt;</computeroutput>: This waits for a particular value
+ described by "pattern" to change or to be deleted or created. The
+ pattern rules are the same as for the "enumerate" subcommand
+ above.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect1>
+
+ <sect1 id="vboxmanage-guestcontrol">
+ <title>VBoxManage guestcontrol</title>
+
+ <para>The "guestcontrol" commands allow you to control certain things
+ inside a guest from the host. Please see <xref
+ linkend="guestadd-guestcontrol" /> for an introduction.</para>
+
+ <para>Generally, the syntax is as follows:</para>
+
+ <screen>VBoxManage guestcontrol &lt;command&gt;</screen>
+
+ <para>The following subcommands are available (where
+ <computeroutput>&lt;vm&gt;</computeroutput>, in each case, can either be a
+ VM name or a VM UUID, as with the other VBoxManage commands):<itemizedlist>
+ <listitem>
+ <para><computeroutput>execute</computeroutput>, which allows for
+ executing a program/script (process) which is already installed and
+ runnable on the guest. This command only works while a VM is up and
+ running and has the following syntax:</para>
+
+ <screen>VBoxManage guestcontrol &lt;vmname&gt;|&lt;uuid&gt; exec[ute]
+ --image &lt;path to program&gt;
+ --username &lt;name&gt; --password &lt;password&gt;
+ [--dos2unix]
+ [--environment "&lt;NAME&gt;=&lt;VALUE&gt; [&lt;NAME&gt;=&lt;VALUE&gt;]"]
+ [--timeout &lt;msec&gt;] [--unix2dos] [--verbose]
+ [--wait-exit] [--wait-stdout] [--wait-stderr]
+ -- [[&lt;argument1&gt;] ... [&lt;argumentN&gt;]]</screen>
+
+ <para>where the parameters mean: <glosslist>
+ <glossentry>
+ <glossterm>uuid|vmname</glossterm>
+
+ <glossdef>
+ <para>The VM UUID or VM name. Mandatory.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--image "&lt;path to program&gt;"</glossterm>
+
+ <glossdef>
+ <para>Absolute path and process name of process to execute
+ in the guest, e.g.
+ <computeroutput>C:\Windows\System32\calc.exe</computeroutput></para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--username &lt;name&gt;</glossterm>
+
+ <glossdef>
+ <para>Name of the user the process should run under. This
+ user must exist on the guest OS.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--password &lt;password&gt;</glossterm>
+
+ <glossdef>
+ <para>Password of the user account specified with
+ <computeroutput>--username</computeroutput>. If not given,
+ an empty password is assumed.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--dos2unix</glossterm>
+
+ <glossdef>
+ Converts output from DOS/Windows guests to UNIX-compatible
+ line endings (CR + LF -> LF). Not implemented yet.
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--environment
+ "&lt;NAME&gt;=&lt;VALUE&gt;"</glossterm>
+
+ <glossdef>
+ <para>One or more environment variables to be set or
+ unset.</para>
+
+ <para>By default, the new process in the guest will be
+ created with the standard environment of the guest OS. This
+ option allows for modifying that environment. To set/modify
+ a variable, a pair of
+ <computeroutput>NAME=VALUE</computeroutput> must be
+ specified; to unset a certain variable, the name with no
+ value must set, e.g.
+ <computeroutput>NAME=</computeroutput>.</para>
+
+ <para>Arguments containing spaces must be enclosed in
+ quotation marks. More than one
+ <computeroutput>--environment</computeroutput> at a time can
+ be specified to keep the command line tidy.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--timeout &lt;msec&gt;</glossterm>
+
+ <glossdef>
+ <para>Value (in milliseconds) that specifies the time how
+ long the started process is allowed to run and how long
+ VBoxManage waits for getting output from that process. If no
+ timeout is specified, VBoxManage will wait forever until the
+ started process ends or an error occured.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--unix2dos</glossterm>
+
+ <glossdef>
+ Converts output from a UNIX/Linux guests to DOS-/Windows-compatible
+ line endings (LF -> CR + LF). Not implemented yet.
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--verbose</glossterm>
+
+ <glossdef>
+ <para>Tells VBoxManage to be more verbose.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--wait-exit</glossterm>
+
+ <glossdef>
+ <para>Waits until the process ends and outputs its
+ exit code along with the exit reason/flags.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--wait-stdout</glossterm>
+
+ <glossdef>
+ <para>Waits until the process ends and outputs its
+ exit code along with the exit reason/flags. While waiting
+ VBoxManage retrieves the process output collected from stdout.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--wait-stderr</glossterm>
+
+ <glossdef>
+ <para>Waits until the process ends and outputs its
+ exit code along with the exit reason/flags. While waiting
+ VBoxManage retrieves the process output collected from stderr.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>[-- [&lt;argument1s&gt;] ... [&lt;argumentNs&gt;]]</glossterm>
+
+ <glossdef>
+ <para>One or more arguments to pass to the process being
+ executed.</para>
+ <para>Arguments containing spaces must be enclosed in
+ quotation marks.</para>
+ </glossdef>
+ </glossentry>
+
+ </glosslist></para>
+
+ <para><note>
+ <para>On Windows there are certain limitations for graphical
+ applications; please see <xref linkend="KnownIssues" /> for more
+ information.</para>
+ </note> Examples: <screen>VBoxManage --nologo guestcontrol "My VM" execute --image "/bin/ls"
+ --username foo --password bar --wait-exit --wait-stdout -- -l /usr</screen> <screen>VBoxManage --nologo guestcontrol "My VM" execute --image "c:\\windows\\system32\\ipconfig.exe"
+ --username foo --password bar --wait-exit --wait-stdout</screen> Note that
+ the double backslashes in the second example are only required on
+ Unix hosts.</para>
+
+ <para>Starting at VirtualBox 4.1.2 guest process execution by default is limited
+ to serve up to 5 guest processes at a time. If a new guest process gets started
+ which would exceed this limit, the oldest not running guest process will be discarded
+ in order to be able to run that new process. Also, retrieving output from this
+ old guest process will not be possible anymore then. If all 5 guest processes
+ are still active and running, starting a new guest process will result in an
+ appropriate error message.</para>
+
+ <para>To raise or lower the guest process execution limit, either the guest
+ property <computerouptut>/VirtualBox/GuestAdd/VBoxService/--control-procs-max-kept</computerouptut>
+ or VBoxService' command line by specifying <computeroutput>--control-procs-max-kept</computeroutput>
+ needs to be modified. A restart of the guest OS is required afterwards. To serve unlimited
+ guest processes, a value of <computeroutput>0</computeroutput> needs to be set (not recommended).</para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>copyto</computeroutput>, which allows copying
+ files from the host to the guest (only with installed Guest
+ Additions 4.0 and later).</para>
+
+ <screen>VBoxManage guestcontrol &lt;vmname&gt;|&lt;uuid&gt; copyto|cp
+ &lt;source on host&gt; &lt;destination on guest&gt;
+ --username &lt;name&gt; --password &lt;password&gt;
+ [--dryrun] [--follow] [--recursive] [--verbose]</screen>
+
+ <para>where the parameters mean: <glosslist>
+ <glossentry>
+ <glossterm>uuid|vmname</glossterm>
+
+ <glossdef>
+ <para>The VM UUID or VM name. Mandatory.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>source on host</glossterm>
+
+ <glossdef>
+ <para>Absolute path of source file(s) on host to copy over
+ to the guest, e.g.
+ <computeroutput>C:\Windows\System32\calc.exe</computeroutput>.
+ This also can be a wildcard expression, e.g.
+ <computeroutput>C:\Windows\System32\*.dll</computeroutput></para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>destination on guest</glossterm>
+
+ <glossdef>
+ <para>Absolute destination path on the guest, e.g.
+ <computeroutput>C:\Temp</computeroutput></para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--username &lt;name&gt;</glossterm>
+
+ <glossdef>
+ <para>Name of the user the copy process should run under.
+ This user must exist on the guest OS.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--password &lt;password&gt;</glossterm>
+
+ <glossdef>
+ <para>Password of the user account specified with
+ <computeroutput>--username</computeroutput>. If not given,
+ an empty password is assumed.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--dryrun</glossterm>
+
+ <glossdef>
+ <para>Tells VBoxManage to only perform a dry run instead of
+ really copying files to the guest.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--follow</glossterm>
+
+ <glossdef>
+ <para>Enables following symlinks on the host's
+ source.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--recursive</glossterm>
+
+ <glossdef>
+ <para>Recursively copies files/directories of the specified
+ source.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--verbose</glossterm>
+
+ <glossdef>
+ <para>Tells VBoxManage to be more verbose.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--flags &lt;flags&gt;</glossterm>
+
+ <glossdef>
+ <para>Additional flags to set. This is not used at the
+ moment.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>createdirectory</computeroutput>, which allows
+ copying files from the host to the guest (only with installed Guest
+ Additions 4.0 and later).</para>
+
+ <screen>VBoxManage guestcontrol &lt;vmname&gt;|&lt;uuid&gt; createdir[ectory]|mkdir|md
+ &lt;directory to create on guest&gt;
+ [--username "&lt;name&gt;"] [--password "&lt;password&gt;"]
+ [--parents] [--mode &lt;mode&gt;] [--verbose]</screen>
+
+ <para>where the parameters mean: <glosslist>
+ <glossentry>
+ <glossterm>uuid|vmname</glossterm>
+
+ <glossdef>
+ <para>The VM UUID or VM name. Mandatory.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>directory to create on guest</glossterm>
+
+ <glossdef>
+ <para>Absolute path of directory/directories to create on
+ guest, e.g. <computeroutput>D:\Foo\Bar</computeroutput>.
+ Parent directories need to exist (e.g. in this example
+ <computeroutput>D:\Foo</computeroutput>) when switch
+ <computeroutput>--parents</computeroutput> is omitted. The
+ specified user must have appropriate rights to create the
+ specified directory.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--username &lt;name&gt;</glossterm>
+
+ <glossdef>
+ <para>Name of the user the copy process should run under.
+ This user must exist on the guest OS.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--password &lt;password&gt;</glossterm>
+
+ <glossdef>
+ <para>Password of the user account specified with
+ <computeroutput>--username</computeroutput>. If not given,
+ an empty password is assumed.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--parents</glossterm>
+
+ <glossdef>
+ <para>Also creates not yet existing parent directories of
+ the specified directory, e.g. if the directory
+ <computeroutput>D:\Foo</computeroutput> of
+ <computeroutput>D:\Foo\Bar</computeroutput> does not exist
+ yet it will be created. Without specifying
+ <computeroutput>--parent</computeroutput> the action would
+ have failed.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--mode &lt;mode&gt;</glossterm>
+
+ <glossdef>
+ <para>Sets the permission mode of the specified directory.
+ Only octal modes (e.g.
+ <computeroutput>0755</computeroutput>) are supported right
+ now.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--verbose</glossterm>
+
+ <glossdef>
+ <para>Tells VBoxManage to be more verbose.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>stat</computeroutput>, which displays file
+ or file system status on the guest.</para>
+
+ <screen>VBoxManage guestcontrol &lt;vmname&gt;|&lt;uuid&gt; stat
+ &lt;file element(s) to check on guest&gt;
+ [--username "&lt;name&gt;"] [--password "&lt;password&gt;"]
+ [--verbose]</screen>
+
+ <para>where the parameters mean: <glosslist>
+ <glossentry>
+ <glossterm>uuid|vmname</glossterm>
+
+ <glossdef>
+ <para>The VM UUID or VM name. Mandatory.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>file element(s) to check on guest</glossterm>
+
+ <glossdef>
+ <para>Absolute path of directory/directories to check on
+ guest, e.g. <computeroutput>/home/foo/a.out</computeroutput>.
+ The specified user must have appropriate rights to access
+ the given file element(s).</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--username &lt;name&gt;</glossterm>
+
+ <glossdef>
+ <para>Name of the user the copy process should run under.
+ This user must exist on the guest OS.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--password &lt;password&gt;</glossterm>
+
+ <glossdef>
+ <para>Password of the user account specified with
+ <computeroutput>--username</computeroutput>. If not given,
+ an empty password is assumed.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--verbose</glossterm>
+
+ <glossdef>
+ <para>Tells VBoxManage to be more verbose.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+ </listitem>
+
+ <listitem>
+ <para><computeroutput>updateadditions</computeroutput>, which allows
+ for updating an already installed Guest Additions version on the
+ guest (only already installed Guest Additions 4.0 and later).</para>
+
+ <screen>VBoxManage guestcontrol updateadditions &lt;vmname&gt;|&lt;uuid&gt;
+ [--source "&lt;guest additions .ISO file to use&gt;"] [--verbose]</screen>
+
+ <para>where the parameters mean: <glosslist>
+ <glossentry>
+ <glossterm>uuid|vmname</glossterm>
+
+ <glossdef>
+ <para>The VM UUID or VM name. Mandatory.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--source "&lt;guest additions .ISO file to
+ use&gt;"</glossterm>
+
+ <glossdef>
+ <para>Full path to an alternative VirtualBox Guest Additions
+ .ISO file to use for the Guest Additions update.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>--verbose</glossterm>
+
+ <glossdef>
+ <para>Tells VBoxManage to be more verbose.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist></para>
+ </listitem>
+ </itemizedlist></para>
+ </sect1>
+
+ <sect1 id="vboxmanage-debugvm">
+ <title>VBoxManage debugvm</title>
+
+ <para>The "debugvm" commands are for experts who want to tinker with the
+ exact details of virtual machine execution. Like the VM debugger described
+ in <xref linkend="debugger" />, these commands are only useful if you are
+ very familiar with the details of the PC architecture and how to debug
+ software.</para>
+
+ <para>The subcommands of "debugvm" all operate on a running virtual
+ machine. The following are available:<itemizedlist>
+ <listitem>
+ <para>With <computeroutput>dumpguestcore --filename
+ &lt;name&gt;</computeroutput>, you can create a system dump of the
+ running VM, which will be written into the given file. This file
+ will have the standard ELF core format (with custom sections); see
+ <xref linkend="guestcoreformat" />.</para>
+
+ <para>This corresponds to the
+ <computeroutput>writecore</computeroutput> command in the debugger.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>The <computeroutput>info</computeroutput> command is used to
+ display info items relating to the VMM, device emulations and
+ associated drivers. This command takes one or two arguments: the
+ name of the info item, optionally followed by a string containing
+ arguments specific to the info item.
+ The <computeroutput>help</computeroutput> info item provides a
+ listning of the available items and hints about any optional
+ arguments.</para>
+
+ <para>This corresponds to the <computeroutput>info</computeroutput>
+ command in the debugger.</para>
+ </listitem>
+
+ <listitem>
+ <para>The <computeroutput>injectnmi</computeroutput> command causes
+ a non-maskable interrupt (NMI) in the guest, which might be useful
+ for certain debugging scenarios. What happens exactly is dependent
+ on the guest operating system, but an NMI can crash the whole guest
+ operating system. Do not use unless you know what you're
+ doing.</para>
+ </listitem>
+
+ <listitem>
+ <para>The <computeroutput>osdetect</computeroutput> command makes the
+ VMM's debugger facility (re-)detection the guest operation
+ system.</para>
+
+ <para>This corresponds to the <computeroutput>detect</computeroutput>
+ command in the debugger.</para>
+ </listitem>
+
+ <listitem>
+ <para>The <computeroutput>osinfo</computeroutput> command is used to
+ display info about the operating system (OS) detected by the VMM's
+ debugger facility.</para>
+ </listitem>
+
+ <listitem>
+ <para>The <computeroutput>getregisters</computeroutput> command is
+ used to display CPU and device registers. The command takes a list
+ of registers, each having one of the following forms:
+ <itemizedlist>
+ <listitem><computeroutput>register-set.register-name.sub-field</computeroutput></listitem>
+ <listitem><computeroutput>register-set.register-name</computeroutput></listitem>
+ <listitem><computeroutput>cpu-register-name.sub-field</computeroutput></listitem>
+ <listitem><computeroutput>cpu-register-name</computeroutput></listitem>
+ <listitem><computeroutput>all</computeroutput></listitem>
+ </itemizedlist>
+ The <computeroutput>all</computeroutput> form will cause all
+ registers to be shown (no sub-fields). The registers names are
+ case-insensitive. When requesting a CPU register the register set
+ can be omitted, it will be selected using the value of the
+ <computeroutput>--cpu</computeroutput> option (defaulting to 0).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>The <computeroutput>setregisters</computeroutput> command is
+ used to change CPU and device registers. The command takes a list
+ of register assignments, each having one of the following forms:
+ <itemizedlist>
+ <listitem><computeroutput>register-set.register-name.sub-field=value</computeroutput></listitem>
+ <listitem><computeroutput>register-set.register-name=value</computeroutput></listitem>
+ <listitem><computeroutput>cpu-register-name.sub-field=value</computeroutput></listitem>
+ <listitem><computeroutput>cpu-register-name=value</computeroutput></listitem>
+ </itemizedlist>
+ The value format should be in the same style as what
+ <computeroutput>getregisters</computeroutput> displays, with the
+ exception that both octal and decimal can be used instead of
+ hexadecimal. The register naming and the default CPU register set
+ are handled the same way as with the
+ <computeroutput>getregisters</computeroutput> command.</para>
+ </listitem>
+
+ <listitem>
+ <para>The <computeroutput>statistics</computeroutput> command can be
+ used to display VMM statistics on the command line. The
+ <computeroutput>--reset</computeroutput> option will reset
+ statistics. The affected statistics can be filtered with the
+ <computeroutput>--pattern</computeroutput> option, which accepts
+ DOS/NT-style wildcards (<computeroutput>?</computeroutput> and
+ <computeroutput>*</computeroutput>).</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect1>
+
+ <sect1>
+ <title id="metrics">VBoxManage metrics</title>
+
+ <para>This command supports monitoring the usage of system resources.
+ Resources are represented by various metrics associated with the host
+ system or a particular VM. For example, the host system has a
+ <computeroutput>CPU/Load/User</computeroutput> metric that shows the
+ percentage of time CPUs spend executing in user mode over a specific
+ sampling period.</para>
+
+ <para>Metric data is collected and retained internally; it may be
+ retrieved at any time with the <computeroutput>VBoxManage metrics
+ query</computeroutput> subcommand. The data is available as long as the
+ background <computeroutput>VBoxSVC</computeroutput> process is alive. That
+ process terminates shortly after all VMs and frontends have been
+ closed.</para>
+
+ <para>By default no metrics are collected at all. Metrics collection does
+ not start until <computeroutput>VBoxManage metrics setup</computeroutput>
+ is invoked with a proper sampling interval and the number of metrics to be
+ retained. The interval is measured in seconds. For example, to enable
+ collecting the host processor and memory usage metrics every second and
+ keeping the 5 most current samples, the following command can be
+ used:</para>
+
+ <screen>VBoxManage metrics setup --period 1 --samples 5 host CPU/Load,RAM/Usage</screen>
+
+ <para>Metric collection can only be enabled for started VMs. Collected
+ data and collection settings for a particular VM will disappear as soon as
+ it shuts down. Use <computeroutput>VBoxManage metrics list
+ </computeroutput> subcommand to see which metrics are currently available.
+ You can also use <computeroutput>--list</computeroutput> option with any
+ subcommand that modifies metric settings to find out which metrics were
+ affected.</para>
+
+ <para>Note that the <computeroutput>VBoxManage metrics
+ setup</computeroutput> subcommand discards all samples that may have been
+ previously collected for the specified set of objects and metrics.</para>
+
+ <para>To enable or disable metrics collection without discarding the data
+ <computeroutput>VBoxManage metrics enable</computeroutput> and
+ <computeroutput>VBoxManage metrics disable</computeroutput> subcommands
+ can be used. Note that these subcommands expect metrics, not submetrics,
+ like <code>CPU/Load</code> or <code>RAM/Usage</code> as parameters. In
+ other words enabling <code>CPU/Load/User</code> while disabling
+ <code>CPU/Load/Kernel</code> is not supported.</para>
+
+ <para>The host and VMs have different sets of associated metrics.
+ Available metrics can be listed with <computeroutput>VBoxManage metrics
+ list</computeroutput> subcommand.</para>
+
+ <para>A complete metric name may include an aggregate function. The name
+ has the following form:
+ <computeroutput>Category/Metric[/SubMetric][:aggregate]</computeroutput>.
+ For example, <computeroutput>RAM/Usage/Free:min</computeroutput> stands
+ for the minimum amount of available memory over all retained data if
+ applied to the host object.</para>
+
+ <para>Subcommands may apply to all objects and metrics or can be limited
+ to one object or/and a list of metrics. If no objects or metrics are given
+ in the parameters, the subcommands will apply to all available metrics of
+ all objects. You may use an asterisk
+ ("<computeroutput>*</computeroutput>") to explicitly specify that the
+ command should be applied to all objects or metrics. Use "host" as the
+ object name to limit the scope of the command to host-related metrics. To
+ limit the scope to a subset of metrics, use a metric list with names
+ separated by commas.</para>
+
+ <para>For example, to query metric data on the CPU time spent in user and
+ kernel modes by the virtual machine named "test", you can use the
+ following command:</para>
+
+ <screen>VBoxManage metrics query test CPU/Load/User,CPU/Load/Kernel</screen>
+
+ <para>The following list summarizes the available subcommands:</para>
+
+ <glosslist>
+ <glossentry>
+ <glossterm>list</glossterm>
+
+ <glossdef>
+ <para>This subcommand shows the parameters of the currently existing
+ metrics. Note that VM-specific metrics are only available when a
+ particular VM is running.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>setup</glossterm>
+
+ <glossdef>
+ <para>This subcommand sets the interval between taking two samples
+ of metric data and the number of samples retained internally. The
+ retained data is available for displaying with the
+ <code>query</code> subcommand. The <computeroutput>--list
+ </computeroutput> option shows which metrics have been modified as
+ the result of the command execution.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>enable</glossterm>
+
+ <glossdef>
+ <para>This subcommand "resumes" data collection after it has been
+ stopped with <code>disable</code> subcommand. Note that specifying
+ submetrics as parameters will not enable underlying metrics. Use
+ <computeroutput>--list</computeroutput> to find out if the command
+ did what was expected.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>disable</glossterm>
+
+ <glossdef>
+ <para>This subcommand "suspends" data collection without affecting
+ collection parameters or collected data. Note that specifying
+ submetrics as parameters will not disable underlying metrics. Use
+ <computeroutput>--list</computeroutput> to find out if the command
+ did what was expected.</para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>query</glossterm>
+
+ <glossdef>
+ <para>This subcommand retrieves and displays the currently retained
+ metric data.<note>
+ <para>The <code>query</code> subcommand does not remove or
+ "flush" retained data. If you query often enough you will see
+ how old samples are gradually being "phased out" by new
+ samples.</para>
+ </note></para>
+ </glossdef>
+ </glossentry>
+
+ <glossentry>
+ <glossterm>collect</glossterm>
+
+ <glossdef>
+ <para>This subcommand sets the interval between taking two samples
+ of metric data and the number of samples retained internally. The
+ collected data is displayed periodically until Ctrl-C is pressed
+ unless the <computeroutput>--detach</computeroutput> option is
+ specified. With the <computeroutput>--detach</computeroutput>
+ option, this subcommand operates the same way as <code>setup</code>
+ does. The <computeroutput>--list</computeroutput> option shows which
+ metrics match the specified filter.</para>
+ </glossdef>
+ </glossentry>
+ </glosslist>
+ </sect1>
+
+ <sect1>
+ <title>VBoxManage hostonlyif</title>
+
+ <para>With "hostonlyif" you can change the IP configuration of a host-only
+ network interface. For a description of host-only networking, please
+ refer to <xref linkend="network_hostonly" />. Each host-only interface is
+ identified by a name and can either use the internal DHCP server or a
+ manual IP configuration (both IP4 and IP6).</para>
+ </sect1>
+
+ <sect1 id="vboxmanage-dhcpserver">
+ <title>VBoxManage dhcpserver</title>
+
+ <para>The "dhcpserver" commands allow you to control the DHCP server that
+ is built into VirtualBox. You may find this useful when using internal or
+ host-only networking. (Theoretically, you can enable it for a bridged
+ network as well, but that will likely cause conflicts with other DHCP
+ servers in your physical network.)</para>
+
+ <para>Use the following command line options:<itemizedlist>
+ <listitem>
+ <para>If you use internal networking for a virtual network adapter
+ of a virtual machine, use <computeroutput>VBoxManage dhcpserver add
+ --netname &lt;network_name&gt;</computeroutput>, where
+ <computeroutput>&lt;network_name&gt;</computeroutput> is the same
+ network name you used with <computeroutput>VBoxManage modifyvm
+ &lt;vmname&gt; --intnet&lt;X&gt;
+ &lt;network_name&gt;</computeroutput>.</para>
+ </listitem>
+
+ <listitem>
+ <para>If you use host-only networking for a virtual network adapter
+ of a virtual machine, use <computeroutput>VBoxManage dhcpserver add
+ --ifname &lt;hostonly_if_name&gt;</computeroutput> instead, where
+ <computeroutput>&lt;hostonly_if_name&gt;</computeroutput> is the
+ same host-only interface name you used with
+ <computeroutput>VBoxManage modifyvm &lt;vmname&gt;
+ --hostonlyadapter&lt;X&gt;
+ &lt;hostonly_if_name&gt;</computeroutput>.</para>
+
+ <para>Alternatively, you can also use the --netname option as with
+ internal networks if you know the host-only network's name; you can
+ see the names with <computeroutput>VBoxManage list
+ hostonlyifs</computeroutput> (see <xref linkend="vboxmanage-list" />
+ above).</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>The following additional parameters are required when first adding a
+ DHCP server:<itemizedlist>
+ <listitem>
+ <para>With <computeroutput>--ip</computeroutput>, specify the IP
+ address of the DHCP server itself.</para>
+ </listitem>
+
+ <listitem>
+ <para>With <computeroutput>--netmask</computeroutput>, specify the
+ netmask of the network.</para>
+ </listitem>
+
+ <listitem>
+ <para>With <computeroutput>--lowerip</computeroutput> and
+ <computeroutput>--upperip</computeroutput>, you can specify the
+ lowest and highest IP address, respectively, that the DHCP server
+ will hand out to clients.</para>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>Finally, you must specify <computeroutput>--enable</computeroutput>
+ or the DHCP server will be created in the disabled state, doing
+ nothing.</para>
+
+ <para>After this, VirtualBox will automatically start the DHCP server for
+ given internal or host-only network as soon as the first virtual machine
+ which uses that network is started.</para>
+
+ <para>Reversely, use <computeroutput>VBoxManage dhcpserver
+ remove</computeroutput> with the given <computeroutput>--netname
+ &lt;network_name&gt;</computeroutput> or <computeroutput>--ifname
+ &lt;hostonly_if_name&gt;</computeroutput> to remove the DHCP server again
+ for the given internal or host-only network.</para>
+
+ <para>To modify the settings of a DHCP server created earlier with
+ <computeroutput>VBoxManage dhcpserver add</computeroutput>, you can use
+ <computeroutput>VBoxManage dhcpserver modify</computeroutput> for a given
+ network or host-only interface name.</para>
+ </sect1>
+
+ <sect1 id="vboxmanage-extpack">
+ <title>VBoxManage extpack</title>
+
+ <para>The "extpack" command allows you to add or remove VirtualBox
+ extension packs, as described in <xref
+ linkend="intro-installing" />.<itemizedlist>
+ <listitem>
+ <para>To add a new extension pack, use <computeroutput>VBoxManage
+ extpack install &lt;tarball&gt;</computeroutput>. This command
+ will fail if an older version of the same extension pack is already
+ installed. The optional <computeroutput>--replace</computeroutput>
+ parameter can be used to uninstall the old package before the new
+ package is installed.</para>
+ </listitem>
+
+ <listitem>
+ <para>To remove a previously installed extension pack, use
+ <computeroutput>VBoxManage extpack uninstall
+ &lt;name&gt;</computeroutput>. You can use
+ <computeroutput>VBoxManage list extpacks</computeroutput> to show
+ the names of the extension packs which are currently installed;
+ please see <xref linkend="vboxmanage-list" /> also. The optional
+ <computeroutput>--force</computeroutput> parameter can be used to
+ override the refusal of an extension pack to be uninstalled.</para>
+ </listitem>
+
+ <listitem>
+ <para>The <computeroutput>VBoxManage extpack
+ cleanup</computeroutput> command can be used to remove temporary
+ files and directories that may have been left behind if a previous
+ install or uninstall command failed.</para>
+ </listitem>
+ </itemizedlist></para>
+ </sect1>
+</chapter>
diff --git a/doc/manual/fr_FR/user_VirtualBoxAPI.xml b/doc/manual/fr_FR/user_VirtualBoxAPI.xml
new file mode 100644
index 00000000..f2a61883
--- /dev/null
+++ b/doc/manual/fr_FR/user_VirtualBoxAPI.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
+ "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<chapter id="VirtualBoxAPI">
+ <title>VirtualBox programming interfaces</title>
+
+ <para>VirtualBox comes with comprehensive support for third-party
+ developers. The so-called "Main API" of VirtualBox exposes the entire
+ feature set of the virtualization engine. It is completely documented and
+ available to anyone who wishes to control VirtualBox programmatically.
+ </para>
+
+ <para>The Main API is made available to C++ clients through COM (on Windows
+ hosts) or XPCOM (on other hosts). Bridges also exist for SOAP, Java and
+ Python.</para>
+
+ <para>All programming information (documentation, reference information,
+ header and other interface files as well as samples) have been split out to
+ a separate <emphasis role="bold">Software Development Kit (SDK),</emphasis>
+ which is available for download from <ulink type=""
+ url="http://www.virtualbox.org">http://www.virtualbox.org</ulink>. In
+ particular, the SDK comes with a "Programming Guide and Reference" in PDF
+ format, which contains, among other things, the information that was
+ previously in this chapter of the User Manual.</para>
+</chapter> \ No newline at end of file
diff --git a/doc/manual/string.xsl b/doc/manual/string.xsl
new file mode 100644
index 00000000..e6ea7595
--- /dev/null
+++ b/doc/manual/string.xsl
@@ -0,0 +1,1237 @@
+<?xml version="1.0"?>
+
+<!-- This file is taken from the XSLT Standard Library as available
+ from http://xsltsl.sourceforge.net/. Except for this notice, it
+ has not been modified. -->
+
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:doc="http://xsltsl.org/xsl/documentation/1.0"
+ xmlns:str="http://xsltsl.org/string"
+ extension-element-prefixes="doc str">
+
+ <doc:reference xmlns="">
+ <referenceinfo>
+ <releaseinfo role="meta">
+ $Id: string.xsl $
+ </releaseinfo>
+ <author>
+ <surname>Ball</surname>
+ <firstname>Steve</firstname>
+ </author>
+ <copyright>
+ <year>2002</year>
+ <year>2001</year>
+ <holder>Steve Ball</holder>
+ </copyright>
+ </referenceinfo>
+
+ <title>String Processing</title>
+
+ <partintro>
+ <section>
+ <title>Introduction</title>
+
+ <para>This module provides templates for manipulating strings.</para>
+
+ </section>
+ </partintro>
+
+ </doc:reference>
+
+ <!-- Common string constants and datasets as XSL variables -->
+
+ <!-- str:lower and str:upper contain pairs of lower and upper case
+ characters. Below insanely long strings should contain the
+ official lower/uppercase pairs, making this stylesheet working
+ for every language on earth. Hopefully. -->
+ <!-- These values are not enough, however. There are some
+ exceptions, dealt with below. -->
+ <xsl:variable name="xsltsl-str-lower" select="'&#x0061;&#x0062;&#x0063;&#x0064;&#x0065;&#x0066;&#x0067;&#x0068;&#x0069;&#x006A;&#x006B;&#x006C;&#x006D;&#x006E;&#x006F;&#x0070;&#x0071;&#x0072;&#x0073;&#x0074;&#x0075;&#x0076;&#x0077;&#x0078;&#x0079;&#x007A;&#x00B5;&#x00E0;&#x00E1;&#x00E2;&#x00E3;&#x00E4;&#x00E5;&#x00E6;&#x00E7;&#x00E8;&#x00E9;&#x00EA;&#x00EB;&#x00EC;&#x00ED;&#x00EE;&#x00EF;&#x00F0;&#x00F1;&#x00F2;&#x00F3;&#x00F4;&#x00F5;&#x00F6;&#x00F8;&#x00F9;&#x00FA;&#x00FB;&#x00FC;&#x00FD;&#x00FE;&#x00FF;&#x0101;&#x0103;&#x0105;&#x0107;&#x0109;&#x010B;&#x010D;&#x010F;&#x0111;&#x0113;&#x0115;&#x0117;&#x0119;&#x011B;&#x011D;&#x011F;&#x0121;&#x0123;&#x0125;&#x0127;&#x0129;&#x012B;&#x012D;&#x012F;&#x0131;&#x0133;&#x0135;&#x0137;&#x013A;&#x013C;&#x013E;&#x0140;&#x0142;&#x0144;&#x0146;&#x0148;&#x014B;&#x014D;&#x014F;&#x0151;&#x0153;&#x0155;&#x0157;&#x0159;&#x015B;&#x015D;&#x015F;&#x0161;&#x0163;&#x0165;&#x0167;&#x0169;&#x016B;&#x016D;&#x016F;&#x0171;&#x0173;&#x0175;&#x0177;&#x017A;&#x017C;&#x017E;&#x017F;&#x0183;&#x0185;&#x0188;&#x018C;&#x0192;&#x0195;&#x0199;&#x01A1;&#x01A3;&#x01A5;&#x01A8;&#x01AD;&#x01B0;&#x01B4;&#x01B6;&#x01B9;&#x01BD;&#x01BF;&#x01C5;&#x01C6;&#x01C8;&#x01C9;&#x01CB;&#x01CC;&#x01CE;&#x01D0;&#x01D2;&#x01D4;&#x01D6;&#x01D8;&#x01DA;&#x01DC;&#x01DD;&#x01DF;&#x01E1;&#x01E3;&#x01E5;&#x01E7;&#x01E9;&#x01EB;&#x01ED;&#x01EF;&#x01F2;&#x01F3;&#x01F5;&#x01F9;&#x01FB;&#x01FD;&#x01FF;&#x0201;&#x0203;&#x0205;&#x0207;&#x0209;&#x020B;&#x020D;&#x020F;&#x0211;&#x0213;&#x0215;&#x0217;&#x0219;&#x021B;&#x021D;&#x021F;&#x0223;&#x0225;&#x0227;&#x0229;&#x022B;&#x022D;&#x022F;&#x0231;&#x0233;&#x0253;&#x0254;&#x0256;&#x0257;&#x0259;&#x025B;&#x0260;&#x0263;&#x0268;&#x0269;&#x026F;&#x0272;&#x0275;&#x0280;&#x0283;&#x0288;&#x028A;&#x028B;&#x0292;&#x0345;&#x03AC;&#x03AD;&#x03AE;&#x03AF;&#x03B1;&#x03B2;&#x03B3;&#x03B4;&#x03B5;&#x03B6;&#x03B7;&#x03B8;&#x03B9;&#x03BA;&#x03BB;&#x03BC;&#x03BD;&#x03BE;&#x03BF;&#x03C0;&#x03C1;&#x03C2;&#x03C3;&#x03C4;&#x03C5;&#x03C6;&#x03C7;&#x03C8;&#x03C9;&#x03CA;&#x03CB;&#x03CC;&#x03CD;&#x03CE;&#x03D0;&#x03D1;&#x03D5;&#x03D6;&#x03DB;&#x03DD;&#x03DF;&#x03E1;&#x03E3;&#x03E5;&#x03E7;&#x03E9;&#x03EB;&#x03ED;&#x03EF;&#x03F0;&#x03F1;&#x03F2;&#x03F5;&#x0430;&#x0431;&#x0432;&#x0433;&#x0434;&#x0435;&#x0436;&#x0437;&#x0438;&#x0439;&#x043A;&#x043B;&#x043C;&#x043D;&#x043E;&#x043F;&#x0440;&#x0441;&#x0442;&#x0443;&#x0444;&#x0445;&#x0446;&#x0447;&#x0448;&#x0449;&#x044A;&#x044B;&#x044C;&#x044D;&#x044E;&#x044F;&#x0450;&#x0451;&#x0452;&#x0453;&#x0454;&#x0455;&#x0456;&#x0457;&#x0458;&#x0459;&#x045A;&#x045B;&#x045C;&#x045D;&#x045E;&#x045F;&#x0461;&#x0463;&#x0465;&#x0467;&#x0469;&#x046B;&#x046D;&#x046F;&#x0471;&#x0473;&#x0475;&#x0477;&#x0479;&#x047B;&#x047D;&#x047F;&#x0481;&#x048D;&#x048F;&#x0491;&#x0493;&#x0495;&#x0497;&#x0499;&#x049B;&#x049D;&#x049F;&#x04A1;&#x04A3;&#x04A5;&#x04A7;&#x04A9;&#x04AB;&#x04AD;&#x04AF;&#x04B1;&#x04B3;&#x04B5;&#x04B7;&#x04B9;&#x04BB;&#x04BD;&#x04BF;&#x04C2;&#x04C4;&#x04C8;&#x04CC;&#x04D1;&#x04D3;&#x04D5;&#x04D7;&#x04D9;&#x04DB;&#x04DD;&#x04DF;&#x04E1;&#x04E3;&#x04E5;&#x04E7;&#x04E9;&#x04EB;&#x04ED;&#x04EF;&#x04F1;&#x04F3;&#x04F5;&#x04F9;&#x0561;&#x0562;&#x0563;&#x0564;&#x0565;&#x0566;&#x0567;&#x0568;&#x0569;&#x056A;&#x056B;&#x056C;&#x056D;&#x056E;&#x056F;&#x0570;&#x0571;&#x0572;&#x0573;&#x0574;&#x0575;&#x0576;&#x0577;&#x0578;&#x0579;&#x057A;&#x057B;&#x057C;&#x057D;&#x057E;&#x057F;&#x0580;&#x0581;&#x0582;&#x0583;&#x0584;&#x0585;&#x0586;&#x1E01;&#x1E03;&#x1E05;&#x1E07;&#x1E09;&#x1E0B;&#x1E0D;&#x1E0F;&#x1E11;&#x1E13;&#x1E15;&#x1E17;&#x1E19;&#x1E1B;&#x1E1D;&#x1E1F;&#x1E21;&#x1E23;&#x1E25;&#x1E27;&#x1E29;&#x1E2B;&#x1E2D;&#x1E2F;&#x1E31;&#x1E33;&#x1E35;&#x1E37;&#x1E39;&#x1E3B;&#x1E3D;&#x1E3F;&#x1E41;&#x1E43;&#x1E45;&#x1E47;&#x1E49;&#x1E4B;&#x1E4D;&#x1E4F;&#x1E51;&#x1E53;&#x1E55;&#x1E57;&#x1E59;&#x1E5B;&#x1E5D;&#x1E5F;&#x1E61;&#x1E63;&#x1E65;&#x1E67;&#x1E69;&#x1E6B;&#x1E6D;&#x1E6F;&#x1E71;&#x1E73;&#x1E75;&#x1E77;&#x1E79;&#x1E7B;&#x1E7D;&#x1E7F;&#x1E81;&#x1E83;&#x1E85;&#x1E87;&#x1E89;&#x1E8B;&#x1E8D;&#x1E8F;&#x1E91;&#x1E93;&#x1E95;&#x1E9B;&#x1EA1;&#x1EA3;&#x1EA5;&#x1EA7;&#x1EA9;&#x1EAB;&#x1EAD;&#x1EAF;&#x1EB1;&#x1EB3;&#x1EB5;&#x1EB7;&#x1EB9;&#x1EBB;&#x1EBD;&#x1EBF;&#x1EC1;&#x1EC3;&#x1EC5;&#x1EC7;&#x1EC9;&#x1ECB;&#x1ECD;&#x1ECF;&#x1ED1;&#x1ED3;&#x1ED5;&#x1ED7;&#x1ED9;&#x1EDB;&#x1EDD;&#x1EDF;&#x1EE1;&#x1EE3;&#x1EE5;&#x1EE7;&#x1EE9;&#x1EEB;&#x1EED;&#x1EEF;&#x1EF1;&#x1EF3;&#x1EF5;&#x1EF7;&#x1EF9;&#x1F00;&#x1F01;&#x1F02;&#x1F03;&#x1F04;&#x1F05;&#x1F06;&#x1F07;&#x1F10;&#x1F11;&#x1F12;&#x1F13;&#x1F14;&#x1F15;&#x1F20;&#x1F21;&#x1F22;&#x1F23;&#x1F24;&#x1F25;&#x1F26;&#x1F27;&#x1F30;&#x1F31;&#x1F32;&#x1F33;&#x1F34;&#x1F35;&#x1F36;&#x1F37;&#x1F40;&#x1F41;&#x1F42;&#x1F43;&#x1F44;&#x1F45;&#x1F51;&#x1F53;&#x1F55;&#x1F57;&#x1F60;&#x1F61;&#x1F62;&#x1F63;&#x1F64;&#x1F65;&#x1F66;&#x1F67;&#x1F70;&#x1F71;&#x1F72;&#x1F73;&#x1F74;&#x1F75;&#x1F76;&#x1F77;&#x1F78;&#x1F79;&#x1F7A;&#x1F7B;&#x1F7C;&#x1F7D;&#x1F80;&#x1F81;&#x1F82;&#x1F83;&#x1F84;&#x1F85;&#x1F86;&#x1F87;&#x1F90;&#x1F91;&#x1F92;&#x1F93;&#x1F94;&#x1F95;&#x1F96;&#x1F97;&#x1FA0;&#x1FA1;&#x1FA2;&#x1FA3;&#x1FA4;&#x1FA5;&#x1FA6;&#x1FA7;&#x1FB0;&#x1FB1;&#x1FB3;&#x1FBE;&#x1FC3;&#x1FD0;&#x1FD1;&#x1FE0;&#x1FE1;&#x1FE5;&#x1FF3;&#x2170;&#x2171;&#x2172;&#x2173;&#x2174;&#x2175;&#x2176;&#x2177;&#x2178;&#x2179;&#x217A;&#x217B;&#x217C;&#x217D;&#x217E;&#x217F;&#x24D0;&#x24D1;&#x24D2;&#x24D3;&#x24D4;&#x24D5;&#x24D6;&#x24D7;&#x24D8;&#x24D9;&#x24DA;&#x24DB;&#x24DC;&#x24DD;&#x24DE;&#x24DF;&#x24E0;&#x24E1;&#x24E2;&#x24E3;&#x24E4;&#x24E5;&#x24E6;&#x24E7;&#x24E8;&#x24E9;&#xFF41;&#xFF42;&#xFF43;&#xFF44;&#xFF45;&#xFF46;&#xFF47;&#xFF48;&#xFF49;&#xFF4A;&#xFF4B;&#xFF4C;&#xFF4D;&#xFF4E;&#xFF4F;&#xFF50;&#xFF51;&#xFF52;&#xFF53;&#xFF54;&#xFF55;&#xFF56;&#xFF57;&#xFF58;&#xFF59;&#xFF5A;&#x10428;&#x10429;&#x1042A;&#x1042B;&#x1042C;&#x1042D;&#x1042E;&#x1042F;&#x10430;&#x10431;&#x10432;&#x10433;&#x10434;&#x10435;&#x10436;&#x10437;&#x10438;&#x10439;&#x1043A;&#x1043B;&#x1043C;&#x1043D;&#x1043E;&#x1043F;&#x10440;&#x10441;&#x10442;&#x10443;&#x10444;&#x10445;&#x10446;&#x10447;&#x10448;&#x10449;&#x1044A;&#x1044B;&#x1044C;&#x1044D;'"/>
+ <xsl:variable name="xsltsl-str-upper" select="'&#x0041;&#x0042;&#x0043;&#x0044;&#x0045;&#x0046;&#x0047;&#x0048;&#x0049;&#x004A;&#x004B;&#x004C;&#x004D;&#x004E;&#x004F;&#x0050;&#x0051;&#x0052;&#x0053;&#x0054;&#x0055;&#x0056;&#x0057;&#x0058;&#x0059;&#x005A;&#x039C;&#x00C0;&#x00C1;&#x00C2;&#x00C3;&#x00C4;&#x00C5;&#x00C6;&#x00C7;&#x00C8;&#x00C9;&#x00CA;&#x00CB;&#x00CC;&#x00CD;&#x00CE;&#x00CF;&#x00D0;&#x00D1;&#x00D2;&#x00D3;&#x00D4;&#x00D5;&#x00D6;&#x00D8;&#x00D9;&#x00DA;&#x00DB;&#x00DC;&#x00DD;&#x00DE;&#x0178;&#x0100;&#x0102;&#x0104;&#x0106;&#x0108;&#x010A;&#x010C;&#x010E;&#x0110;&#x0112;&#x0114;&#x0116;&#x0118;&#x011A;&#x011C;&#x011E;&#x0120;&#x0122;&#x0124;&#x0126;&#x0128;&#x012A;&#x012C;&#x012E;&#x0049;&#x0132;&#x0134;&#x0136;&#x0139;&#x013B;&#x013D;&#x013F;&#x0141;&#x0143;&#x0145;&#x0147;&#x014A;&#x014C;&#x014E;&#x0150;&#x0152;&#x0154;&#x0156;&#x0158;&#x015A;&#x015C;&#x015E;&#x0160;&#x0162;&#x0164;&#x0166;&#x0168;&#x016A;&#x016C;&#x016E;&#x0170;&#x0172;&#x0174;&#x0176;&#x0179;&#x017B;&#x017D;&#x0053;&#x0182;&#x0184;&#x0187;&#x018B;&#x0191;&#x01F6;&#x0198;&#x01A0;&#x01A2;&#x01A4;&#x01A7;&#x01AC;&#x01AF;&#x01B3;&#x01B5;&#x01B8;&#x01BC;&#x01F7;&#x01C4;&#x01C4;&#x01C7;&#x01C7;&#x01CA;&#x01CA;&#x01CD;&#x01CF;&#x01D1;&#x01D3;&#x01D5;&#x01D7;&#x01D9;&#x01DB;&#x018E;&#x01DE;&#x01E0;&#x01E2;&#x01E4;&#x01E6;&#x01E8;&#x01EA;&#x01EC;&#x01EE;&#x01F1;&#x01F1;&#x01F4;&#x01F8;&#x01FA;&#x01FC;&#x01FE;&#x0200;&#x0202;&#x0204;&#x0206;&#x0208;&#x020A;&#x020C;&#x020E;&#x0210;&#x0212;&#x0214;&#x0216;&#x0218;&#x021A;&#x021C;&#x021E;&#x0222;&#x0224;&#x0226;&#x0228;&#x022A;&#x022C;&#x022E;&#x0230;&#x0232;&#x0181;&#x0186;&#x0189;&#x018A;&#x018F;&#x0190;&#x0193;&#x0194;&#x0197;&#x0196;&#x019C;&#x019D;&#x019F;&#x01A6;&#x01A9;&#x01AE;&#x01B1;&#x01B2;&#x01B7;&#x0399;&#x0386;&#x0388;&#x0389;&#x038A;&#x0391;&#x0392;&#x0393;&#x0394;&#x0395;&#x0396;&#x0397;&#x0398;&#x0399;&#x039A;&#x039B;&#x039C;&#x039D;&#x039E;&#x039F;&#x03A0;&#x03A1;&#x03A3;&#x03A3;&#x03A4;&#x03A5;&#x03A6;&#x03A7;&#x03A8;&#x03A9;&#x03AA;&#x03AB;&#x038C;&#x038E;&#x038F;&#x0392;&#x0398;&#x03A6;&#x03A0;&#x03DA;&#x03DC;&#x03DE;&#x03E0;&#x03E2;&#x03E4;&#x03E6;&#x03E8;&#x03EA;&#x03EC;&#x03EE;&#x039A;&#x03A1;&#x03A3;&#x0395;&#x0410;&#x0411;&#x0412;&#x0413;&#x0414;&#x0415;&#x0416;&#x0417;&#x0418;&#x0419;&#x041A;&#x041B;&#x041C;&#x041D;&#x041E;&#x041F;&#x0420;&#x0421;&#x0422;&#x0423;&#x0424;&#x0425;&#x0426;&#x0427;&#x0428;&#x0429;&#x042A;&#x042B;&#x042C;&#x042D;&#x042E;&#x042F;&#x0400;&#x0401;&#x0402;&#x0403;&#x0404;&#x0405;&#x0406;&#x0407;&#x0408;&#x0409;&#x040A;&#x040B;&#x040C;&#x040D;&#x040E;&#x040F;&#x0460;&#x0462;&#x0464;&#x0466;&#x0468;&#x046A;&#x046C;&#x046E;&#x0470;&#x0472;&#x0474;&#x0476;&#x0478;&#x047A;&#x047C;&#x047E;&#x0480;&#x048C;&#x048E;&#x0490;&#x0492;&#x0494;&#x0496;&#x0498;&#x049A;&#x049C;&#x049E;&#x04A0;&#x04A2;&#x04A4;&#x04A6;&#x04A8;&#x04AA;&#x04AC;&#x04AE;&#x04B0;&#x04B2;&#x04B4;&#x04B6;&#x04B8;&#x04BA;&#x04BC;&#x04BE;&#x04C1;&#x04C3;&#x04C7;&#x04CB;&#x04D0;&#x04D2;&#x04D4;&#x04D6;&#x04D8;&#x04DA;&#x04DC;&#x04DE;&#x04E0;&#x04E2;&#x04E4;&#x04E6;&#x04E8;&#x04EA;&#x04EC;&#x04EE;&#x04F0;&#x04F2;&#x04F4;&#x04F8;&#x0531;&#x0532;&#x0533;&#x0534;&#x0535;&#x0536;&#x0537;&#x0538;&#x0539;&#x053A;&#x053B;&#x053C;&#x053D;&#x053E;&#x053F;&#x0540;&#x0541;&#x0542;&#x0543;&#x0544;&#x0545;&#x0546;&#x0547;&#x0548;&#x0549;&#x054A;&#x054B;&#x054C;&#x054D;&#x054E;&#x054F;&#x0550;&#x0551;&#x0552;&#x0553;&#x0554;&#x0555;&#x0556;&#x1E00;&#x1E02;&#x1E04;&#x1E06;&#x1E08;&#x1E0A;&#x1E0C;&#x1E0E;&#x1E10;&#x1E12;&#x1E14;&#x1E16;&#x1E18;&#x1E1A;&#x1E1C;&#x1E1E;&#x1E20;&#x1E22;&#x1E24;&#x1E26;&#x1E28;&#x1E2A;&#x1E2C;&#x1E2E;&#x1E30;&#x1E32;&#x1E34;&#x1E36;&#x1E38;&#x1E3A;&#x1E3C;&#x1E3E;&#x1E40;&#x1E42;&#x1E44;&#x1E46;&#x1E48;&#x1E4A;&#x1E4C;&#x1E4E;&#x1E50;&#x1E52;&#x1E54;&#x1E56;&#x1E58;&#x1E5A;&#x1E5C;&#x1E5E;&#x1E60;&#x1E62;&#x1E64;&#x1E66;&#x1E68;&#x1E6A;&#x1E6C;&#x1E6E;&#x1E70;&#x1E72;&#x1E74;&#x1E76;&#x1E78;&#x1E7A;&#x1E7C;&#x1E7E;&#x1E80;&#x1E82;&#x1E84;&#x1E86;&#x1E88;&#x1E8A;&#x1E8C;&#x1E8E;&#x1E90;&#x1E92;&#x1E94;&#x1E60;&#x1EA0;&#x1EA2;&#x1EA4;&#x1EA6;&#x1EA8;&#x1EAA;&#x1EAC;&#x1EAE;&#x1EB0;&#x1EB2;&#x1EB4;&#x1EB6;&#x1EB8;&#x1EBA;&#x1EBC;&#x1EBE;&#x1EC0;&#x1EC2;&#x1EC4;&#x1EC6;&#x1EC8;&#x1ECA;&#x1ECC;&#x1ECE;&#x1ED0;&#x1ED2;&#x1ED4;&#x1ED6;&#x1ED8;&#x1EDA;&#x1EDC;&#x1EDE;&#x1EE0;&#x1EE2;&#x1EE4;&#x1EE6;&#x1EE8;&#x1EEA;&#x1EEC;&#x1EEE;&#x1EF0;&#x1EF2;&#x1EF4;&#x1EF6;&#x1EF8;&#x1F08;&#x1F09;&#x1F0A;&#x1F0B;&#x1F0C;&#x1F0D;&#x1F0E;&#x1F0F;&#x1F18;&#x1F19;&#x1F1A;&#x1F1B;&#x1F1C;&#x1F1D;&#x1F28;&#x1F29;&#x1F2A;&#x1F2B;&#x1F2C;&#x1F2D;&#x1F2E;&#x1F2F;&#x1F38;&#x1F39;&#x1F3A;&#x1F3B;&#x1F3C;&#x1F3D;&#x1F3E;&#x1F3F;&#x1F48;&#x1F49;&#x1F4A;&#x1F4B;&#x1F4C;&#x1F4D;&#x1F59;&#x1F5B;&#x1F5D;&#x1F5F;&#x1F68;&#x1F69;&#x1F6A;&#x1F6B;&#x1F6C;&#x1F6D;&#x1F6E;&#x1F6F;&#x1FBA;&#x1FBB;&#x1FC8;&#x1FC9;&#x1FCA;&#x1FCB;&#x1FDA;&#x1FDB;&#x1FF8;&#x1FF9;&#x1FEA;&#x1FEB;&#x1FFA;&#x1FFB;&#x1F88;&#x1F89;&#x1F8A;&#x1F8B;&#x1F8C;&#x1F8D;&#x1F8E;&#x1F8F;&#x1F98;&#x1F99;&#x1F9A;&#x1F9B;&#x1F9C;&#x1F9D;&#x1F9E;&#x1F9F;&#x1FA8;&#x1FA9;&#x1FAA;&#x1FAB;&#x1FAC;&#x1FAD;&#x1FAE;&#x1FAF;&#x1FB8;&#x1FB9;&#x1FBC;&#x0399;&#x1FCC;&#x1FD8;&#x1FD9;&#x1FE8;&#x1FE9;&#x1FEC;&#x1FFC;&#x2160;&#x2161;&#x2162;&#x2163;&#x2164;&#x2165;&#x2166;&#x2167;&#x2168;&#x2169;&#x216A;&#x216B;&#x216C;&#x216D;&#x216E;&#x216F;&#x24B6;&#x24B7;&#x24B8;&#x24B9;&#x24BA;&#x24BB;&#x24BC;&#x24BD;&#x24BE;&#x24BF;&#x24C0;&#x24C1;&#x24C2;&#x24C3;&#x24C4;&#x24C5;&#x24C6;&#x24C7;&#x24C8;&#x24C9;&#x24CA;&#x24CB;&#x24CC;&#x24CD;&#x24CE;&#x24CF;&#xFF21;&#xFF22;&#xFF23;&#xFF24;&#xFF25;&#xFF26;&#xFF27;&#xFF28;&#xFF29;&#xFF2A;&#xFF2B;&#xFF2C;&#xFF2D;&#xFF2E;&#xFF2F;&#xFF30;&#xFF31;&#xFF32;&#xFF33;&#xFF34;&#xFF35;&#xFF36;&#xFF37;&#xFF38;&#xFF39;&#xFF3A;&#x10400;&#x10401;&#x10402;&#x10403;&#x10404;&#x10405;&#x10406;&#x10407;&#x10408;&#x10409;&#x1040A;&#x1040B;&#x1040C;&#x1040D;&#x1040E;&#x1040F;&#x10410;&#x10411;&#x10412;&#x10413;&#x10414;&#x10415;&#x10416;&#x10417;&#x10418;&#x10419;&#x1041A;&#x1041B;&#x1041C;&#x1041D;&#x1041E;&#x1041F;&#x10420;&#x10421;&#x10422;&#x10423;&#x10424;&#x10425;'"/>
+ <xsl:variable name="xsltsl-str-digits" select="'0123456789'"/>
+ <!-- space (#x20) characters, carriage returns, line feeds, or tabs. -->
+ <xsl:variable name="xsltsl-str-ws" select="'&#x20;&#x9;&#xD;&#xA;'"/>
+
+ <doc:template name="str:to-upper" xmlns="">
+ <refpurpose>Make string uppercase</refpurpose>
+
+ <refdescription>
+ <para>Converts all lowercase letters to uppercase.</para>
+ </refdescription>
+
+ <refparameter>
+ <variablelist>
+ <varlistentry>
+ <term>text</term>
+ <listitem>
+ <para>The string to be converted</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refparameter>
+
+ <refreturn>
+ <para>Returns string with all uppercase letters.</para>
+ </refreturn>
+ </doc:template>
+
+ <xsl:template name="str:to-upper">
+ <xsl:param name="text"/>
+
+ <!-- Below exception is extracted from unicode's SpecialCasing.txt
+ file. It's the german lowercase "eszett" (the thing looking
+ like a greek beta) that's to become "SS" in uppercase (note:
+ that are *two* characters, that's why it doesn't fit in the
+ list of upper/lowercase characters). There are more
+ characters in that file (103, excluding the locale-specific
+ ones), but they seemed to be much less used to me and they
+ add up to a hellish long stylesheet.... - Reinout -->
+ <xsl:param name="modified-text">
+ <xsl:call-template name="str:subst">
+ <xsl:with-param name="text">
+ <xsl:value-of select="$text"/>
+ </xsl:with-param>
+ <xsl:with-param name="replace">
+ <xsl:text>&#x00DF;</xsl:text>
+ </xsl:with-param>
+ <xsl:with-param name="with">
+ <xsl:text>&#x0053;</xsl:text>
+ <xsl:text>&#x0053;</xsl:text>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:param>
+
+ <xsl:value-of select="translate($modified-text, $xsltsl-str-lower, $xsltsl-str-upper)"/>
+ </xsl:template>
+
+ <doc:template name="str:to-lower" xmlns="">
+ <refpurpose>Make string lowercase</refpurpose>
+
+ <refdescription>
+ <para>Converts all uppercase letters to lowercase.</para>
+ </refdescription>
+
+ <refparameter>
+ <variablelist>
+ <varlistentry>
+ <term>text</term>
+ <listitem>
+ <para>The string to be converted</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refparameter>
+
+ <refreturn>
+ <para>Returns string with all lowercase letters.</para>
+ </refreturn>
+ </doc:template>
+
+ <xsl:template name="str:to-lower">
+ <xsl:param name="text"/>
+
+ <xsl:value-of select="translate($text, $xsltsl-str-upper, $xsltsl-str-lower)"/>
+ </xsl:template>
+
+ <doc:template name="str:capitalise" xmlns="">
+ <refpurpose>Capitalise string</refpurpose>
+
+ <refdescription>
+ <para>Converts first character of string to an uppercase letter. All remaining characters are converted to lowercase.</para>
+ </refdescription>
+
+ <refparameter>
+ <variablelist>
+ <varlistentry>
+ <term>text</term>
+ <listitem>
+ <para>The string to be capitalised</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>all</term>
+ <listitem>
+ <para>Boolean controlling whether all words in the string are capitalised.</para>
+ <para>Default is true.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refparameter>
+
+ <refreturn>
+ <para>Returns string with first character uppcase and all remaining characters lowercase.</para>
+ </refreturn>
+ </doc:template>
+
+ <xsl:template name="str:capitalise">
+ <xsl:param name="text"/>
+ <xsl:param name="all" select="true()"/>
+
+ <xsl:choose>
+ <xsl:when test="$all and (contains($text, ' ') or contains($text, ' ') or contains($text, '&#10;'))">
+ <xsl:variable name="firstword">
+ <xsl:call-template name="str:substring-before-first">
+ <xsl:with-param name="text" select="$text"/>
+ <xsl:with-param name="chars" select="$xsltsl-str-ws"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:call-template name="str:capitalise">
+ <xsl:with-param name="text">
+ <xsl:value-of select="$firstword"/>
+ </xsl:with-param>
+ <xsl:with-param name="all" select="false()"/>
+ </xsl:call-template>
+ <xsl:value-of select="substring($text, string-length($firstword) + 1, 1)"/>
+ <xsl:call-template name="str:capitalise">
+ <xsl:with-param name="text">
+ <xsl:value-of select="substring($text, string-length($firstword) + 2)"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:when>
+
+ <xsl:otherwise>
+ <xsl:call-template name="str:to-upper">
+ <xsl:with-param name="text" select="substring($text, 1, 1)"/>
+ </xsl:call-template>
+ <xsl:call-template name="str:to-lower">
+ <xsl:with-param name="text" select="substring($text, 2)"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <doc:template name="str:to-camelcase" xmlns="">
+ <refpurpose>Convert a string to one camelcase word</refpurpose>
+
+ <refdescription>
+ <para>Converts a string to one lowerCamelCase or UpperCamelCase
+ word, depending on the setting of the "upper"
+ parameter. UpperCamelCase is also called MixedCase while
+ lowerCamelCase is also called just camelCase. The template
+ removes any spaces, tabs and slashes, but doesn't deal with
+ other punctuation. It's purpose is to convert strings like
+ "hollow timber flush door" to a term suitable as identifier or
+ XML tag like "HollowTimberFlushDoor".
+ </para>
+ </refdescription>
+
+ <refparameter>
+ <variablelist>
+ <varlistentry>
+ <term>text</term>
+ <listitem>
+ <para>The string to be capitalised</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>upper</term>
+ <listitem>
+ <para>Boolean controlling whether the string becomes an
+ UpperCamelCase word or a lowerCamelCase word.</para>
+ <para>Default is true.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refparameter>
+
+ <refreturn>
+ <para>Returns string with first character uppcase and all remaining characters lowercase.</para>
+ </refreturn>
+ </doc:template>
+
+ <xsl:template name="str:to-camelcase">
+ <xsl:param name="text"/>
+ <xsl:param name="upper" select="true()"/>
+ <!-- First change all 'strange' characters to spaces -->
+ <xsl:param name="string-with-only-spaces">
+ <xsl:value-of select="translate($text,concat($xsltsl-str-ws,'/'),' ')"/>
+ </xsl:param>
+ <!-- Then process them -->
+ <xsl:param name="before-space-removal">
+ <xsl:variable name="firstword">
+ <xsl:call-template name="str:substring-before-first">
+ <xsl:with-param name="text" select="$string-with-only-spaces"/>
+ <xsl:with-param name="chars" select="$xsltsl-str-ws"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$upper">
+ <xsl:call-template name="str:to-upper">
+ <xsl:with-param name="text" select="substring($firstword, 1, 1)"/>
+ </xsl:call-template>
+ <xsl:call-template name="str:to-lower">
+ <xsl:with-param name="text" select="substring($firstword, 2)"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="str:to-lower">
+ <xsl:with-param name="text" select="$firstword"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+
+ <xsl:call-template name="str:capitalise">
+ <xsl:with-param name="text">
+ <xsl:value-of select="substring($string-with-only-spaces, string-length($firstword) + 2)"/>
+ </xsl:with-param>
+ <xsl:with-param name="all" select="true()"/>
+ </xsl:call-template>
+ </xsl:param>
+ <xsl:value-of select="translate($before-space-removal,' ','')"/>
+ </xsl:template>
+
+ <doc:template name="str:substring-before-first" xmlns="">
+ <refpurpose>String extraction</refpurpose>
+
+ <refdescription>
+ <para>Extracts the portion of string 'text' which occurs before any of the characters in string 'chars'.</para>
+ </refdescription>
+
+ <refparameter>
+ <variablelist>
+ <varlistentry>
+ <term>text</term>
+ <listitem>
+ <para>The string from which to extract a substring.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>chars</term>
+ <listitem>
+ <para>The string containing characters to find.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refparameter>
+
+ <refreturn>
+ <para>Returns string.</para>
+ </refreturn>
+ </doc:template>
+
+ <xsl:template name="str:substring-before-first">
+ <xsl:param name="text"/>
+ <xsl:param name="chars"/>
+
+ <xsl:choose>
+
+ <xsl:when test="string-length($text) = 0"/>
+
+ <xsl:when test="string-length($chars) = 0">
+ <xsl:value-of select="$text"/>
+ </xsl:when>
+
+ <xsl:when test="contains($text, substring($chars, 1, 1))">
+ <xsl:variable name="this" select="substring-before($text, substring($chars, 1, 1))"/>
+ <xsl:variable name="rest">
+ <xsl:call-template name="str:substring-before-first">
+ <xsl:with-param name="text" select="$text"/>
+ <xsl:with-param name="chars" select="substring($chars, 2)"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:choose>
+ <xsl:when test="string-length($this) &lt; string-length($rest)">
+ <xsl:value-of select="$this"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$rest"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+
+ <xsl:otherwise>
+ <xsl:call-template name="str:substring-before-first">
+ <xsl:with-param name="text" select="$text"/>
+ <xsl:with-param name="chars" select="substring($chars, 2)"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+
+ </xsl:choose>
+ </xsl:template>
+
+ <doc:template name="str:substring-after-last" xmlns="">
+ <refpurpose>String extraction</refpurpose>
+
+ <refdescription>
+ <para>Extracts the portion of string 'text' which occurs after the last of the character in string 'chars'.</para>
+ </refdescription>
+
+ <refparameter>
+ <variablelist>
+ <varlistentry>
+ <term>text</term>
+ <listitem>
+ <para>The string from which to extract a substring.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>chars</term>
+ <listitem>
+ <para>The string containing characters to find.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refparameter>
+
+ <refreturn>
+ <para>Returns string.</para>
+ </refreturn>
+ </doc:template>
+
+ <xsl:template name="str:substring-after-last">
+ <xsl:param name="text"/>
+ <xsl:param name="chars"/>
+
+ <xsl:choose>
+
+ <xsl:when test="contains($text, $chars)">
+ <xsl:variable name="last" select="substring-after($text, $chars)"/>
+
+ <xsl:choose>
+ <xsl:when test="contains($last, $chars)">
+ <xsl:call-template name="str:substring-after-last">
+ <xsl:with-param name="text" select="$last"/>
+ <xsl:with-param name="chars" select="$chars"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$last"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+
+ <xsl:otherwise>
+ <xsl:value-of select="$text"/>
+ </xsl:otherwise>
+
+ </xsl:choose>
+ </xsl:template>
+
+ <doc:template name="str:substring-before-last" xmlns="">
+ <refpurpose>String extraction</refpurpose>
+
+ <refdescription>
+ <para>Extracts the portion of string 'text' which occurs before the first character of the last occurance of string 'chars'.</para>
+ </refdescription>
+
+ <refparameter>
+ <variablelist>
+ <varlistentry>
+ <term>text</term>
+ <listitem>
+ <para>The string from which to extract a substring.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>chars</term>
+ <listitem>
+ <para>The string containing characters to find.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refparameter>
+
+ <refreturn>
+ <para>Returns string.</para>
+ </refreturn>
+ </doc:template>
+
+ <xsl:template name="str:substring-before-last">
+ <xsl:param name="text"/>
+ <xsl:param name="chars"/>
+
+ <xsl:choose>
+
+ <xsl:when test="string-length($text) = 0"/>
+
+ <xsl:when test="string-length($chars) = 0">
+ <xsl:value-of select="$text"/>
+ </xsl:when>
+
+ <xsl:when test="contains($text, $chars)">
+ <xsl:call-template name="str:substring-before-last-aux">
+ <xsl:with-param name="text" select="$text"/>
+ <xsl:with-param name="chars" select="$chars"/>
+ </xsl:call-template>
+ </xsl:when>
+
+ <xsl:otherwise>
+ <xsl:value-of select="$text"/>
+ </xsl:otherwise>
+
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="str:substring-before-last-aux">
+ <xsl:param name="text"/>
+ <xsl:param name="chars"/>
+
+ <xsl:choose>
+ <xsl:when test="string-length($text) = 0"/>
+
+ <xsl:when test="contains($text, $chars)">
+ <xsl:variable name="after">
+ <xsl:call-template name="str:substring-before-last-aux">
+ <xsl:with-param name="text" select="substring-after($text, $chars)"/>
+ <xsl:with-param name="chars" select="$chars"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:value-of select="substring-before($text, $chars)"/>
+ <xsl:if test="string-length($after) &gt; 0">
+ <xsl:value-of select="$chars"/>
+ <xsl:copy-of select="$after"/>
+ </xsl:if>
+ </xsl:when>
+
+ <xsl:otherwise/>
+ </xsl:choose>
+ </xsl:template>
+
+ <doc:template name="str:subst" xmlns="">
+ <refpurpose>String substitution</refpurpose>
+
+ <refdescription>
+ <para>Substitute 'replace' for 'with' in string 'text'.</para>
+ </refdescription>
+
+ <refparameter>
+ <variablelist>
+ <varlistentry>
+ <term>text</term>
+ <listitem>
+ <para>The string upon which to perform substitution.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>replace</term>
+ <listitem>
+ <para>The string to substitute.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>with</term>
+ <listitem>
+ <para>The string to be substituted.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>disable-output-escaping</term>
+ <listitem>
+ <para>A value of <literal>yes</literal> indicates that the result should have output escaping disabled. Any other value allows normal escaping of text values. The default is to enable output escaping.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refparameter>
+
+ <refreturn>
+ <para>Returns string.</para>
+ </refreturn>
+ </doc:template>
+
+ <xsl:template name="str:subst">
+ <xsl:param name="text"/>
+ <xsl:param name="replace"/>
+ <xsl:param name="with"/>
+ <xsl:param name='disable-output-escaping'>no</xsl:param>
+
+ <xsl:choose>
+ <xsl:when test="string-length($replace) = 0 and $disable-output-escaping = 'yes'">
+ <xsl:value-of select="$text" disable-output-escaping='yes'/>
+ </xsl:when>
+ <xsl:when test="string-length($replace) = 0">
+ <xsl:value-of select="$text"/>
+ </xsl:when>
+ <xsl:when test="contains($text, $replace)">
+
+ <xsl:variable name="before" select="substring-before($text, $replace)"/>
+ <xsl:variable name="after" select="substring-after($text, $replace)"/>
+
+ <xsl:choose>
+ <xsl:when test='$disable-output-escaping = "yes"'>
+ <xsl:value-of select="$before" disable-output-escaping="yes"/>
+ <xsl:value-of select="$with" disable-output-escaping="yes"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$before"/>
+ <xsl:value-of select="$with"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:call-template name="str:subst">
+ <xsl:with-param name="text" select="$after"/>
+ <xsl:with-param name="replace" select="$replace"/>
+ <xsl:with-param name="with" select="$with"/>
+ <xsl:with-param name="disable-output-escaping" select="$disable-output-escaping"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test='$disable-output-escaping = "yes"'>
+ <xsl:value-of select="$text" disable-output-escaping="yes"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$text"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <doc:template name="str:count-substring" xmlns="">
+ <refpurpose>Count Substrings</refpurpose>
+
+ <refdescription>
+ <para>Counts the number of times a substring occurs in a string. This can also counts the number of times a character occurs in a string, since a character is simply a string of length 1.</para>
+ </refdescription>
+
+ <example>
+ <title>Counting Lines</title>
+ <programlisting><![CDATA[
+<xsl:call-template name="str:count-substring">
+ <xsl:with-param name="text" select="$mytext"/>
+ <xsl:with-param name="chars" select="'&#x0a;'"/>
+</xsl:call-template>
+]]></programlisting>
+ </example>
+
+ <refparameter>
+ <variablelist>
+ <varlistentry>
+ <term>text</term>
+ <listitem>
+ <para>The source string.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>chars</term>
+ <listitem>
+ <para>The substring to count.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refparameter>
+
+ <refreturn>
+ <para>Returns a non-negative integer value.</para>
+ </refreturn>
+ </doc:template>
+
+ <xsl:template name="str:count-substring">
+ <xsl:param name="text"/>
+ <xsl:param name="chars"/>
+
+ <xsl:choose>
+ <xsl:when test="string-length($text) = 0 or string-length($chars) = 0">
+ <xsl:text>0</xsl:text>
+ </xsl:when>
+ <xsl:when test="contains($text, $chars)">
+ <xsl:variable name="remaining">
+ <xsl:call-template name="str:count-substring">
+ <xsl:with-param name="text" select="substring-after($text, $chars)"/>
+ <xsl:with-param name="chars" select="$chars"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:value-of select="$remaining + 1"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>0</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <doc:template name="str:substring-after-at" xmlns="">
+ <refpurpose>String extraction</refpurpose>
+ <refdescription>
+ <para>Extracts the portion of a 'char' delimited 'text' string "array" at a given 'position'.</para>
+ </refdescription>
+ <refparameter>
+ <variablelist>
+ <varlistentry>
+ <term>text</term>
+ <listitem>
+ <para>The string from which to extract a substring.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>chars</term>
+ <listitem>
+ <para>delimiters</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>position</term>
+ <listitem>
+ <para>position of the elements</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>all</term>
+ <listitem>
+ <para>If true all of the remaining string is returned, otherwise only the element at the given position is returned. Default: false().</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refparameter>
+ <refreturn>
+ <para>Returns string.</para>
+ </refreturn>
+ </doc:template>
+
+
+ <xsl:template name="str:substring-after-at">
+ <xsl:param name="text"/>
+ <xsl:param name="chars"/>
+ <xsl:param name="position"/>
+ <xsl:param name="all" select='false()'/>
+
+ <xsl:choose>
+ <xsl:when test='number($position) = 0 and $all'>
+ <xsl:value-of select='$text'/>
+ </xsl:when>
+ <xsl:when test='number($position) = 0 and not($chars)'>
+ <xsl:value-of select='$text'/>
+ </xsl:when>
+ <xsl:when test='number($position) = 0 and not(contains($text, $chars))'>
+ <xsl:value-of select='$text'/>
+ </xsl:when>
+ <xsl:when test='not(contains($text, $chars))'>
+ </xsl:when>
+ <xsl:when test="number($position) = 0">
+ <xsl:value-of select="substring-before($text, $chars)"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="str:substring-after-at">
+ <xsl:with-param name="text" select="substring-after($text, $chars)"/>
+ <xsl:with-param name="chars" select="$chars"/>
+ <xsl:with-param name="all" select="$all"/>
+ <xsl:with-param name="position" select="$position - 1"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <doc:template name="str:substring-before-at" xmlns="">
+ <refpurpose>String extraction</refpurpose>
+ <refdescription>
+ <para>Extracts the portion of a 'char' delimited 'text' string "array" at a given 'position' </para>
+ </refdescription>
+ <refparameter>
+ <variablelist>
+ <varlistentry>
+ <term>text</term>
+ <listitem>
+ <para>The string from which to extract a substring.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>chars</term>
+ <listitem>
+ <para>delimiters</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>position</term>
+ <listitem>
+ <para>position of the elements</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refparameter>
+ <refreturn>
+ <para>Returns string.</para>
+ </refreturn>
+ </doc:template>
+
+ <xsl:template name="str:substring-before-at">
+ <xsl:param name="text"/>
+ <xsl:param name="chars"/>
+ <xsl:param name="position"/>
+
+ <xsl:choose>
+ <xsl:when test="$position &lt;= 0"/>
+ <xsl:when test="not(contains($text, $chars))"/>
+ <xsl:otherwise>
+ <xsl:value-of select='substring-before($text, $chars)'/>
+ <xsl:value-of select='$chars'/>
+
+ <xsl:call-template name="str:substring-before-at">
+ <xsl:with-param name="text" select="substring-after($text, $chars)"/>
+ <xsl:with-param name="position" select="$position - 1"/>
+ <xsl:with-param name="chars" select="$chars"/>
+ </xsl:call-template>
+
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <doc:template name="str:insert-at" xmlns="">
+ <refpurpose>String insertion</refpurpose>
+ <refdescription>
+ <para>Insert 'chars' into "text' at any given "position'</para>
+ </refdescription>
+ <refparameter>
+ <variablelist>
+ <varlistentry>
+ <term>text</term>
+ <listitem>
+ <para>The string upon which to perform insertion</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>position</term>
+ <listitem>
+ <para>the position where insertion will be performed</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>with</term>
+ <listitem>
+ <para>The string to be inserted</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refparameter>
+ <refreturn>
+ <para>Returns string.</para>
+ </refreturn>
+ </doc:template>
+
+ <xsl:template name="str:insert-at">
+ <xsl:param name="text"/>
+ <xsl:param name="position"/>
+ <xsl:param name="chars"/>
+
+ <xsl:variable name="firstpart" select="substring($text, 0, $position)"/>
+ <xsl:variable name="secondpart" select="substring($text, $position, string-length($text))"/>
+
+ <xsl:value-of select="concat($firstpart, $chars, $secondpart)"/>
+ </xsl:template>
+
+
+ <doc:template name="str:backward" xmlns="">
+ <refpurpose>String reversal</refpurpose>
+
+ <refdescription>
+ <para>Reverse the content of a given string</para>
+ </refdescription>
+
+ <refparameter>
+ <variablelist>
+ <varlistentry>
+ <term>text</term>
+ <listitem>
+ <para>The string to be reversed</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refparameter>
+
+ <refreturn>
+ <para>Returns string.</para>
+ </refreturn>
+ </doc:template>
+
+ <xsl:template name="str:backward">
+ <xsl:param name="text"/>
+ <xsl:variable name="mirror">
+ <xsl:call-template name="str:build-mirror">
+ <xsl:with-param name="text" select="$text"/>
+ <xsl:with-param name="position" select="string-length($text)"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:value-of select="substring($mirror, string-length($text) + 1, string-length($text))"/>
+ </xsl:template>
+
+ <xsl:template name="str:build-mirror">
+ <xsl:param name="text"/>
+ <xsl:param name="position"/>
+
+ <xsl:choose>
+ <xsl:when test="$position &gt; 0">
+ <xsl:call-template name="str:build-mirror">
+ <xsl:with-param name="text" select="concat($text, substring($text, $position, 1))"/>
+ <xsl:with-param name="position" select="$position - 1"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$text"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <doc:template name="str:justify" xmlns="">
+ <refpurpose>Format a string</refpurpose>
+
+ <refdescription>
+ <para>Inserts newlines and spaces into a string to format it as a block of text.</para>
+ </refdescription>
+
+ <refparameter>
+ <variablelist>
+ <varlistentry>
+ <term>text</term>
+ <listitem>
+ <para>String to be formatted.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>max</term>
+ <listitem>
+ <para>Maximum line length.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>indent</term>
+ <listitem>
+ <para>Number of spaces to insert at the beginning of each line.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>justify</term>
+ <listitem>
+ <para>Justify left, right or both. Not currently implemented (fixed at "left").</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refparameter>
+
+ <refreturn>
+ <para>Formatted block of text.</para>
+ </refreturn>
+ </doc:template>
+
+ <xsl:template name='str:justify'>
+ <xsl:param name='text'/>
+ <xsl:param name='max' select='"80"'/>
+ <xsl:param name='indent' select='"0"'/>
+ <xsl:param name='justify' select='"left"'/>
+
+ <xsl:choose>
+ <xsl:when test='string-length($text) = 0 or $max &lt;= 0'/>
+
+ <xsl:when test='string-length($text) > $max and contains($text, " ") and string-length(substring-before($text, " ")) > $max'>
+ <xsl:call-template name='str:generate-string'>
+ <xsl:with-param name='text' select='" "'/>
+ <xsl:with-param name='count' select='$indent'/>
+ </xsl:call-template>
+ <xsl:value-of select='substring-before($text, " ")'/>
+ <xsl:text>
+</xsl:text>
+ <xsl:call-template name='str:justify'>
+ <xsl:with-param name='text' select='substring-after($text, " ")'/>
+ <xsl:with-param name='max' select='$max'/>
+ <xsl:with-param name='indent' select='$indent'/>
+ <xsl:with-param name='justify' select='$justify'/>
+ </xsl:call-template>
+ </xsl:when>
+
+ <xsl:when test='string-length($text) > $max and contains($text, " ")'>
+ <xsl:variable name='first'>
+ <xsl:call-template name='str:substring-before-last'>
+ <xsl:with-param name='text' select='substring($text, 1, $max)'/>
+ <xsl:with-param name='chars' select='" "'/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:call-template name='str:generate-string'>
+ <xsl:with-param name='text' select='" "'/>
+ <xsl:with-param name='count' select='$indent'/>
+ </xsl:call-template>
+ <xsl:value-of select='$first'/>
+ <xsl:text>
+</xsl:text>
+ <xsl:call-template name='str:justify'>
+ <xsl:with-param name='text' select='substring($text, string-length($first) + 2)'/>
+ <xsl:with-param name='max' select='$max'/>
+ <xsl:with-param name='indent' select='$indent'/>
+ <xsl:with-param name='justify' select='$justify'/>
+ </xsl:call-template>
+ </xsl:when>
+
+ <xsl:otherwise>
+ <xsl:call-template name='str:generate-string'>
+ <xsl:with-param name='text' select='" "'/>
+ <xsl:with-param name='count' select='$indent'/>
+ </xsl:call-template>
+ <xsl:value-of select='$text'/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <doc:template name="str:character-first" xmlns="">
+ <refpurpose>Find first occurring character in a string</refpurpose>
+
+ <refdescription>
+ <para>Finds which of the given characters occurs first in a string.</para>
+ </refdescription>
+
+ <refparameter>
+ <variablelist>
+ <varlistentry>
+ <term>text</term>
+ <listitem>
+ <para>The source string.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>chars</term>
+ <listitem>
+ <para>The characters to search for.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refparameter>
+ </doc:template>
+
+ <xsl:template name="str:character-first">
+ <xsl:param name="text"/>
+ <xsl:param name="chars"/>
+
+ <xsl:choose>
+ <xsl:when test="string-length($text) = 0 or string-length($chars) = 0"/>
+
+ <xsl:when test="contains($text, substring($chars, 1, 1))">
+ <xsl:variable name="next-character">
+ <xsl:call-template name="str:character-first">
+ <xsl:with-param name="text" select="$text"/>
+ <xsl:with-param name="chars" select="substring($chars, 2)"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:choose>
+ <xsl:when test="string-length($next-character)">
+ <xsl:variable name="first-character-position" select="string-length(substring-before($text, substring($chars, 1, 1)))"/>
+ <xsl:variable name="next-character-position" select="string-length(substring-before($text, $next-character))"/>
+
+ <xsl:choose>
+ <xsl:when test="$first-character-position &lt; $next-character-position">
+ <xsl:value-of select="substring($chars, 1, 1)"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$next-character"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="substring($chars, 1, 1)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="str:character-first">
+ <xsl:with-param name="text" select="$text"/>
+ <xsl:with-param name="chars" select="substring($chars, 2)"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <doc:template name="str:string-match" xmlns="">
+ <refpurpose>Match A String To A Pattern</refpurpose>
+
+ <refdescription>
+ <para>Performs globbing-style pattern matching on a string.</para>
+ </refdescription>
+
+ <example>
+ <title>Match Pattern</title>
+ <programlisting><![CDATA[
+<xsl:call-template name="str:string-match">
+ <xsl:with-param name="text" select="$mytext"/>
+ <xsl:with-param name="pattern" select="'abc*def?g'"/>
+</xsl:call-template>
+]]></programlisting>
+ </example>
+
+ <refparameter>
+ <variablelist>
+ <varlistentry>
+ <term>text</term>
+ <listitem>
+ <para>The source string.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>pattern</term>
+ <listitem>
+ <para>The pattern to match against. Certain characters have special meaning:</para>
+ <variablelist>
+ <varlistentry>
+ <term>*</term>
+ <listitem>
+ <para>Matches zero or more characters.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>?</term>
+ <listitem>
+ <para>Matches a single character.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>\</term>
+ <listitem>
+ <para>Character escape. The next character is taken as a literal character.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refparameter>
+
+ <refreturn>
+ <para>Returns "1" if the string matches the pattern, "0" otherwise.</para>
+ </refreturn>
+ </doc:template>
+
+ <xsl:template name="str:string-match">
+ <xsl:param name="text"/>
+ <xsl:param name="pattern"/>
+
+ <xsl:choose>
+ <xsl:when test="$pattern = '*'">
+ <!-- Special case: always matches -->
+ <xsl:text>1</xsl:text>
+ </xsl:when>
+ <xsl:when test="string-length($text) = 0 and string-length($pattern) = 0">
+ <xsl:text>1</xsl:text>
+ </xsl:when>
+ <xsl:when test="string-length($text) = 0 or string-length($pattern) = 0">
+ <xsl:text>0</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:variable name='before-special'>
+ <xsl:call-template name='str:substring-before-first'>
+ <xsl:with-param name='text' select='$pattern'/>
+ <xsl:with-param name='chars' select='"*?\"'/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name='special'>
+ <xsl:call-template name='str:character-first'>
+ <xsl:with-param name='text' select='$pattern'/>
+ <xsl:with-param name='chars' select='"*?\"'/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:variable name='new-text' select='substring($text, string-length($before-special) + 1)'/>
+ <xsl:variable name='new-pattern' select='substring($pattern, string-length($before-special) + 1)'/>
+
+ <xsl:choose>
+ <xsl:when test="not(starts-with($text, $before-special))">
+ <!-- Verbatim characters don't match -->
+ <xsl:text>0</xsl:text>
+ </xsl:when>
+
+ <xsl:when test="$special = '*' and string-length($new-pattern) = 1">
+ <xsl:text>1</xsl:text>
+ </xsl:when>
+ <xsl:when test="$special = '*'">
+ <xsl:call-template name='str:match-postfix'>
+ <xsl:with-param name='text' select='$new-text'/>
+ <xsl:with-param name='pattern' select='substring($new-pattern, 2)'/>
+ </xsl:call-template>
+ </xsl:when>
+
+ <xsl:when test="$special = '?'">
+ <xsl:call-template name="str:string-match">
+ <xsl:with-param name='text' select='substring($new-text, 2)'/>
+ <xsl:with-param name='pattern' select='substring($new-pattern, 2)'/>
+ </xsl:call-template>
+ </xsl:when>
+
+ <xsl:when test="$special = '\' and substring($new-text, 1, 1) = substring($new-pattern, 2, 1)">
+ <xsl:call-template name="str:string-match">
+ <xsl:with-param name='text' select='substring($new-text, 2)'/>
+ <xsl:with-param name='pattern' select='substring($new-pattern, 3)'/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="$special = '\' and substring($new-text, 1, 1) != substring($new-pattern, 2, 1)">
+ <xsl:text>0</xsl:text>
+ </xsl:when>
+
+ <xsl:otherwise>
+ <!-- There were no special characters in the pattern -->
+ <xsl:choose>
+ <xsl:when test='$text = $pattern'>
+ <xsl:text>1</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>0</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="str:match-postfix">
+ <xsl:param name="text"/>
+ <xsl:param name="pattern"/>
+
+ <xsl:variable name='result'>
+ <xsl:call-template name='str:string-match'>
+ <xsl:with-param name='text' select='$text'/>
+ <xsl:with-param name='pattern' select='$pattern'/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:choose>
+ <xsl:when test='$result = "1"'>
+ <xsl:value-of select='$result'/>
+ </xsl:when>
+ <xsl:when test='string-length($text) = 0'>
+ <xsl:text>0</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name='str:match-postfix'>
+ <xsl:with-param name='text' select='substring($text, 2)'/>
+ <xsl:with-param name='pattern' select='$pattern'/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+
+ </xsl:template>
+
+ <doc:template name="str:generate-string" xmlns="">
+ <refpurpose>Create A Repeating Sequence of Characters</refpurpose>
+
+ <refdescription>
+ <para>Repeats a string a given number of times.</para>
+ </refdescription>
+
+ <refparameter>
+ <variablelist>
+ <varlistentry>
+ <term>text</term>
+ <listitem>
+ <para>The string to repeat.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>count</term>
+ <listitem>
+ <para>The number of times to repeat the string.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refparameter>
+ </doc:template>
+
+ <xsl:template name="str:generate-string">
+ <xsl:param name="text"/>
+ <xsl:param name="count"/>
+
+ <xsl:choose>
+ <xsl:when test="string-length($text) = 0 or $count &lt;= 0"/>
+ <xsl:otherwise>
+ <xsl:value-of select="$text"/>
+ <xsl:call-template name="str:generate-string">
+ <xsl:with-param name="text" select="$text"/>
+ <xsl:with-param name="count" select="$count - 1"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+</xsl:stylesheet>
+
diff --git a/doc/manual/titlepage-htmlhelp.xml b/doc/manual/titlepage-htmlhelp.xml
new file mode 100644
index 00000000..cfcf39b8
--- /dev/null
+++ b/doc/manual/titlepage-htmlhelp.xml
@@ -0,0 +1,669 @@
+<!-- This file is taken from Docbook Project as available
+ from http://docbook.sourceforge.net/ (version 1.69.1,
+ file titlepage.templates.xml.
+ It was slightly modified. -->
+
+<t:templates xmlns:t="http://nwalsh.com/docbook/xsl/template/1.0"
+ xmlns:param="http://nwalsh.com/docbook/xsl/template/1.0/param"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+<!-- ==================================================================== -->
+
+<t:titlepage t:element="article" t:wrapper="div" class="titlepage">
+ <t:titlepage-content t:side="recto">
+ <title/>
+ <subtitle/>
+ <corpauthor/>
+ <authorgroup/>
+ <author/>
+ <othercredit/>
+ <releaseinfo/>
+ <copyright/>
+ <legalnotice/>
+ <pubdate/>
+ <revision/>
+ <revhistory/>
+ <abstract/>
+ </t:titlepage-content>
+
+ <t:titlepage-content t:side="verso">
+ </t:titlepage-content>
+
+ <t:titlepage-separator>
+ <hr/>
+ </t:titlepage-separator>
+
+ <t:titlepage-before t:side="recto">
+ </t:titlepage-before>
+
+ <t:titlepage-before t:side="verso">
+ </t:titlepage-before>
+</t:titlepage>
+
+<!-- ==================================================================== -->
+
+<t:titlepage t:element="set" t:wrapper="div" class="titlepage">
+ <t:titlepage-content t:side="recto">
+ <title/>
+ <subtitle/>
+ <corpauthor/>
+ <authorgroup/>
+ <author/>
+ <othercredit/>
+ <releaseinfo/>
+ <copyright/>
+ <legalnotice/>
+ <pubdate/>
+ <revision/>
+ <revhistory/>
+ <abstract/>
+ </t:titlepage-content>
+
+ <t:titlepage-content t:side="verso">
+ </t:titlepage-content>
+
+ <t:titlepage-separator>
+ <hr/>
+ </t:titlepage-separator>
+
+ <t:titlepage-before t:side="recto">
+ </t:titlepage-before>
+
+ <t:titlepage-before t:side="verso">
+ </t:titlepage-before>
+</t:titlepage>
+
+<!-- ==================================================================== -->
+
+<t:titlepage t:element="book" t:wrapper="div" class="titlepage">
+ <t:titlepage-content t:side="recto">
+ <title/>
+ <subtitle/>
+ <edition/>
+ <corpauthor/>
+ <authorgroup/>
+ <author/>
+ <address/>
+ <othercredit/>
+ <releaseinfo/>
+ <copyright/>
+ <legalnotice/>
+ <pubdate/>
+ <revision/>
+ <revhistory/>
+ <abstract/>
+ </t:titlepage-content>
+
+ <t:titlepage-content t:side="verso">
+ </t:titlepage-content>
+
+ <t:titlepage-separator>
+ <hr/>
+ </t:titlepage-separator>
+
+ <t:titlepage-before t:side="recto">
+ </t:titlepage-before>
+
+ <t:titlepage-before t:side="verso">
+ </t:titlepage-before>
+</t:titlepage>
+
+<!-- ==================================================================== -->
+
+<t:titlepage t:element="part" t:wrapper="div" class="titlepage">
+ <t:titlepage-content t:side="recto">
+ <title
+ t:force="1"
+ t:named-template="division.title"
+ param:node="ancestor-or-self::part[1]"/>
+ <subtitle/>
+ <corpauthor/>
+ <authorgroup/>
+ <author/>
+ <othercredit/>
+ <releaseinfo/>
+ <copyright/>
+ <legalnotice/>
+ <pubdate/>
+ <revision/>
+ <revhistory/>
+ <abstract/>
+ </t:titlepage-content>
+
+ <t:titlepage-content t:side="verso">
+ </t:titlepage-content>
+
+ <t:titlepage-separator>
+ </t:titlepage-separator>
+
+ <t:titlepage-before t:side="recto">
+ </t:titlepage-before>
+
+ <t:titlepage-before t:side="verso">
+ </t:titlepage-before>
+</t:titlepage>
+
+<t:titlepage t:element="partintro" t:wrapper="div">
+ <t:titlepage-content t:side="recto">
+ <title/>
+ <subtitle/>
+ <corpauthor/>
+ <authorgroup/>
+ <author/>
+ <othercredit/>
+ <releaseinfo/>
+ <copyright/>
+ <legalnotice/>
+ <pubdate/>
+ <revision/>
+ <revhistory/>
+ <abstract/>
+ </t:titlepage-content>
+
+ <t:titlepage-content t:side="verso">
+ </t:titlepage-content>
+
+ <t:titlepage-separator>
+ </t:titlepage-separator>
+
+ <t:titlepage-before t:side="recto">
+ </t:titlepage-before>
+
+ <t:titlepage-before t:side="verso">
+ </t:titlepage-before>
+</t:titlepage>
+
+<!-- ==================================================================== -->
+
+<t:titlepage t:element="reference" t:wrapper="div" class="titlepage">
+ <t:titlepage-content t:side="recto">
+ <title/>
+ <subtitle/>
+ <corpauthor/>
+ <authorgroup/>
+ <author/>
+ <othercredit/>
+ <releaseinfo/>
+ <copyright/>
+ <legalnotice/>
+ <pubdate/>
+ <revision/>
+ <revhistory/>
+ <abstract/>
+ </t:titlepage-content>
+
+ <t:titlepage-content t:side="verso">
+ </t:titlepage-content>
+
+ <t:titlepage-separator>
+ <hr/>
+ </t:titlepage-separator>
+
+ <t:titlepage-before t:side="recto">
+ </t:titlepage-before>
+
+ <t:titlepage-before t:side="verso">
+ </t:titlepage-before>
+</t:titlepage>
+
+<!-- ==================================================================== -->
+
+<t:titlepage t:element="refentry" t:wrapper="div" class="titlepage">
+ <t:titlepage-content t:side="recto">
+<!-- uncomment this if you want refentry titlepages
+ <title t:force="1"
+ t:named-template="refentry.title"
+ param:node="ancestor-or-self::refentry[1]"/>
+-->
+ </t:titlepage-content>
+
+ <t:titlepage-content t:side="verso">
+ </t:titlepage-content>
+
+ <t:titlepage-separator/>
+
+ <t:titlepage-before t:side="recto">
+ </t:titlepage-before>
+
+ <t:titlepage-before t:side="verso">
+ </t:titlepage-before>
+</t:titlepage>
+
+<!-- ==================================================================== -->
+
+ <t:titlepage t:element="dedication" t:wrapper="div" class="titlepage">
+ <t:titlepage-content t:side="recto">
+ <title
+ t:force="1"
+ t:named-template="component.title"
+ param:node="ancestor-or-self::dedication[1]"/>
+ <subtitle/>
+ </t:titlepage-content>
+
+ <t:titlepage-content t:side="verso">
+ </t:titlepage-content>
+
+ <t:titlepage-separator>
+ </t:titlepage-separator>
+
+ <t:titlepage-before t:side="recto">
+ </t:titlepage-before>
+
+ <t:titlepage-before t:side="verso">
+ </t:titlepage-before>
+</t:titlepage>
+
+<!-- ==================================================================== -->
+
+<t:titlepage t:element="preface" t:wrapper="div" class="titlepage">
+ <t:titlepage-content t:side="recto">
+ <title/>
+ <subtitle/>
+ <corpauthor/>
+ <authorgroup/>
+ <author/>
+ <othercredit/>
+ <releaseinfo/>
+ <copyright/>
+ <legalnotice/>
+ <pubdate/>
+ <revision/>
+ <revhistory/>
+ <abstract/>
+ </t:titlepage-content>
+
+ <t:titlepage-content t:side="verso">
+ </t:titlepage-content>
+
+ <t:titlepage-separator>
+ </t:titlepage-separator>
+
+ <t:titlepage-before t:side="recto">
+ </t:titlepage-before>
+
+ <t:titlepage-before t:side="verso">
+ </t:titlepage-before>
+</t:titlepage>
+
+<!-- ==================================================================== -->
+
+<t:titlepage t:element="chapter" t:wrapper="div" class="titlepage">
+ <t:titlepage-content t:side="recto">
+ <title/>
+ <subtitle/>
+ <corpauthor/>
+ <authorgroup/>
+ <author/>
+ <othercredit/>
+ <releaseinfo/>
+ <copyright/>
+ <legalnotice/>
+ <pubdate/>
+ <revision/>
+ <revhistory/>
+ <abstract/>
+ </t:titlepage-content>
+
+ <t:titlepage-content t:side="verso">
+ </t:titlepage-content>
+
+ <t:titlepage-separator>
+ </t:titlepage-separator>
+
+ <t:titlepage-before t:side="recto">
+ </t:titlepage-before>
+
+ <t:titlepage-before t:side="verso">
+ </t:titlepage-before>
+</t:titlepage>
+
+<!-- ==================================================================== -->
+
+<t:titlepage t:element="appendix" t:wrapper="div" class="titlepage">
+ <t:titlepage-content t:side="recto">
+ <title/>
+ <subtitle/>
+ <corpauthor/>
+ <authorgroup/>
+ <author/>
+ <othercredit/>
+ <releaseinfo/>
+ <copyright/>
+ <legalnotice/>
+ <pubdate/>
+ <revision/>
+ <revhistory/>
+ <abstract/>
+ </t:titlepage-content>
+
+ <t:titlepage-content t:side="verso">
+ </t:titlepage-content>
+
+ <t:titlepage-separator>
+ </t:titlepage-separator>
+
+ <t:titlepage-before t:side="recto">
+ </t:titlepage-before>
+
+ <t:titlepage-before t:side="verso">
+ </t:titlepage-before>
+</t:titlepage>
+
+<!-- ==================================================================== -->
+
+<t:titlepage t:element="section" t:wrapper="div" class="titlepage">
+ <t:titlepage-content t:side="recto">
+ <title/>
+ <subtitle/>
+ <corpauthor/>
+ <authorgroup/>
+ <author/>
+ <othercredit/>
+ <releaseinfo/>
+ <copyright/>
+ <legalnotice/>
+ <pubdate/>
+ <revision/>
+ <revhistory/>
+ <abstract/>
+ </t:titlepage-content>
+
+ <t:titlepage-content t:side="verso">
+ </t:titlepage-content>
+
+ <t:titlepage-separator>
+ <xsl:if test="count(parent::*)='0'"><hr/></xsl:if>
+ </t:titlepage-separator>
+
+ <t:titlepage-before t:side="recto">
+ </t:titlepage-before>
+
+ <t:titlepage-before t:side="verso">
+ </t:titlepage-before>
+</t:titlepage>
+
+<t:titlepage t:element="sect1" t:wrapper="div" class="titlepage">
+ <t:titlepage-content t:side="recto">
+ <title/>
+ <subtitle/>
+ <corpauthor/>
+ <authorgroup/>
+ <author/>
+ <othercredit/>
+ <releaseinfo/>
+ <copyright/>
+ <legalnotice/>
+ <pubdate/>
+ <revision/>
+ <revhistory/>
+ <abstract/>
+ </t:titlepage-content>
+
+ <t:titlepage-content t:side="verso">
+ </t:titlepage-content>
+
+ <t:titlepage-separator>
+ <xsl:if test="count(parent::*)='0'"><hr/></xsl:if>
+ </t:titlepage-separator>
+
+ <t:titlepage-before t:side="recto">
+ </t:titlepage-before>
+
+ <t:titlepage-before t:side="verso">
+ </t:titlepage-before>
+</t:titlepage>
+
+<t:titlepage t:element="sect2" t:wrapper="div" class="titlepage">
+ <t:titlepage-content t:side="recto">
+ <title/>
+ <subtitle/>
+ <corpauthor/>
+ <authorgroup/>
+ <author/>
+ <othercredit/>
+ <releaseinfo/>
+ <copyright/>
+ <legalnotice/>
+ <pubdate/>
+ <revision/>
+ <revhistory/>
+ <abstract/>
+ </t:titlepage-content>
+
+ <t:titlepage-content t:side="verso">
+ </t:titlepage-content>
+
+ <t:titlepage-separator>
+ <xsl:if test="count(parent::*)='0'"><hr/></xsl:if>
+ </t:titlepage-separator>
+
+ <t:titlepage-before t:side="recto">
+ </t:titlepage-before>
+
+ <t:titlepage-before t:side="verso">
+ </t:titlepage-before>
+</t:titlepage>
+
+<t:titlepage t:element="sect3" t:wrapper="div" class="titlepage">
+ <t:titlepage-content t:side="recto">
+ <title/>
+ <subtitle/>
+ <corpauthor/>
+ <authorgroup/>
+ <author/>
+ <othercredit/>
+ <releaseinfo/>
+ <copyright/>
+ <legalnotice/>
+ <pubdate/>
+ <revision/>
+ <revhistory/>
+ <abstract/>
+ </t:titlepage-content>
+
+ <t:titlepage-content t:side="verso">
+ </t:titlepage-content>
+
+ <t:titlepage-separator>
+ <xsl:if test="count(parent::*)='0'"><hr/></xsl:if>
+ </t:titlepage-separator>
+
+ <t:titlepage-before t:side="recto">
+ </t:titlepage-before>
+
+ <t:titlepage-before t:side="verso">
+ </t:titlepage-before>
+</t:titlepage>
+
+<t:titlepage t:element="sect4" t:wrapper="div" class="titlepage">
+ <t:titlepage-content t:side="recto">
+ <title/>
+ <subtitle/>
+ <corpauthor/>
+ <authorgroup/>
+ <author/>
+ <othercredit/>
+ <releaseinfo/>
+ <copyright/>
+ <legalnotice/>
+ <pubdate/>
+ <revision/>
+ <revhistory/>
+ <abstract/>
+ </t:titlepage-content>
+
+ <t:titlepage-content t:side="verso">
+ </t:titlepage-content>
+
+ <t:titlepage-separator>
+ <xsl:if test="count(parent::*)='0'"><hr/></xsl:if>
+ </t:titlepage-separator>
+
+ <t:titlepage-before t:side="recto">
+ </t:titlepage-before>
+
+ <t:titlepage-before t:side="verso">
+ </t:titlepage-before>
+</t:titlepage>
+
+<t:titlepage t:element="sect5" t:wrapper="div" class="titlepage">
+ <t:titlepage-content t:side="recto">
+ <title/>
+ <subtitle/>
+ <corpauthor/>
+ <authorgroup/>
+ <author/>
+ <othercredit/>
+ <releaseinfo/>
+ <copyright/>
+ <legalnotice/>
+ <pubdate/>
+ <revision/>
+ <revhistory/>
+ <abstract/>
+ </t:titlepage-content>
+
+ <t:titlepage-content t:side="verso">
+ </t:titlepage-content>
+
+ <t:titlepage-separator>
+ <xsl:if test="count(parent::*)='0'"><hr/></xsl:if>
+ </t:titlepage-separator>
+
+ <t:titlepage-before t:side="recto">
+ </t:titlepage-before>
+
+ <t:titlepage-before t:side="verso">
+ </t:titlepage-before>
+</t:titlepage>
+
+<t:titlepage t:element="simplesect" t:wrapper="div" class="titlepage">
+ <t:titlepage-content t:side="recto">
+ <title/>
+ <subtitle/>
+ <corpauthor/>
+ <authorgroup/>
+ <author/>
+ <othercredit/>
+ <releaseinfo/>
+ <copyright/>
+ <legalnotice/>
+ <pubdate/>
+ <revision/>
+ <revhistory/>
+ <abstract/>
+ </t:titlepage-content>
+
+ <t:titlepage-content t:side="verso">
+ </t:titlepage-content>
+
+ <t:titlepage-separator>
+ <xsl:if test="count(parent::*)='0'"><hr/></xsl:if>
+ </t:titlepage-separator>
+
+ <t:titlepage-before t:side="recto">
+ </t:titlepage-before>
+
+ <t:titlepage-before t:side="verso">
+ </t:titlepage-before>
+</t:titlepage>
+
+<!-- ==================================================================== -->
+
+<t:titlepage t:element="bibliography" t:wrapper="div" class="titlepage">
+ <t:titlepage-content t:side="recto">
+ <title
+ t:force="1"
+ t:named-template="component.title"
+ param:node="ancestor-or-self::bibliography[1]"/>
+ <subtitle/>
+ </t:titlepage-content>
+
+ <t:titlepage-content t:side="verso">
+ </t:titlepage-content>
+
+ <t:titlepage-separator>
+ </t:titlepage-separator>
+
+ <t:titlepage-before t:side="recto">
+ </t:titlepage-before>
+
+ <t:titlepage-before t:side="verso">
+ </t:titlepage-before>
+</t:titlepage>
+
+<!-- ==================================================================== -->
+
+<t:titlepage t:element="glossary" t:wrapper="div" class="titlepage">
+ <t:titlepage-content t:side="recto">
+ <title
+ t:force="1"
+ t:named-template="component.title"
+ param:node="ancestor-or-self::glossary[1]"/>
+ <subtitle/>
+ </t:titlepage-content>
+
+ <t:titlepage-content t:side="verso">
+ </t:titlepage-content>
+
+ <t:titlepage-separator>
+ </t:titlepage-separator>
+
+ <t:titlepage-before t:side="recto">
+ </t:titlepage-before>
+
+ <t:titlepage-before t:side="verso">
+ </t:titlepage-before>
+</t:titlepage>
+
+<!-- ==================================================================== -->
+
+<t:titlepage t:element="index" t:wrapper="div" class="titlepage">
+ <t:titlepage-content t:side="recto">
+ <title
+ t:force="1"
+ t:named-template="component.title"
+ param:node="ancestor-or-self::index[1]"/>
+ <subtitle/>
+ </t:titlepage-content>
+
+ <t:titlepage-content t:side="verso">
+ </t:titlepage-content>
+
+ <t:titlepage-separator>
+ </t:titlepage-separator>
+
+ <t:titlepage-before t:side="recto">
+ </t:titlepage-before>
+
+ <t:titlepage-before t:side="verso">
+ </t:titlepage-before>
+</t:titlepage>
+
+<!-- ==================================================================== -->
+
+<t:titlepage t:element="setindex" t:wrapper="div" class="titlepage">
+ <t:titlepage-content t:side="recto">
+ <title
+ t:force="1"
+ t:named-template="component.title"
+ param:node="ancestor-or-self::setindex[1]"/>
+ <subtitle/>
+ </t:titlepage-content>
+
+ <t:titlepage-content t:side="verso">
+ </t:titlepage-content>
+
+ <t:titlepage-separator>
+ </t:titlepage-separator>
+
+ <t:titlepage-before t:side="recto">
+ </t:titlepage-before>
+
+ <t:titlepage-before t:side="verso">
+ </t:titlepage-before>
+</t:titlepage>
+
+<!-- ==================================================================== -->
+
+</t:templates>
diff --git a/doc/manual/user_ChangeLogImpl.xml b/doc/manual/user_ChangeLogImpl.xml
new file mode 100644
index 00000000..7b6b8f23
--- /dev/null
+++ b/doc/manual/user_ChangeLogImpl.xml
@@ -0,0 +1,8784 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+ <sect1>
+ <title>Version 4.2.4 (2012-10-26)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>GUI: fixed validation warning on global settings / proxy page
+ (4.2.2 regression, bug #11089)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed crash with multiple guest screens on certain
+ conditions (OS X hosts only)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxBalloonCtrl: fixed command line argument handling of
+ ballooning module</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: fixed occasional crash during a video playback in the
+ guest (bug #11082)</para>
+ </listitem>
+
+ <listitem>
+ <para>BIOS: fixed broken DMI information (4.2 regression)</para>
+ </listitem>
+
+ <listitem>
+ <para>BIOS: workaround for booting from Windows 2000 floppy disks</para>
+ </listitem>
+
+ <listitem>
+ <para>EFI: fixed video mode selection loss on VM reboot (#10983)</para>
+ </listitem>
+
+ <listitem>
+ <para>Parallel: fixed parallel port printing failure/ paper queue empty
+ error (Windows hosts only; bug #2226)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed crash on alias-less DNS responses when host-resolver is used</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: fixed hang under rare circumstances</para>
+ </listitem>
+
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Version 4.2.2 (2012-10-18)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>VMM: adapted to changes in Mac OS X 10.8.2 (bug #10965)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: restored VM item tool-tip functionality (4.2 regression)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: added group item tool-tip functionality</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed handling of the .ova/.ovf file name association
+ (4.2 regression)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: it was not possible to change any setting before the
+ first VM was created (bug #10928)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: disable grouping action if all the selected items are
+ full children list of the same group already</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: added menu for runtime drag-and-drop option change</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: cleanup shared-clipboard menu on visual-mode change</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: make sure VM receives keyboard focus on entering fullscreen-mode
+ on Win host (bug #11051)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: disable proxy authentication for security reasons</para>
+ </listitem>
+
+ <listitem>
+ <para>3D Support: <emphasis>DrawIndexedPrimitiveUP</emphasis> implementation
+ fixes for the Windows WDDM video driver (bug #10929) </para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: fixed a release assertion in the AHCI emulation when requests
+ where cancelled with async I/O disabled</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: fixed a hang during VM reset under certain circumstances
+ (bug #10898)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed a crash under rare circumstances (Windows hosts only;
+ bug #10128)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: automatically use the host resolver if the host name server is
+ set to some unusual loopback value (bug #10864)</para>
+ </listitem>
+
+ <listitem>
+ <para>E1000: fixed a VirtualBox crash during intensive network transfers
+ (4.2 regression; bugs #10936, #10969, #10980)</para>
+ </listitem>
+
+ <listitem>
+ <para>ICH9: fixed PCI bridge initialization</para>
+ </listitem>
+
+ <listitem>
+ <para>USB mouse: ensure that the last mouse event doesn't get lost if no URBs
+ are available</para>
+ </listitem>
+
+ <listitem>
+ <para>BIOS: certain legacy guests (e.g. Windows 95) didn't find the boot
+ device after a warm reboot</para>
+ </listitem>
+
+ <listitem>
+ <para>BIOS: don't trash the palette in text modes when setting the border
+ color</para>
+ </listitem>
+
+ <listitem>
+ <para>EFI: fixed OS X guest autoboot (4.2 regression)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: fixed output of <emphasis>showvminfo --machinereadable</emphasis>
+ (bug #10973)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: fixed parsing of <emphasis>storageattach --discard</emphasis>
+ (bug #11023)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: fixed wrong output of the HPET setting in <emphasis>showvminfo</emphasis>
+ (bug #11065)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: fixed closing the guest session after executing a
+ guest process via guest control</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxShell: adaptions to interface name changes</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest Additions device: fixed a Guest Additions hang when a
+ machine was reset after a crash</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts / guests: Linux 3.7-rc1 fixes</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: support X.Org Server 1.13</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: fixed a hang when the X server was restarted with
+ old guest kernels</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: fixed a VBoxService crash during CPU hot remove
+ (bug #10964)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed automatic screen resize
+ issue for NT4 guests</para>
+ </listitem>
+
+ <listitem>
+ <para>OS/2 Additions: fixed shutdown hang</para>
+ </listitem>
+
+ <listitem>
+ <para>OS/2 Additions: fixed mouse driver panic</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed autostart service going into maintenance mode after
+ all VMs started</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed linking the host driver with the dtrace module</para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect1>
+
+ <sect1>
+
+ <title>Version 4.2.0 (2012-09-13)</title>
+
+ <para>This is a major update. The following major new features
+ were added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>Improved Windows 8 support, in particular many 3D-related fixes</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: VM groups (bug #288)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: expert mode for wizards</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: allow to alter some settings during runtime</para>
+ </listitem>
+
+ <listitem>
+ <para>Support for up to 36 network cards, in combination with an
+ ICH9 chipset configuration (bug #8805)</para>
+ </listitem>
+
+ <listitem>
+ <para>Resource control: added support for limiting network IO
+ bandwidth; see <xref linkend="network_bandwidth_limit" /> (bug #3653)</para>
+ </listitem>
+
+ <listitem>
+ <para>Added possibility to start VMs during system boot on Linux,
+ OS X and Solaris; see <xref linkend="autostart" /> (bug #950)</para>
+ </listitem>
+
+ <listitem>
+ <para>Added experimental support for Drag'n'drop from the host to
+ Linux guests. Support for more guests and for guest-to-host is
+ planned. (bug #81)</para>
+ </listitem>
+
+ <listitem>
+ <para>Added support for parallel port passthrough on Windows hosts</para>
+ </listitem>
+
+ <listitem>
+ <para>Enhanced API for controlling the guest; please see the SDK reference and API
+ documentation for more information</para>
+ </listitem>
+
+ </itemizedlist>
+
+ <para>In addition, the following items were fixed and/or added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>Mac OS X hosts: sign application and installer to avoid warnings
+ on Mountain Lion</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed a potential host crash triggered by shutting down a VM
+ when another VM was running (only affected 32-bit hosts and 64-bit OS X hosts,
+ 4.1 regression, bug #9897)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed a potential host crash under a high guest memory pressure
+ (seen with Windows 8 guests)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: improved VM context switch performance for Intel CPUs using
+ nested paging</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: added support for <emphasis>FlushByASID</emphasis> features of
+ AMD CPUs (Bulldozer and newer)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed unreal mode handling on older CPUs with VT-x
+ (gPXE, Solaris 7/8/9; bug #9941)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed MP tables fixes for I/O APIC interrupt routing relevant
+ for ancient SMP guests (e.g. old OS/2 releases)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: support recent VIA CPUs (bug #10005)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed handling of task gates if VT-x/AMD-V is disabled</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: page fusion fixes</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: network operations manager</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: allow taking screenshots of the current VM window content (bug #5561)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: allow automatically sorting of the VM list</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: allow starting of headless VMs from the GUI</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: allow reset, shutdown and poweroff from the Manager window</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: allow to globally limit the maximum screen resolution for
+ guests</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: show the full medium part on hovering the list of recently
+ used ISO images</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: do not create additional folders when a new machine has a
+ separator character in its name (bug #6541)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: don't crash on terminate if the settings dialog is still open
+ (bug #9973)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: consider scaled DPI values when display fonts on Windows hosts
+ (bug #9864)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: if a bridged network interface cannot be found, don't
+ refuse to start the VM but allow the user to change the setting
+ immediately (bug )</para>
+ </listitem>
+
+ <listitem>
+ <para>Snapshots: fixed a crash when restoring an old
+ snapshot when powering off a VM (bugs #9364, #9604, #10491)</para>
+ </listitem>
+
+ <listitem>
+ <para>Clipboard: disable the clipboard by default for new VMs
+ (see <xref linkend="security_clipboard" />). It can be enabled at
+ any time using the VM menu.</para>
+ </listitem>
+
+ <listitem>
+ <para>Settings: sanitise the name of VM folders and settings file (bug #10549)</para>
+ </listitem>
+
+ <listitem>
+ <para>Settings: allow to store the iSCSI initiator secret encrypted</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: improvements for the built-in TFTP server (bugs #7385, #10286)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed memory leak when disabling the NAT engine (bug #10801)</para>
+ </listitem>
+
+ <listitem>
+ <para>E1000: 802.1q VLAN support (bug #10429)</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: implemented burning of audio CDs in passthrough mode</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: fixed audio CD passthrough for certain media players</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: implemented support for discarding unused image blocks
+ through TRIM for SATA and IDE and UNMAP for SCSI when using VDI images</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: added support for QED images</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: added support for QCOW (full support for v1 and readonly
+ support for v2 images)</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: added readonly support for VHDX images</para>
+ </listitem>
+
+ <listitem>
+ <para>USB: don't crash if a USB device is plugged or unplugged when
+ saving or loading the VM state (SMP guests only)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris additions: added support for X.org Server 1.11 and 1.12</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris additions: switched to using an in-kernel mouse driver</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows hosts: no need to recreate host-only adapters after a
+ VirtualBox update</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows hosts: updated toolchain; make the source code compatible
+ to VC 2010 and enable some security-related compiler options</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed memory leak in VBoxTray (bug #10808)</para>
+ </listitem>
+
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Version 4.1.18 (2012-06-06)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>VMM: fixed <emphasis>VERR_REM_VIRTUAL_CPU_ERROR</emphasis>
+ under rare conditions after the guest has been reset (bug #5164
+ and others)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed host freezes with 64-bit guests on 32-bit Linux
+ hosts (bug #10528)</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: added a workaround for rdesktop clients not properly
+ updating the screen size when minimized</para>
+ </listitem>
+
+ <listitem>
+ <para>AHCI: fixed a rare bug which can cause a guest memory corruption
+ after the guest storage controler has been reset</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: another attempt to fix crashes under rare conditions
+ (Windows hosts only; bug #10513)</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: addressed issues running Leopard / Snow Leopard
+ (bug #10631)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts / Bridged Networking: fixed the problem with device driver
+ unloading on kernels 3.2.18 and newer due to an invalid reference counter
+ (bug #10624)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts / guests: Linux 3.5-rc1 fixes</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: the guest content was sometimes not properly
+ updated (bug #9887)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris Additions: installer fix for X.org Server 1.11 and 1.12</para>
+ </listitem>
+
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Version 4.1.16 (2012-05-22)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>VMM: fixed a Guru Meditation <emphasis>VERR_ACCESS_DENIED</emphasis>
+ with certain guests (bugs #7589, #8247)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed a Guru Meditation <emphasis>VERR_PAGE_TABLE_NOT_PRESENT</emphasis>
+ with Ubuntu 32-bit guests with nested paging enabled on AMD CPUs (bug #10183)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: preserve segment limits and attributes when switching to unreal mode
+ required for some legacy guests to work properly (VT-x without unrestricted guest
+ execution only; bug #9941)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed a VM hang after a resume from pause / savestate with SMP
+ guests in rare cases</para>
+ </listitem>
+
+ <listitem>
+ <para>3D Support: several fixes for the Windows WDDM video driver crash</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed a crash on attempt to process ICMP datagram under some
+ circumstances (bug #10527)</para>
+ </listitem>
+
+ <listitem>
+ <para>Host-only Networking: lifted the maximal number of interfaces to
+ 128 on Linux and Mac OS X hosts (there is no such limitation for
+ Solaris and Windows hosts)</para>
+ </listitem>
+
+ <listitem>
+ <para>EFI: fixed wrong SEC/PEI Core entry point calculation (bug #10531)</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: fixed a display update problem (bug #10503)</para>
+ </listitem>
+
+ <listitem>
+ <para>Main: set the proper VM state if savestate failed for some
+ reason (bug #6189)</para>
+ </listitem>
+
+ <listitem>
+ <para>Main: more useful error message if a medium is inaccessible</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: fixed <emphasis>controlvm savestate</emphasis> if the VM is already
+ paused</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: addressed issues running on Mountain Lion Preview 3
+ (bug #10267)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: Linux 3.4 compile fixes</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: fixed wrong help path in some rpm-based packages
+ (bug #10418)</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest Additions: fixed handling of custom environment variables
+ during <computeroutput>VBoxManage guestcontrol execute</computeroutput>
+ (bug #10581)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed guest driver crash of VBoxSF in certain
+ cases (4.1.10 regression, bug #10408)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: don't load the WDDM driver if 3D support is not available
+ for Windows 8 guests to keep the guest maintainable in that case (still better
+ to miss some features than providing a blank screen)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris Additions: added support for X.org Server 1.11 and 1.12</para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect1>
+
+ <sect1>
+ <title>Version 4.1.14 (2012-04-13)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>Network: fixed the problem with packets larger than MTU-4 when
+ PCnet or PRO/1000 was bridged to certain types of adapters on OS X hosts
+ (bug #3783)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed a segfault under rare circumstances</para>
+ </listitem>
+
+ <listitem>
+ <para>3D Support: fixed Windows WDDM video driver crash for SMP guests
+ (bugs #10200, #10331)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Guest Additions, VRDP: fixed occasional corruption of vertical text</para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect1>
+
+ <sect1>
+ <title>Version 4.1.12 (2012-04-03)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>VMM: fixed <emphasis>VERR_NOT_SUPPORTED</emphasis> and
+ <emphasis>VERR_RAW_MODE_INVALID_SMP</emphasis> guru meditation
+ due to an invalid reschedule to raw mode (bug #10370)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed <emphasis>PDMCritSectLeave</emphasis> guru meditation
+ under rare circumstances with SMP guests</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: proper <emphasis>Math Fault</emphasis> handling with certain
+ legacy guests (bug #9042)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed a socket leak under certain conditions</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: better sanity check against reading beyond end-of-file</para>
+ </listitem>
+
+ <listitem>
+ <para>Audio: fixed a crash in the NUL audio backend (bug #10374;
+ 4.1.10 regression)</para>
+ </listitem>
+
+ <listitem>
+ <para>HGCM: fixed a crash during savestate under rare circumstances</para>
+ </listitem>
+
+ <listitem>
+ <para>Metrics: fixed an occasional crash during VM shutdown if host
+ RAM/VMM metrics are enabled</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxSVC: several locking fixes</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: return the correct error code if
+ <emphasis>controlvm savestate</emphasis> failed (bug #10134)</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest Additions: VBoxService should not crash on exit (bug #10326;
+ 4.1.10 regression)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: set the correct time stamp when a file is
+ closed (bug #6473)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: better help if the DirectX backups are not
+ properly installed</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: Linux 3.4-rc1 compile fixes</para>
+ </listitem>
+
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Version 4.1.10 (2012-03-13)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>GUI: if 3D support on the host is not available for some reason,
+ do not only disable this VM setting but also uncheck the checkbox</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed a potential problem causing to schedule interrupts during
+ <emphasis>SYSEXIT</emphasis> right after <emphasis>STI</emphasis></para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed a potential guest memory corruption issue with page
+ fusion</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: adjusted the module matching algorithm for page fusion a
+ little, generally resulting in slightly more shared pages</para>
+ </listitem>
+
+ <listitem>
+ <para>Main: host interfaces no longer have "defaults" for IP address
+ and network mask attributes</para>
+ </listitem>
+
+ <listitem>
+ <para>Main: don't depend on a password for certain guest control operations
+ (bug #10030)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D Support: fixed Windows XP hosts support (4.1.8 regression;
+ bugs #10071 and #10088</para>
+ </listitem>
+
+ <listitem>
+ <para>3D Support: rendering fixes for Linux hosts with NVIDIA graphics</para>
+ </listitem>
+
+ <listitem>
+ <para>3D Support: fixed saved state issues (4.1.8 regression; bug #10126)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D Support: WDDM driver: fixed powershell_ise crashes (bug #10167),
+ make WPF-based apps work with Aero enabled, fixed additional possible WinSAT crashes</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: fixed remote clipboard compatibility issues with some clients</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: fixed a possible data corruption when compacting VDI or VHD
+ images with snapshots (32-bit hosts only)</para>
+ </listitem>
+
+ <listitem>
+ <para>iSCSI: fixed crash when using incorrect credentials
+ when authenticating with a LIO target (bug #10173)</para>
+ </listitem>
+
+ <listitem>
+ <para>Serial: don't abort in host mode under rare error conditions
+ (non-Windows hosts only)</para>
+ </listitem>
+
+ <listitem>
+ <para>SDK: actually ship current C bindings</para>
+ </listitem>
+
+ <listitem>
+ <para>SDK: fixed the Java glue code for JDK 1.7.0 (bug #9848)</para>
+ </listitem>
+
+ <listitem>
+ <para>SDK: added Python example</para>
+ </listitem>
+
+ <listitem>
+ <para>Metrics: make metrics collection more robust regarding blocked VMs</para>
+ </listitem>
+
+ <listitem>
+ <para>Web service: added SSL/TLS support</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxShell: fixed Guest Additions information lookup</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris installer: fixed dependency checking while installing VirtualBox
+ in a zone</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts/guests: Linux 3.3-rc1 compile fixes</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed debug kernel panics while opening module CTF data
+ (bug #9651)</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: fixed Python support on Lion</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: make 3D passthrough work on OL/RHEL 6.2 (bug
+ #10010)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: fixed missing implementation when copying shared
+ folder data through kernel high memory (bug #9878)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: make sure all data is written when closing a
+ memory mapped file on a shared folder</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: added support for X.Org Server 1.12</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris Additions: fixed guest kernel driver to load properly
+ on guest reboot (4.1.8 regression; bug #10113)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris Additions: fixed missing 64-bit OpenGL library VBoxOGL.so
+ (bug #10151)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris Additions: fixed VBoxService import and start for Solaris 11
+ guests.</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: some Windows 8 adaptions</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: several fixes for shared folders (bug #9753)</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest control: miscellaneous bugfixes</para>
+ </listitem>
+
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Version 4.1.8 (2011-12-19)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>VMM: fixed <emphasis>VERR_MAP_FAILED</emphasis> during savestate
+ under certain circumstances (bug #7929)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: stop updating the VM status icons when the VM is paused (bug #8368)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: fixed wrong return code after <emphasis>startvm</emphasis>
+ (bug #9642)</para>
+ </listitem>
+
+ <listitem>
+ <para>BIOS: fixed hang at launch of DOS applications generated by
+ Clipper 5.3 (note that hardware virtualization may be required)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>USB: fixed OS/2 boot hang when using recent USB drivers</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: increase maximum number of parallel connections making
+ connections with port forwarding more robust (#8471)</para>
+ </listitem>
+
+ <listitem>
+ <para>Metrics: fixed potential problem with invalid access in guest
+ metrics collection upon VM destruction</para>
+ </listitem>
+
+ <listitem>
+ <para>Main: don't crash if a medium is ejected twice (bug #9922)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxSVC: fixed crash under rare circumstances (e.g. client crash)</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: fixed screen freeze (bug #9620)</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF/OVA: fixed broken disk images on import under rare
+ circumstances</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF/OVA: better error message when importing corrupted appliances</para>
+ </listitem>
+
+ <listitem>
+ <para>VMDK/VHD: fixed a possible corruption with host cache disabled
+ when using snapshots under rare circumstances (bug #9749)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D Support: fixed full screen mode issues for ATI graphics (bug #9775),
+ Windows Media Player rendering for XPDM-based Direct3D support (bug# 8341).
+ Multiple fixes to XPDM and WDDM - based 3D support for Windows Guests
+ and for 3D support in general</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: fixes for Fedoras Linux 2.6.41 (bug #9948)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts/guests: fixes for Linux 3.2 (bug #9743)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris Additions: various shared folder fixes (bugs #9856, #9862, #9917)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: various fixes for Direct3D support (un)installation, added
+ detection of missing or wrong Direct3D system files</para>
+ </listitem>
+
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Version 4.1.6 (2011-11-04)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>VRDP: fixed screen corruption</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: the interface stopped working after a lot of failed
+ ICMP requests (bug #9371)</para>
+ </listitem>
+
+ <listitem>
+ <para>E1000: fixed rare Windows 7 guest hangs, either at boot time
+ or when reconfiguring the network card in unusual setups (bug #6223)</para>
+ </listitem>
+
+ <listitem>
+ <para>ATA: fixed a possible crash during ATAPI passthrough with
+ certain guests</para>
+ </listitem>
+
+ <listitem>
+ <para>ATA: improved compatibility with ancient Linux kernels</para>
+ </listitem>
+
+ <listitem>
+ <para>Main: fixed incorrect framebuffer information after leaving
+ the full screen mode with X11 guests, this lead to a scrambled
+ preview window in the GUI for example</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: fixed the problem with duplicate packets when
+ bridged to a wireless interface (bug #9648)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: fix for 3D support on Fedora 15 (bug #9799)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: don't call <emphasis>del_timer_sync</emphasis>
+ from an interrupt context (Fedora bug report 746331)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Vista and 7 guests: more WDDM fixes</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: fixed kernel module compilation failure on Redhat
+ Enterprise Linux 4 (bug #9709)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: install the DRI driver correctly on Ubuntu 11.10
+ guests</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris Additions: added read-only mmap support for shared
+ folders</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris Additions: added directory, file mode and mask options for
+ shared folders</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: implemented faster detection of logged-in guest
+ users and stale sessions</para>
+ </listitem>
+
+ <listitem>
+ <para>X.Org Additions: fixed graphical corruption when switching to a
+ virtual terminal (bug #9490)</para>
+ </listitem>
+
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Version 4.1.4 (2011-10-03)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>VMM: fixed PAE guests running on 32-bit hosts (4.0 regression;
+ bug #9458)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed <emphasis>INVALID_PARAMETER</emphasis> guru meditation
+ caused by insufficient memory conditions (4.1.0 regression; bug #9240)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed clobbered CPU registers during <emphasis>stos/lods/ins/outs</emphasis>
+ emulation under rare circumstances</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: another fix for 64-bit guests on recent AMD CPUs</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: warn the user if he uses an outdated extension pack and allow
+ to download and upgrade in that case (bug #8025)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed spurious LCtrl key events on some Windows hosts
+ (4.0.6 regression; bug #373)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: another fix for <emphasis>extpack install --replace</emphasis>
+ (bug #9308)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: allow to specify the UUID of the target image in
+ <emphasis>convertfromraw</emphasis></para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: fixed a rare crash when two or more clients connect to the server
+ (bug #9503)</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: fixed a case when a client was not resized correctly
+ (bug #9242)</para>
+ </listitem>
+
+ <listitem>
+ <para>USB: make device capturing work on Windows hosts with
+ usbhub class filter drivers installed (bug #9298);
+ bugfixes for Windows host USB support</para>
+ </listitem>
+
+ <listitem>
+ <para>VHD: fixed reads crossing block boundaries (bug #8532)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMDK: fixed progress indicator when creating split VMDK
+ images</para>
+ </listitem>
+
+ <listitem>
+ <para>Floppy: fixed medium size detection for physical mediums
+ (Windows hosts only)</para>
+ </listitem>
+
+ <listitem>
+ <para>Main: fixed VM initialization if a shared folder does
+ not exist (bug #7941)</para>
+ </listitem>
+
+ <listitem>
+ <para>Main: fixed possible deadlock between hard disk enumeration and
+ resetting of immutable disks (bug #9549)</para>
+ </listitem>
+
+ <listitem>
+ <para>Main: fixed not detaching of virtual storage after a snapshot
+ restore operation (bug #8296)</para>
+ </listitem>
+
+ <listitem>
+ <para>Main: always reset modified state after restoring a snapshot (bug
+ #9387)</para>
+ </listitem>
+
+ <listitem>
+ <para>Main: fixed writing of changed VM settings to disk when using
+ snapshots (bug #8932)</para>
+ </listitem>
+
+ <listitem>
+ <para>Main: fixed taking screen shots (e.g. the preview window) for
+ headless VMs if the Guest Additions are active</para>
+ </listitem>
+
+ <listitem>
+ <para>Virtio-net: fixed the problem with UDP packets exceeding
+ MTU (bug #9370)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D Support: fixed incorrect rendering and possible crashes when switching
+ to/from full screen with enabled 2D acceleration</para>
+ </listitem>
+
+ <listitem>
+ <para>3D Support: fixed compiz under ubuntu 9.10</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest control: miscellaneous small bugfixes</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux / Solaris hosts: don't use hard links in packages
+ (4.1.2 regression; bug #9441)</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: fix installation issues when installed as root
+ (bug #1578)</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: fixed packet capture issues with vboxnetX host-only
+ interfaces (bug #8076)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed incoming multicast packets for Crossbow based
+ bridged networking (bug #9532)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed starting EFI guests due to missing EFI ROM files
+ (bug #9535)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows hosts installer: fixed <emphasis>ADDLOCAL</emphasis> usage
+ on command line (4.1.0 regression; bug #9488)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows hosts installer: fixed dangling shortcut to the .chm
+ help file (bug #9646)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows hosts installer: try to fix installation error 2869 which
+ appeared under certain circumstances (bug #9664)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows hosts: VBoxHeadless should never open a separate
+ console window (bug #3549)</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest Additions: fixed hang while waiting for guest execution
+ output (4.1.2 regression; bug #9446)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: add support for X.Org Server 1.11 (bug #9519)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: suppress an incorrect error message and allow
+ a shared folder to be mounted in multiple places (bug #9627)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: start VBoxService correctly on openSUSE 12.1
+ (bug #6229)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: properly finish the installation even if the
+ compilation of the DRM module fails (which is not fatal)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris Additions: fixed memory leaks and panics while mounting
+ (from console) and unmounting shared folders</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed swapped mouse cursor hotspot coordinates
+ (4.1.0 regression; bug #9447)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed <emphasis>PAGE_FAULT_IN_NONPAGED_AREA</emphasis>
+ BSOD in VBoxDisp.dll when running SnippingTool (bug #9508)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: make image viewer work correctly
+ with Aero enabled (Vista and Windows 7)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed incorrect window border blurs under Aero
+ with ATI cards (Vista and Windows 7)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed incorrect rendering when moving 3D applications
+ outside guest desktop and back under Aero (Vista and Windows 7)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed guest hangs when switching back from full screen
+ text mode applications (bug #9636)</para>
+ </listitem>
+
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Version 4.1.2 (2011-08-15)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>VMM: fixed 64-bit guests on AMD Fusion CPUs (bug #8824)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed handling of the <emphasis>sysenter/sysexit</emphasis>
+ machine instructions in 64-bit guests on Intel hosts</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: added linked clone support</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed error check when changing the VM controller settings
+ (4.1.0 regression; bug #9246)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed the inclusion of additional information (license,
+ vendor, ...) on OVF export</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: when taking a snapshot from the VM selector, don't do
+ a live snapshot</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed immediate crash during start on certain environments
+ due to a library version conflict</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest control execution: implemented copying single files from
+ guest to the host (directories and filters not supported yet)</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest control execution: limited to serve up to 5 guest processes
+ at a time by default</para>
+ </listitem>
+
+ <listitem>
+ <para>Main: return the correct RDP default port fixing settings
+ warnings in the GUI if the remote display was enabled at runtime (bug
+ #9368)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxSVC: made the path comparison OS independent when images are
+ registered (bug #9303)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxSVC: several fixes/performance improvements for cloning of
+ VMs</para>
+ </listitem>
+
+ <listitem>
+ <para>Snapshots: fixed "Solid-State drive" flag survival on snapshot
+ creation (bug #9379)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: implemented <emphasis>copyfrom</emphasis> and
+ <emphasis>stat</emphasis> guest control tools to copy files from guest
+ to host and to check for existence of files on the guest</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: fixed <emphasis>extpack install --replace</emphasis>
+ (bug #9308)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: allow to start multiple VMs with
+ <emphasis>startvm</emphasis></para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: experimental support for SATA CD/DVD hotplugging</para>
+ </listitem>
+
+ <listitem>
+ <para>Mouse support: fixed an off-by-one pointer position error
+ affecting Windows guests (bugs #7566, #9321)</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: fixed a case when the screen was not redrawn correctly
+ (bug #9242)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: changed TCP connection establishment according to Winsock API
+ requirements (Windows hosts only; bug #8919)</para>
+ </listitem>
+
+ <listitem>
+ <para>USB: fixed device recognition issues (bugs #9299) and
+ fixed several device capturing issues (Windows hosts; bug #9299)</para>
+ </listitem>
+
+ <listitem>
+ <para>USB: fixed issues with remote filters being applied to local
+ USB devices</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest Additions: keep logged in user count in out-of-memory situations
+ and warn about it</para>
+ </listitem>
+
+ <listitem>
+ <para>OVA: fixed import of renamed OVA files (bug #9033)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows host: fixed icon for .VDI files (bug #9393)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed a bug preventing parallel usage of multiple host NICs
+ with Crossbow based bridged networking</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: fixed random kernel panics on host suspend / shutdown
+ (4.1.0 regression; bug #9305)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris Additions: fixed shared folders due to missing symbols in the vboxfs
+ module (4.0.12 / 4.1.0 regression; bug #9264)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed file truncation on a shared folder with
+ some applications (bugs #9276, #9315)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed shared folder issues with antivirus software
+ and 64 bit Windows guests (bug #9318)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Vista and 7 guests: WDDM driver fixes and performance enhancements,
+ fixed WinSAT crashes (#9267)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: fixed <emphasis>llseek</emphasis> for Linux kernels
+ 2.6.37 and above</para>
+ </listitem>
+
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Version 4.1.0 (2011-07-19)</title>
+
+ <para>This version is a major update. The following major new features
+ were added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>Support for cloning of VMs (bug #5853, see
+ <xref linkend="clone"/>): full clones can be created through the GUI
+ and VBoxManage, linked clones only through VBoxManage</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: enhanced wizard for creating new virtual disks</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: new wizard for copying virtual disks</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: keep the aspect ratio in scale mode (Windows and OSX hosts only;
+ bug #7822)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: raised the memory limit for 64-bit hosts to 1TB</para>
+ </listitem>
+
+ <listitem>
+ <para>Experimental support for PCI passthrough for Linux hosts, see
+ <xref linkend="pcipassthrough"/></para>
+ </listitem>
+
+ <listitem>
+ <para>Windows guests: Experimental WDDM graphics driver, supporting
+ Windows Aero (bug #4607) and providing Direct3D support using a
+ cleaner approach (no need to install the guest drivers in Safe Mode
+ anymore)</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest Additions: status of modules and features can now be
+ queried separately by the frontends</para>
+ </listitem>
+
+ <listitem>
+ <para>Networking: new network attachment mode "Generic Driver", which
+ offers an open plugin architecture for arbitrary and separately
+ distributable virtual network implementations</para>
+ </listitem>
+
+ <listitem>
+ <para>Host-only Networking: fixed host crash in kernels prior to 2.6.29
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>New Networking Mode <emphasis>UDP Tunnel</emphasis>: allows to
+ interconnect VMs running on different hosts easily and transparently,
+ see <xref linkend="networkingmodes" /></para>
+ </listitem>
+
+ <listitem>
+ <para>Experimental support for SATA hard disk hotplugging available
+ with VBoxManage</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: New Crossbow based bridged networking driver for
+ Solaris 11 build 159 and above</para>
+ </listitem>
+
+
+ </itemizedlist>
+
+ <para>In addition, the following items were fixed and/or added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>VMM: more SMP timer fixes</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed sporadic recompiler crashes with SMP guests</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: many small fixes</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: when restoring a snapshot, ask for taking a snapshot
+ of the current state</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: added a <emphasis>View</emphasis> menu</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: added a setting for the promiscuous mode policy for
+ internal networks, bridged networks and host-only networks</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: added slider for setting the CPU execution cap allowing to
+ limit the amount of CPU time spent for the execution of the guest,
+ see <xref linkend="settings-processor"/></para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: the VM description is editable during the runtime of
+ a VM (bug #1551)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: added proxy settings (bug #2870)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: made the number of SATA ports configurable</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: decrease time before showing the VM configuration
+ dialog</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: more convenient configuration of storage controller
+ attachments by automatically determining the port or device parameter
+ when a storage controller has only one port or device per port</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: changed syntax of the <emphasis>guestcontrol</emphasis>
+ command group, fixed various bugs, removed obsolete options</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxBalloonCtrl: new service for automatic dynamic adjustment
+ of the balloon size for running VMs</para>
+ </listitem>
+
+ <listitem>
+ <para>Settings: machine names and snapshot names are not allowed to
+ be a valid UUID</para>
+ </listitem>
+
+ <listitem>
+ <para>Settings: provide better diagnostics if a single medium is used
+ twice in a VM configuration</para>
+ </listitem>
+
+ <listitem>
+ <para>Settings: provide better diagnostics for errors in medium
+ create/merge/clone operations, and fix memory leaks in error
+ cases</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: ATA/SATA drives can be marked as non-rotational, i.e.
+ the guest OS will detect them as a SSD if supported, which can
+ improve performance</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: virtual CD/DVD images will be detached if the guest
+ ejects the medium, unless the drive is marked to handle ejects only
+ on a temporary basis</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: the medium UUID can be changed again when attaching
+ a medium for the first time, which allows using images which are
+ exact duplicates including the UUID</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: fixed possible data corruption under certain circumstances
+ with VHD and Parallels images (bug #9150)</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: fixed unnecessary expansion when cloning differential
+ images in VDI format</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: fixed detection code to handle empty files for VDI and
+ VMDK format</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: fixed access to CD/DVD images beyond 4GB when using the SATA
+ controller (bug #8592)</para>
+ </listitem>
+
+ <listitem>
+ <para>Floppy: several bugs have been fixed</para>
+ </listitem>
+
+ <listitem>
+ <para>Floppy: make it possible to unmount a host floppy disk (bug #6651)</para>
+ </listitem>
+
+ <listitem>
+ <para>BIOS: disk-related structures are now checksummed correctly (bug #8739)</para>
+ </listitem>
+
+ <listitem>
+ <para>USB: many fixes for the Windows USB host driver</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: reduced memory footprint</para>
+ </listitem>
+
+ <listitem>
+ <para>Networking: fixed the problem with segmentation offloading
+ when several VMs are transmitting in parallel</para>
+ </listitem>
+
+ <listitem>
+ <para>Networking: workaround for a bug in wireshark when operating
+ directly on a capture file created by VirtualBox</para>
+ </listitem>
+
+ <listitem>
+ <para>Serial: announce the serial devices in the ACPI tables to make
+ Windows guests find the virtual hardware (bug #7411)</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: support for TLS connections (see
+ <xref linkend="vrde-crypt"/>)</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: support for multimonitor client configurations with MS
+ RDP clients</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: fixed a rare screen corruption</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed <emphasis>GL_VERSION</emphasis> string for
+ different locales (bug #8916)</para>
+ </listitem>
+
+ <listitem>
+ <para>Web service: fixed timeout handling with HTTP 1.1 keepalive, and
+ be more robust when connections fail</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxSVC: fixed regression when several clients trigger autostart
+ simultaneously</para>
+ </listitem>
+
+ <listitem>
+ <para>Main: fixed incorrect handling of the medium location for media
+ which are not file based (e.g. iSCSI), which resulted in confusing
+ location values in many places</para>
+ </listitem>
+
+ <listitem>
+ <para>JAX-WS client bindings: fixed resource leak</para>
+ </listitem>
+
+ <listitem>
+ <para>Sources: fixed USB 2.0 support using extension packs for non-official
+ builds</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: fixed non-VT-x mode on Lion hosts</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows hosts: fixed copy'n'paste in the GUI and for the VM
+ window (bug #4491)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows hosts (64-bit only): enabled removing of all mediums when
+ removing a VM</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows hosts (64-bit only): enabled live snapshot deletion</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows hosts: use native controls in the installer (bug #5520)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed preemption issue with Solaris 11 hosts (builds
+ 166 and above)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: better control of USB device access on Solaris 11
+ hosts</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest Additions: improved driver installation on Windows guests</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest Additions: fixed high CPU usage while executing guest programs
+ from the host</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris Additions: fixed automounting of shared folders (bug #8014)</para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect1>
+
+ <sect1>
+ <title>Version 4.0.14 (2011-10-13)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>VMM: fixed 64bit guests on AMD Fusion CPUs (bug #8824)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed handling of the <emphasis>sysenter/sysexit</emphasis>
+ machine instructions in 64-bit guests on Intel hosts</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed the inclusion of additional information (license,
+ vendor, ...) on OVF export</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: when taking a snapshot from the VM selector, don't do
+ a live snapshot</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed spurious LCtrl key events on some Windows hosts
+ (4.0.6 regression; bug #5908)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: fixed <emphasis>extpack install --replace</emphasis></para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: fixed a rare screen corruption</para>
+ </listitem>
+
+ <listitem>
+ <para>E1000: fixed rare Windows 7 guest hangs, either at boot time
+ or when reconfiguring the network card in unusual setups (bug #6223)</para>
+ </listitem>
+
+ <listitem>
+ <para>Mouse support: fixed an off-by-one pointer position error
+ affecting Windows guests (bugs #7566, #9321)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: changed TCP connection establishment according to Winsock API
+ requirements (Windows hosts only; bug #8919)</para>
+ </listitem>
+
+ <listitem>
+ <para>VHD: fixed reads crossing block boundaries (bug #8532)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMDK: fixed progress indicator when creating split VMDK
+ images</para>
+ </listitem>
+
+ <listitem>
+ <para>Floppy: fixed medium size detection for physical mediums
+ (Windows hosts only)</para>
+ </listitem>
+ <listitem>
+ <para>VBoxSVC: made the path comparison OS independent when images are
+ registered (bug #9303)</para>
+ </listitem>
+
+ <listitem>
+ <para>Main: return the correct RDP default port fixing settings
+ warnings in the GUI if the remote display was enabled at runtime (bug #9368)</para>
+ </listitem>
+
+ <listitem>
+ <para>Main: fix VM initialization if a shared folder does not exist (bug #7941)</para>
+ </listitem>
+
+ <listitem>
+ <para>Main: fixed taking screen shots (e.g. the preview window) for
+ headless VMs if the Guest Additions are active</para>
+ </listitem>
+
+ <listitem>
+ <para>Main: fixed possible deadlock between hard disk enumeration and
+ the resetting of immutable disks (bug #9549)</para>
+ </listitem>
+
+ <listitem>
+ <para>OVA: fixed import of renamed OVA files (bug #9033)</para>
+ </listitem>
+
+ <listitem>
+ <para>Virtio-net: fixed the problem with UDP packets exceeding MTU
+ (bug #9370)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed starting EFI guests due to missing EFI ROM files
+ (bug #9535)</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: fix installation issues when installed as root
+ (bug #1578)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed file truncation on a shared folder with
+ some applications (bugs #9276, #9315)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: suppress an incorrect error message and allow
+ a shared folder to be mounted in multiple places (bug #9627)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: add support for X.Org Server 1.11 (bug #9519)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: fixed <emphasis>llseek</emphasis> for Linux kernels
+ 2.6.37 and above</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: start VBoxService correctly on openSUSE 12.1
+ (bug #6229)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: properly finish the installation even if the
+ compilation of the DRM module fails (which is not fatal)</para>
+ </listitem>
+
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Version 4.0.12 (2011-07-15)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>Mac OS X hosts: Lion fixes</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed preemption issue with Solaris 11 hosts (builds
+ 166 and above)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: more convenient configuration of storage controller
+ attachments by automatically determining the port or device parameter
+ when a storage controller has only one port or device per port (bug #9188)</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: fixed possible data corruption under certain circumstances
+ with VHD and Parallels images (bug #9150)</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: fixed access to CD/DVD images beyond 4GB when using the SATA
+ controller (bug #8592)</para>
+ </listitem>
+
+ <listitem>
+ <para>Floppy: make it possible to unmount a host floppy disk (bug #6651)</para>
+ </listitem>
+
+ <listitem>
+ <para>Networking: fixed the problem with segmentation offloading
+ when several VMs were transmitting at once</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed <emphasis>GL_VERSION</emphasis> string for
+ different locales (bug #8916)</para>
+ </listitem>
+
+ <listitem>
+ <para>Sources: fixed USB 2.0 support using extension packs for non-official
+ builds</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris Additions: fixed automounting of shared folders (bug #8014)</para>
+ </listitem>
+
+ </itemizedlist>
+ </sect1>
+ <sect1>
+ <title>Version 4.0.10 (2011-06-22)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>GUI: fixed disappearing settings widgets on KDE hosts (bug #6809)</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: fixed hang under rare circumstances with flat VMDK images</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: a saved VM could not be restored under certain circumstances
+ after the host kernel was updated (bug #8983)</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: refuse to create a medium with an invalid variant
+ (for example Split2G with VDI; bug #7227)</para>
+ </listitem>
+
+ <listitem>
+ <para>iSCSI: pause the VM if a request times out</para>
+ </listitem>
+
+ <listitem>
+ <para>Snapshots: none of the hard disk attachments must be attached to
+ another VM in normal mode when creating a snapshot</para>
+ </listitem>
+
+ <listitem>
+ <para>USB: fixed occasional VM hangs with SMP guests (bug #4580)</para>
+ </listitem>
+
+ <listitem>
+ <para>USB: proper device detection on RHEL/OEL/CentOS 5 guests
+ (partial fix for bug #8978)</para>
+ </listitem>
+
+ <listitem>
+ <para>ACPI: force the ACPI timer to return monotonic values for improve behavior
+ with SMP Linux guests (bug #8511 and others)</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: fixed screen corruption under rare circumstances (bug #8977)</para>
+ </listitem>
+
+ <listitem>
+ <para>rdesktop-vrdp: updated to version 1.7.0</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF: under rare circumstances some data at the end of a VMDK
+ file was not written during export</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: Lion fixes</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: GNOME 3 fix</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: fixed VT-x detection on Linux 3.0 hosts (bug #9071)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: fixed Python 2.7 bindings in the universal Linux
+ binaries</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows hosts: fixed leak of thread and process handles</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed bug when determining the extended version
+ of the Guest Additions (4.0.8 regression; bug #8948)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris Additions: fixed installation to 64-bit Solaris 10u9 guests
+ (4.0.8 regression)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: RHEL6.1/OL6.1 compile fix</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: fixed a memory leak during <computeroutput>VBoxManage
+ guestcontrol execute</computeroutput> (bug #9068)</para>
+ </listitem>
+
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Version 4.0.8 (2011-05-16)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>Mac OS X hosts: fixed incompatibility with recent Mac OS X
+ versions in 64-bit mode (bug #8474)</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: fixed incompatibility with hosts with more
+ than 16 cores (bug #8389)</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: fixed painting corruptions on a second monitor in
+ 64-bit mode (bug #7606)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: restored functionality to set an empty host key to disallow any
+ host key combination (4.0.6 regression; bug #8793)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: more expressive error messages for USB proxy permission
+ problems (mainly Linux hosts; bug #8823)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: added <computeroutput>controlvm screenshotpng</computeroutput>
+ subcommand for saving the screenshot of a running VM in PNG format</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxHeadless: fixed potential crash during shutdown
+ (Windows hosts only)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: built-in services use the correct Ethernet addresses in
+ Ethernet header and in ARP requests</para>
+ </listitem>
+
+ <listitem>
+ <para>Host-only networking: fixed adapter reference counting</para>
+ </listitem>
+
+ <listitem>
+ <para>E1000: fixed rare guest crashes with Linux SMP guests (bug #8755)</para>
+ </listitem>
+
+ <listitem>
+ <para>SATA: fixed guest disk corruption under rare circumstances
+ (only relevant for guests with more than 2GB RAM; bug #8826)</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: fixed data corruption after a snapshot was taken with
+ asynchronous I/O enabled (bug #8498)</para>
+ </listitem>
+
+ <listitem>
+ <para>Floppy: several improvement</para>
+ </listitem>
+
+ <listitem>
+ <para>HPET: another fix for time jumps (bug #8707)</para>
+ </listitem>
+
+ <listitem>
+ <para>USB: use correct permissions when creating /dev/vboxusb
+ (Linux hosts only)</para>
+ </listitem>
+
+ <listitem>
+ <para>USB: removed assumption that string descriptors are null-terminated
+ (Windows hosts only)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed a potential crash when resizing the guest
+ window</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed GNOME 3 rendering under Ubuntu 11.04 and
+ Fedora 15</para>
+ </listitem>
+
+ <listitem>
+ <para>Snapshots: fixed another bug which could lose entries in the media
+ registry when restoring a snapshot (bug #8363)</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared Folders: don't stop mounting the other valid folders if one
+ host folder is inaccessible (4.0.6 regression)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: check whether gcc and make are installed before
+ building kernel modules (bug #8795)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris Additions: added support for X.Org Server 1.10</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest Additions: fixed inappropriate Guest Additions update
+ notification when using vendor-specific version suffixes (bug #8844)</para>
+ </listitem>
+
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Version 4.0.6 (2011-04-21)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>VMM: fixed incorrect handling of ballooned pages when restoring
+ a VMM from a saved state</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: don't crash on hosts with more than 64 cores / hyperthreads;
+ implemented support for up to 256 host cores (except Windows hosts; bug #8489)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed guru meditation for PAE guests running on hosts without PAE
+ (bug #8006)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed slow Linux guests with raw mode and recent guest kernels
+ (bug #8726)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: support host key combinations (bug #979)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed progress indicator (bug #7814)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: show the mouse pointer while the VM is paused if the USB
+ tablet mouse emulation is used (bug #6799)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: adapt the snapshot folder as well when renaming a VM
+ (bug #8469)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: persistently remember the last folders of the disk/DVD/floppy
+ selectors</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: never allow to start a VM with USB-2.0 activated if the
+ proper extension pack is missing (bug #8182)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed hang/crash when opening a file dialog in an non-existing
+ folder (bug #8673)</para>
+ </listitem>
+
+ <listitem>
+ <para>Snapshots: fixed a bug which could lose entries in the media
+ registry when restoring a snapshot (bug #8363)</para>
+ </listitem>
+
+ <listitem>
+ <para>Snapshots: allow snapshots to be stored in the VM directory</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed a crash if a VM was forced to terminate
+ (Windows hosts only; bug #7133)</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: fixed memory leak (4.0 regression; bug #7966)</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: fixed access to iSCSI targets over internal network</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: fixed reading from disks with more than one snapshot for
+ VHD and VMDK images with disabled host cache (bug #8408)</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: fixed a possible hang during VM suspend after an
+ I/O error occurred</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: fixed a possible hang during VM suspend / reset
+ (bug #8276, #8294)</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: automatically create a diff image when attaching a
+ streamOptimized VMDK image to a VM</para>
+ </listitem>
+
+ <listitem>
+ <para>ATA/SATA: fixed automounting of virtual CD/DVD mediums with recent
+ Linux distributions by correctly reporting the current profile as 'none'
+ if no medium is present</para>
+ </listitem>
+
+ <listitem>
+ <para>Buslogic: fixed emulation for certain guests (e.g. jRockit VE)</para>
+ </listitem>
+
+ <listitem>
+ <para>Host-Only Networking: fixed interface creation failure on Windows
+ hosts (4.0.4 regression; bug #8362)</para>
+ </listitem>
+
+ <listitem>
+ <para>Host-Only &amp; Bridged &amp; Internal Networking: fix for processing
+ promiscuous mode requests by VMs, defaulting to switch behaviour</para>
+ </listitem>
+
+ <listitem>
+ <para>Host-Only Networking: fixed connectivity issue after resuming the
+ host from sleep (bug #3625)</para>
+ </listitem>
+
+ <listitem>
+ <para>Bridged Networking: support for interface bonding on Mac OS X hosts (bug #8731)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed processing of ARP announcements for guests with static
+ assigned IPs (bug #8609)</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: backward compatibility with VRDPAuth external authentication
+ library (bug #8063)</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared Folders: don't fail to start a VM if a path is not absolute,
+ for example when importing an OVF from a different host (bug #7941)</para>
+ </listitem>
+
+ <listitem>
+ <para>Audio: fixed crash under certain conditions (bug #8527)</para>
+ </listitem>
+
+ <listitem>
+ <para>USB: fixed a crash when plugging certain USB devices (bug #8699)</para>
+ </listitem>
+
+ <listitem>
+ <para>HPET: fixed time jumps when reading the counter (bug #8707)</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF/OVA: automatically adjust disk paths if the VM name is
+ changed on import</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF/OVA: fix export to slow medias</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF/OVA: automatically repair inconsistent appliances with
+ multiple disks (bug #8253)</para>
+ </listitem>
+
+ <listitem>
+ <para>rdesktop-vrdp: fixed an assertion triggered under certain conditions
+ (bug #8593)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows hosts: fixed occasional hangs during VM shutdown because
+ sometimes COM was not properly uninitialized</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: prevent the mouse from leaving the VM window while
+ captured</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: keep aspect ratio while resizing in scale mode
+ (shift for old behaviour) (part of bug #7822)</para>
+ </listitem>
+
+ <listitem>
+ <para>X11 hosts: fixed Yen key support (bug #8438)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>X11 hosts: fixed a regression which caused Host+F1 to pop up
+ help instead of sending Ctrl+Alt+F1</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts / Linux Additions: mangle IPRT symbols to allow installing
+ VirtualBox inside a VM while the Guest Additions are active (bug #5686)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts / Linux guests: workaround for a bug in GLIBC older than
+ version 1.11 leading to crashes under certain conditions (signed/unsigned
+ problem with memchr on 64-bit machines)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed a deadlock in event semaphores that could lead
+ to unkillable VM processes</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed Sysprep parameter handling</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed spontaneous guest reboots under certain
+ circumstances (4.0.2 regression; bugs #8406, #8429)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: added auto logon support for locked workstations
+ on legacy Windows versions</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed driver bugcheck error when handling PnP
+ messages (4.0 regression; bug #8367)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed memory leak in VBoxVideo</para>
+ </listitem>
+
+ <listitem>
+ <para>X11 Additions: added support for X.Org Server 1.10 final</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: Linux kernel 2.6.39-rc1 fixes</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: improved auto-run support (bug #5509)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: fix mouse support on SUSE 11 SP 1 guests
+ (bug #7946)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris Additions: added support for X.Org Server 1.9</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest Additions: various bugfixes for guest control execution</para>
+ </listitem>
+
+ <listitem>
+ <para>Web service: use own log file, with log rotation to limit size</para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect1>
+
+ <sect1>
+ <title>Version 4.0.4 (2011-02-17)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>VMM: fixed recompiler crashes under certain conditions
+ (bugs #8255, #8319 and further)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed running 64-bit guests on 32-bit host with nested paging
+ enabled on AMD CPUs (4.0 regression; bug #7938)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed timing issues / hangs for certain guests using the
+ programmable interval timer (bugs #8033 and #8062)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: large page and monitoring fixes for live snapshots
+ (bugs #7910, #8059, #8125)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed error message when trying to exceed the maximum
+ number of host network interfaces</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed saving of changes to the metadata of an existing
+ snapshot (bug #8145)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed rare crash on X11 hosts (bug #8131)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: when selecting a shared folder, start the file dialog in
+ the users home directory (bug #8017)</para>
+ </listitem>
+
+ <listitem>
+ <para>ExtPack: enforce the correct permissions which might be restricted
+ by umask when creating directories (non-Windows hosts only; bug #7878)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxSDL: fixed crash when starting by specifying the VM UUID
+ (4.0 regression; bug #8342)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: allow savestate even if the VM is already paused</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: fixed <emphasis>modifyvm --synthcpu</emphasis>
+ (bug #6577)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: fixed hang when doing <emphasis>guestcontrol execute
+ --wait-for exit</emphasis> and displaying process status on exit
+ (bug #8235)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: decreased CPU load during <emphasis>guestcontrol execute
+ --wait-for exit/stdout</emphasis> while waiting for the guest process
+ to terminate (bug #7872)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: fixed <emphasis>list hostdvds/hostfloppies</emphasis></para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: fixed <emphasis>storageattach</emphasis> for host
+ DVD drives and host floppy drives</para>
+ </listitem>
+
+ <listitem>
+ <para>Metrics: introduced <emphasis>RAM/VMM</emphasis> base metric</para>
+ </listitem>
+
+ <listitem>
+ <para>Main: improved sanity check when taking a VM screen shot
+ (bug #7966)</para>
+ </listitem>
+
+ <listitem>
+ <para>Main: fixed a crash under rare circumstances if a VM failed to start</para>
+ </listitem>
+
+ <listitem>
+ <para>Main: fixed attaching of immutable disk images (bug #8105)</para>
+ </listitem>
+
+ <listitem>
+ <para>Main: fixed a crash at VM shutdown (bug #6443)</para>
+ </listitem>
+
+ <listitem>
+ <para>Main: fixed incorrect handling of cross-referenced medium
+ attachments (bug #8129)</para>
+ </listitem>
+
+ <listitem>
+ <para>Settings: fixed truncating of big integer values (4.0 regression)</para>
+ </listitem>
+
+ <listitem>
+ <para>Settings: properly store the ICH9 chipset type (bug #8123)</para>
+ </listitem>
+
+ <listitem>
+ <para>Host-Only &amp; Bridged Networking: fixed VBox DHCP server startup issue
+ for Windows hosts (4.0 regression; bug #7905)</para>
+ </listitem>
+
+ <listitem>
+ <para>Host-Only Networking: re-create vboxnetX interfaces after
+ vboxnetadp.ko module reload on Linux and Darwin (bugs #5934, #6341)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed an mbuf leak under rare circumstances (bug #7459)</para>
+ </listitem>
+
+ <listitem>
+ <para>ACPI: don't allow the guest to enter S4 by default and don't
+ announce S1 and S4 in the ACPI tables if disabled (bug #8008)</para>
+ </listitem>
+
+ <listitem>
+ <para>Graphics card: made re-enabling disabled screens work correctly
+ to prevent problems when X11 guests enter screen saving mode
+ (bug #8122)</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: fixed write errors with snapshots if the host cache is
+ disabled (4.0 regression; bug #8221)</para>
+ </listitem>
+
+ <listitem>
+ <para>ATA/SATA: fixed reset handling after ACPI suspend/resume</para>
+ </listitem>
+
+ <listitem>
+ <para>BusLogic: fixed hang with SMP VMs</para>
+ </listitem>
+
+ <listitem>
+ <para>Serial: another attempt to prevent lost characters during transmission
+ (bug #1548)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts/guests: Linux 2.6.38-rc1 compile fixes</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: fixed VBoxSVC crash when listing host interfaces
+ without default gateway (64-bit hosts only; bug #7955)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris/Darwin hosts: fixed VM CPU execution cap</para>
+ </listitem>
+
+ <listitem>
+ <para>X.Org guests: fixed a crash on X server restart
+ (bug #8231)</para>
+ </listitem>
+
+ <listitem>
+ <para>X.Org guests: support X.Org Server 1.10 pre-release and Ubuntu
+ 11.04 Alpha</para>
+ </listitem>
+
+ <listitem>
+ <para>X.Org guests: Add EDID emulation in the graphics driver to
+ prevent GNOME settings daemon changing the mode on login</para>
+ </listitem>
+
+ <listitem>
+ <para>X.Org guests: never send graphics modes to the host that older
+ VirtualBox versions can't handle</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: fixed a memory leak in the shared folders code if
+ a host link is not readable (bug #8185)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed handling of Security Attention Sequence (SAS)
+ with VBoxGINA</para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect1>
+
+ <sect1>
+ <title>Version 4.0.2 (2011-01-18)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>GUI: don't crash if a removable host drive referenced from the VM
+ settings vanished</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed a crash when using the KDE4 Oxygen theme and clicked
+ on the settings button (4.0 regression; bug #7875)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: properly warn if the machine folder cannot be
+ created (bug #8031)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: several fixes for multimonitor X11 guests</para>
+ </listitem>
+
+ <listitem>
+ <para>ExtPack: don't make the installer helper application suid root
+ (Linux .deb/.rpm packages only)</para>
+ </listitem>
+
+ <listitem>
+ <para>ExtPack: improved user experience on Vista / Windows 7 when installing
+ an extension pack</para>
+ </listitem>
+
+ <listitem>
+ <para>ExtPack: fixed issue with non-ascii characters in the path name
+ during installing an extension pack (bug #9717)</para>
+ </listitem>
+
+ <listitem>
+ <para>ExtPack: fixed SELinux issues on 32-bit Linux hosts</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: Host-only interface creation and removal is now
+ supported for all platforms except Solaris (bug #7741)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: fixed segmentation fault when removing non-existent
+ host-only interface</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: fixed possible crashes with VMDK/VHD images with snapshots
+ and asynchronous I/O (4.0 regression)</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: don't eject the physical medium if a DVD/CDROM/floppy drive is
+ detached from a VM (bug #5825)</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: be more robust when a faulty guest sends ATA commands to an
+ ATAPI device (bug #6597)</para>
+ </listitem>
+
+ <listitem>
+ <para>Parallels: fixed deletion of the image during suspend, pause or
+ power off (4.0 regression)</para>
+ </listitem>
+
+ <listitem>
+ <para>Bridged networking: fixed host kernel panic when bridging
+ to devices with no TX queue (4.0 regression; Linux hosts only; bug #7908)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: port-forwarding rule registration respects protocol parameter (bug #8094)</para>
+ </listitem>
+
+ <listitem>
+ <para>E1000: fixed PXE boot issues with WDS (bug #6330)</para>
+ </listitem>
+
+ <listitem>
+ <para>Virtio-net: fixed the issue with TX performance in some Linux
+ guests</para>
+ </listitem>
+
+ <listitem>
+ <para>ICH9: fixed VM crash (software virtualization only; bug #7885)</para>
+ </listitem>
+
+ <listitem>
+ <para>VGA: fixed VESA screen issue (4.0 regression; bug #7986)</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared Folders: fixed parameter parsing when creating symbolic
+ links, fixes 32-bit/64-bit bitness issue (bug #818)</para>
+ </listitem>
+
+ <listitem>
+ <para>Main: fixed crash under rare circumstances due to an invalid
+ logging string (4.0 regression)</para>
+ </listitem>
+
+ <listitem>
+ <para>Main: improve error information propagation for errors preventing
+ a VM start</para>
+ </listitem>
+
+ <listitem>
+ <para>Main: fixed problems with snapshots and non-ASCII characters in
+ machine paths (bug #8024)</para>
+ </listitem>
+
+ <listitem>
+ <para>Web service: now listens to localhost by default as documented
+ (bug #6067)</para>
+ </listitem>
+
+ <listitem>
+ <para>Settings: do not fail loading machine settings if removeable drive attachment (host drive or image)
+ cannot be found; with 4.0 this is much more likely when machines are moved from one host to another</para>
+ </listitem>
+
+ <listitem>
+ <para>Settings: fixed issue that changing a snapshot name or description was
+ not saved to machine XML</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF/OVA: fixed import of files created by other OVF tools (bug
+ #7983)</para>
+ </listitem>
+
+ <listitem>
+ <para>rdesktop-vrdp: fix a crash during USB device enumeration (bug
+ #7981)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: fixed a crash during USB device enumeration</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: try a bit harder to allocate memory (bug #8035; 4.0
+ regression)</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest Additions: fixed parsing of parameters for guest control in
+ VBoxService (4.0 regression; bug #8010)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Guest Additions: automatic logon on Windows Vista/Windows 7 now supports
+ unlocking previously locked workstations</para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect1>
+
+ <sect1>
+ <title>Version 4.0.0 (2010-12-22)</title>
+
+ <para>This version is a major update. The following major new features
+ were added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>Reorganization of VirtualBox into a base package and Extension Packs; see <xref linkend="intro-installing" /></para>
+ </listitem>
+
+ <listitem>
+ <para>New settings/disk file layout for VM portability; see <xref linkend="vboxconfigdata" /></para>
+ </listitem>
+
+ <listitem>
+ <para>Major rework of the GUI (now called "VirtualBox Manager"):
+ <itemizedlist>
+ <listitem>
+ <para>Redesigned user interface with guest window preview (also for screenshots)</para>
+ </listitem>
+
+ <listitem>
+ <para>New "scale" display mode with scaled guest display; see <xref linkend="intro-resize-window" /></para>
+ </listitem>
+
+ <listitem>
+ <para>Support for creating and starting <computeroutput>.vbox</computeroutput> desktop shortcuts (bug #1889)</para>
+ </listitem>
+
+ <listitem>
+ <para>The VM list is now sortable</para>
+ </listitem>
+
+ <listitem>
+ <para>Machines can now be deleted easily without a trace including snapshots and saved
+ states, and optionally including attached
+ disk images (bug #5511; also, <computeroutput>VBoxManage unregistervm --delete</computeroutput>
+ can do the same now)</para>
+ </listitem>
+
+ <listitem>
+ <para>Built-in creation of desktop file shortcuts to start VMs on double click (bug #2322)</para>
+ </listitem>
+
+ </itemizedlist>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: support more than 1.5/2 GB guest RAM on 32-bit hosts</para>
+ </listitem>
+
+ <listitem>
+ <para>New virtual hardware:
+ <itemizedlist>
+ <listitem>
+ <para>Intel ICH9 chipset with three PCI buses, PCI Express and Message Signaled Interrupts (MSI);
+ see <xref linkend="settings-motherboard" /></para>
+ </listitem>
+
+ <listitem>
+ <para>Intel HD Audio, for better support of modern guest operating systems
+ (e.g. 64-bit Windows; bug #2785)</para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Improvements to OVF support (see <xref linkend="ovf" />):
+ <itemizedlist>
+ <listitem>
+ <para>Open Virtualization Format Archive (OVA) support</para>
+ </listitem>
+
+ <listitem>
+ <para>Significant performance improvements during export and import
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Creation of the manifest file on export is optional
+ now</para>
+ </listitem>
+
+ <listitem>
+ <para>Imported disks can have formats other than VMDK</para>
+ </listitem>
+
+ </itemizedlist>
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Resource control: added support for limiting a VM's CPU time and IO
+ bandwidth; see <xref linkend="storage-bandwidth-limit" /></para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: support asynchronous I/O for iSCSI, VMDK, VHD and
+ Parallels images</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: support for resizing VDI and VHD images; see <xref linkend="vboxmanage-modifyvdi" /></para>
+ </listitem>
+
+ <listitem>
+ <para>Guest Additions: support for multiple virtual screens in Linux
+ and Solaris guests using X.Org server 1.3 and later</para>
+ </listitem>
+
+ <listitem>
+ <para>Language bindings: uniform Java bindings for both local
+ (COM/XPCOM) and remote (SOAP) invocation APIs</para>
+ </listitem>
+
+ </itemizedlist>
+
+ <para>In addition, the following items were fixed and/or added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>VMM: Enable large page support by default on 64-bit hosts
+ (applies to nested paging only)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed guru meditation when running Minix (VT-x only; bug #6557)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed crash under certain circumstances (Linux hosts only,
+ non VT-x/AMD-V mode only; bugs #4529 and #7819)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: add configuration dialog for port forwarding in NAT mode
+ (bug #1657)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: show the guest window content on save and restore</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: certain GUI warnings don't stop the VM output anymore</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed black full screen minitoolbar on KDE4 hosts
+ (Linux hosts only; bug #5449)</para>
+ </listitem>
+
+ <listitem>
+ <para>BIOS: implemented multi-sector reading to speed up booting of certain
+ guests (e.g. Solaris)</para>
+ </listitem>
+
+ <listitem>
+ <para>Bridged networking: improved throughput by filtering out outgoing
+ packets intended for the host before they reach the physical network
+ (Linux hosts only; bug #7792)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: allow use of <emphasis>CR_SYSTEM_GL_PATH</emphasis>
+ again (bug #6864)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed various clipping/visibility issues (bugs #5659,
+ #5794, #5848, #6018, #6187, #6570)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: guest application stack corruption when using
+ glGetVertexAttrib[ifd]v (bug #7395)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed OpenGL support for libMesa 7.9</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed Unity/Compiz crashes on natty</para>
+ </listitem>
+
+ <listitem>
+ <para>2D Video acceleration: multimonitor support</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: fixed rare crash in multimonitor configuration</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: support for upstream audio</para>
+ </listitem>
+
+ <listitem>
+ <para>Display: fixed occasional guest resize crash</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: port forwarding rules can be applied at runtime</para>
+ </listitem>
+
+ <listitem>
+ <para>SATA: allow to attach CD/DVD-ROM drives including passthrough
+ (bug #7058)</para>
+ </listitem>
+
+ <listitem>
+ <para>Floppy: support readonly image files, taking this as the
+ criteria for making the medium readonly (bug #5651)</para>
+ </listitem>
+
+ <listitem>
+ <para>Audio: fixed memory corruption during playback under rare
+ circumstances</para>
+ </listitem>
+
+ <listitem>
+ <para>Audio: the DirectSound backend now allows VMs to be audible when
+ another DirectSound application is active, including another VM (bug
+ #5578)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>EFI: support for SATA disks and CDROMs</para>
+ </listitem>
+
+ <listitem>
+ <para>BIOS: reduce the stack usage of the VESA BIOS function
+ <emphasis>#4F01</emphasis> (Quake fix)</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF/OVA: fixed export of VMs with iSCSI disks</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: Apple DMG image support for the virtual CD/DVD (bug
+ #6760)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux host USB support: introduced a less invasive way of
+ accessing raw USB devices (bugs #1093, #5345, #7759)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: support recent Linux kernels with
+ <emphasis>CONFIG_DEBUG_SET_MODULE_RONX</emphasis> set</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest Additions: Shared Folders now can be marked as being auto-mounted
+ on Windows, Linux and Solaris guests</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: Shared Folders now support symbolic links (bug #818)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: combined 32-bit and 64-bit additions into one
+ file</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: automatic logon on Windows Vista/Windows 7 is now able
+ to handle renamed user accounts; added various bugfixes</para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect1>
+
+ <sect1>
+ <title>Version 3.2.12 (2010-11-30)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>VMM: fixed rare host crash when running 64-bit guests on 32-bit
+ hosts (bug #7577)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed host reboots under rare circumstances due to NMIs
+ triggered by active performance counters (Linux hosts in
+ non-VT-x/AMD-V mode only; bug #4529)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed out of memory guru meditation for large memory guests (bug #7586)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed a guru meditation related to large pages</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: use new VT-x feature to keep the guest from hogging the CPU</para>
+ </listitem>
+
+ <listitem>
+ <para>Snapshots: implemented deleting the last remaining snapshot while
+ the VM is running</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: perform the checks for exceeding the size limit of the host file
+ system and for broken asynchronous I/O on older Linux kernels with ext4 / xfs
+ file systems not only when starting the VM from scratch but also when
+ starting from a saved state</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed memory leak (3.2.0 regression; bugs #6918, #7353)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed Linux NFS root issue (bugs #7299)</para>
+ </listitem>
+
+ <listitem>
+ <para>Networking: fixed VM reset handling in e1000</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: fixed rare crash in multimonitor configuration</para>
+ </listitem>
+
+ <listitem>
+ <para>Display: fixed occasional guest resize crash</para>
+ </listitem>
+
+ <listitem>
+ <para>Mouse: don't send relative mouse events together with absolute
+ mouse events (3.2.10 regression; bug #7571)</para>
+ </listitem>
+
+ <listitem>
+ <para>Keyboard: fixes for the USB keyboard emulation;
+ fixes for Korean keyboards</para>
+ </listitem>
+
+ <listitem>
+ <para>Serial: don't hang if the host device would block during
+ open (bugs #5756, #5380)</para>
+ </listitem>
+
+ <listitem>
+ <para>Serial: fixed modem status lines (Linux hosts only; bug #812)</para>
+ </listitem>
+
+ <listitem>
+ <para>Graphics: Horizontal resolutions are no longer restricted to a
+ multiple of 8 pixels (bug #2047; requires Guest Additions update).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>USB: fixed a crash with older Linux kernels and non-ASCII characters
+ in device strings (Linux hosts only; bug #6983, #7158, #7733; version
+ 3.2.8 contained an incomplete fix)</para>
+ </listitem>
+
+ <listitem>
+ <para>USB: fixed a crash under rare circumstances (bug #7409; Windows hosts
+ only)</para>
+ </listitem>
+
+ <listitem>
+ <para>"iSCSI: respond to NOP-In requests from the target immediately to avoid
+ being disconnected if the guest is idle</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed a crash under certain circumstances (bug #7659)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed crashes for GLUT based apps (bug #6848)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: added missing GLX 1.3 functionality (bugs #7652, #7195)</para>
+ </listitem>
+
+ <listitem>
+ <para>2D Video acceleration: fixed potential deadlock when saving the VM
+ state (bug #4124)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows hosts: another fix for BSODs under certain circumstances in
+ VBoxNetFlt.sys (bug #7601)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed host USB DVD drive detection</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: fixed swapped keys for certain ISO keyboard types
+ (bug #2996)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: added link state handling for TAP devices needed for proper
+ operation with bridged networking on kernels 2.6.36 and above (bug #7649)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts/guests: Linux 2.6.37 fixes</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: properly compile the vboxvideo module if DKMS
+ is not installed (bug #7572)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: fixed a memory leak when accessing non-existing
+ files on a Shared Folders (bug #7705)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: skip none-mapped user accounts when enumerating
+ user accounts for VM information</para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect1>
+
+ <sect1>
+ <title>Version 3.2.10 (2010-10-08)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>VMM: V8086 mode fix for legacy DOS/Windows guests with EMM386
+ (3.2.8 regression)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: stability fix (bug #7342)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed a Guru meditation related to large pages (bug #7300)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed support for large pages on Linux hosts</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed a Guru meditation for large memory 64-bit guests on 32-bit
+ hosts with nested paging (bug #7544)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: performance improvements for VMs with more than
+ 2GB RAM (bug #6928)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed host key handling if the host key is set to Left Alt
+ (Linux/Solaris hosts only; 3.2.0 regression; bug #6758)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: the VM can be minimized from the mini toolbar
+ (bug #4952)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: handle Ctrl+Break properly on X11 hosts (3.2.0 regression;
+ bug #6122)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed the case where the user aborted the media selector
+ for selecting the boot hard disk from the VM wizard</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: added a check for Linux kernels 2.6.36 or later which are known
+ to have the asynchronous I/O bug on ext4 / xfs file systems fixed
+ (Linux hosts only)</para>
+ </listitem>
+
+ <listitem>
+ <para>OpenSolaris guests: use SATA controller by default</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: fixed I/O errors in the guest after compacting VDI
+ images (3.2.6 regression; bug #7294)</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: automatically repair base disk images with non-zero
+ parent UUID which made them inaccessible (bug #7289)</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: fixed corrupted images if a merge operation was
+ canceled</para>
+ </listitem>
+
+ <listitem>
+ <para>IDE: added ATAPI passthrough support for audio CDs</para>
+ </listitem>
+
+ <listitem>
+ <para>SATA: fixed a potential hang during boot of recent Solaris guests</para>
+ </listitem>
+
+ <listitem>
+ <para>SATA: handle out of disk space and similar conditions better</para>
+ </listitem>
+
+ <listitem>
+ <para>iSCSI: fixed sporadic hangs when closing the connection</para>
+ </listitem>
+
+ <listitem>
+ <para>VGA: fixed missing redraw with multiple screens under certain
+ circumstances (bug #7291)</para>
+ </listitem>
+
+ <listitem>
+ <para>VGA: serveral small fixes for legacy VGA graphics modes</para>
+ </listitem>
+
+ <listitem>
+ <para>Bridged networking: fixed occasional host freeze during VM shutdown
+ (Linux hosts only)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: don't check for the existence of the TFTP prefix when delivering
+ a file via bootp (bug #7384)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed resolving of names at the host resolver (bug #7138)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: under rare conditions the NAT engine consumed 100% CPU load
+ (non-Windows hosts only)</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: fixed memory leak under certain circumstances (bug #5966)</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: fixed missing redraws with Windows guests under certain
+ circumstances</para>
+ </listitem>
+
+ <listitem>
+ <para>USB: properly discard blocking outstanding bulk URBs, fixes some
+ printers</para>
+ </listitem>
+
+ <listitem>
+ <para>USB: Blackberry fix (bug #6465)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxHeadless: fixed event queue processing problems which led to
+ hangs if the VM could not be started successfully</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: don't crash if parameters with invalid characters
+ are passed (bug #7388)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: <computeroutput>clonehd</computeroutput>: fixed a
+ bug where the command aborted with an error message under rare
+ circumstances</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage <computeroutput>metrics</computeroutput>: made it work
+ for directly started VMs again (3.2.8 regression; bug #7482)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: report <emphasis>GLX_ARB_get_proc_address</emphasis>
+ as supported extension</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: guest application stack corruption when using
+ <emphasis>glGetVertexAttrib[ifd]v</emphasis> (bug #7395)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed broken 3D support when switching to
+ full screen / seamless modes (bug #7314)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed 32bit OpenGL apps under 64bit Windows XP/Vista (bug #7066)</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF: fixed bug when exporting a VM with multiple attached disks
+ (bug #7366)</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF: fixed slow export for certain filesystems (bug #3719)</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF: disabled manifest (.mf file) support; manifests are no
+ longer verified on import nor written on export</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared clipboard/Windows: improved the reliability of the shared
+ clipboard on Windows hosts and guest (partial fix to bug #5266)</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared Folders: don't show an empty directory if filenames with an
+ invalid encoding exist on the host (bug #7349)</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared Folders: return the proper error code when trying
+ to list files for a non-existing wildcard (bug #7004)</para>
+ </listitem>
+
+ <listitem>
+ <para>Audio: fixed guest memory corruption when capturing from the
+ NULL audio backend (bug #6911)</para>
+ </listitem>
+
+ <listitem>
+ <para>Audio: improved playback quality (less choppy)</para>
+ </listitem>
+
+ <listitem>
+ <para>Web service: avoid unnecessary creation of idle threads</para>
+ </listitem>
+
+ <listitem>
+ <para>Additions: fixed bug in the guest execution feature when passing
+ more than one environment variable</para>
+ </listitem>
+
+ <listitem>
+ <para>Additions: refresh all guest properties written by VBoxService
+ after the VM was restored from a saved state</para>
+ </listitem>
+
+ <listitem>
+ <para>Additions: fixed a <emphasis>division by zero</emphasis> crash of
+ VBoxService under certain circumstances</para>
+ </listitem>
+
+ <listitem>
+ <para>Additions: immediately resynchronize the guest time with the host
+ time after the VM was restored from a saved state (bug #4018)</para>
+ </listitem>
+
+ <listitem>
+ <para>Additions/Windows: fixed <emphasis>LsaEnumerate</emphasis> error when
+ enumerating logged in users</para>
+ </listitem>
+
+ <listitem>
+ <para>Additions/X.Org: support X.Org Server 1.9 (bug #7306)</para>
+ </listitem>
+
+ <listitem>
+ <para>Additions/X.Org: don't crash VBoxClient during reboot</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed host DVD drive enumeration on Solaris 10</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: added a custom core dumper to procure more data
+ in the event of a VM crash</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris guests: fixed user idle detection</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris guests: fixed a possible panic in Shared Folders when using
+ the wrong user or group IDs (bug #7295)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris guests: fixed Shared Folders from truncating files to 2GB on
+ 32-bit guests (bug #7324)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows hosts: fixed a BSOD under certain circumstances in VBoxNetFlt.sys
+ (bug #7448)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts/guests: Linux 2.6.36 fixes</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts/guests: DKMS fixes (bug #5817)</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: fixed missing dock menu entries (bug #7392)</para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect1>
+
+ <sect1>
+ <title>Version 3.2.8 (2010-08-05)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>VMM: properly terminate the VM with an error if the guest is trying
+ to switch to the PAE mode but PAE is disabled in the VM settings</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: switch to native file dialogs (Windows hosts only; bug #5459)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: don't use native file dialogs on KDE hosts (Linux hosts only;
+ bug #6809)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed <emphasis>GL_EXT_texture_sRGB</emphasis> support</para>
+ </listitem>
+
+ <listitem>
+ <para>PXE: fixed ZENworks PXE boot regression</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF: fixed slower export and larger images under certain
+ circumstances (3.2.6 regression; bug #7073)</para>
+ </listitem>
+
+ <listitem>
+ <para>USB: properly signal an interrupt if the port suspend status
+ changes</para>
+ </listitem>
+
+ <listitem>
+ <para>USB: respect the remote-only filter</para>
+ </listitem>
+
+ <listitem>
+ <para>USB: avoid VM hang when changing the configuration of
+ certain devices (Windows hosts only)</para>
+ </listitem>
+
+ <listitem>
+ <para>USB: fix a crash with older Linux kernels and non-ASCII characters
+ in device strings (Linux hosts only; bug #6983)</para>
+ </listitem>
+
+ <listitem>
+ <para>PageFusion: fixed conflict with the guest execution feature</para>
+ </listitem>
+
+ <listitem>
+ <para>PageFusion: fixed stability issues with a large number of VMs</para>
+ </listitem>
+
+ <listitem>
+ <para>PageFusion: fixed host crashes with guest SMP and Win64 guests </para>
+ </listitem>
+
+ <listitem>
+ <para>Memory ballooning: fixed problems restoring VMs with pre-allocation enabled</para>
+ </listitem>
+
+ <listitem>
+ <para>Bridged networking: fixed performance issue with GRO enabled on
+ bridged device (bug #7059)</para>
+ </listitem>
+
+ <listitem>
+ <para>Hostonly networking: fixed performance issue (3.2.6 regression; bug #7081)</para>
+ </listitem>
+
+ <listitem>
+ <para>Hard disks: fix auto-reset of immutable disk at VM startup
+ (bug #6832)</para>
+ </listitem>
+
+ <listitem>
+ <para>BusLogic: several fixes for Windows NT/2000 and SCO OpenServer
+ guests</para>
+ </listitem>
+
+ <listitem>
+ <para>LsiLogic: fixed I/O errors under rare circumstances</para>
+ </listitem>
+
+ <listitem>
+ <para>Sharing disks: support for attaching one disk to several VMs
+ without external tools and tricks</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared Folders: several fixes and performance enhancements
+ for Solaris guests (bugs #4154 and #6512)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris Installer: added support for remote installations</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest Properties API: correctly support enumerating the properties
+ of a running VM with an empty "patterns" field (bug #7171)</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest properties: properly delete transient properties on
+ shutdown</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP video redirection performance improvements and stability
+ fixes</para>
+ </listitem>
+
+ <listitem>
+ <para>Settings: silently fix host audio driver when reading machine XML
+ settings files or OVF written by VirtualBox on a different host OS, for
+ example convert DirectSound to PulseAudio (bug #7209)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Settings: properly store the NAT network setting in XML
+ settings file version 1.10 and later (bug #6176)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: handle differencing images with parent UUID correctly
+ in subcommand <emphasis>openmedium disk</emphasis> (bug #6751)</para>
+ </listitem>
+
+ <listitem>
+ <para>Web service: enabled HTTP keepalive for much better performance
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Web service: added timestamps to logging output</para>
+ </listitem>
+
+ <listitem>
+ <para>Web service: treat 8-bit strings as UTF-8 not ASCII</para>
+ </listitem>
+
+ <listitem>
+ <para>X11 Additions: fix for Xorg 6.8 guests (e.g. RHEL4)</para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect1>
+
+ <sect1>
+ <title>Version 3.2.6 (2010-06-25)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>VMM: fixed host crash when running 64-bit guests on 32-bit hosts
+ with certain Intel CPUs (VT-x only; bug #6166) </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: allow 64-bit SMP guests on 32-bit hosts (VT-x and AMD-V only;
+ does not apply to Mac OS X, which already supports it) </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed Guru mediation if guests with more than 2GB are booted
+ with VT-x/AMD-V disabled (bug #5740)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed TR limit trashing (VT-x and 64-bit host only; bug #7052)</para>
+ </listitem>
+
+ <listitem>
+ <para>Page Fusion: several bug fixes for SMP guests (including bug #6964) </para>
+ </listitem>
+
+ <listitem>
+ <para>Teleportation: several fixes and improvements</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X server guests: compatibility fix</para>
+ </listitem>
+
+ <listitem>
+ <para>EFI: fixed memory detection for guests with 2GB or more RAM
+ assigned</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: added a workaround for a Linux kernel bug which affecting
+ asynchronous I/O on ext4 / xfs file systems (Linux hosts only)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: added setting for multiple VRDP connections; useful if
+ multiple screens are enabled</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: another fix for the keyboard capturing bug under metacity (bug #6727)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed quit dialog when used in seamless or full screen mode
+ (Mac OS X hosts only; bug #6938)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: handle the extra key on the Brazilian keyboard on X11 hosts
+ again (bug #7022).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>2D Video acceleration: fixed crashes when leaving the full screen mode
+ (bug #6768)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: fixed <emphasis>storageattach</emphasis> error handling
+ (bug #6927)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: fixed <emphasis>dhcpserver add</emphasis> (3.2.0 regression;
+ bug #7031)</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: fixed hang with images located on filesystems which
+ don't support asynchronous I/O (bug #6905)</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: fixed raw disks on Windows hosts (3.2.0 regression;
+ bug #6987)</para>
+ </listitem>
+
+ <listitem>
+ <para>LsiLogic: fixed hang with older Linux guests</para>
+ </listitem>
+
+ <listitem>
+ <para>BusLogic: fixed hang during I/O</para>
+ </listitem>
+
+ <listitem>
+ <para>SATA: set initial number of ports to 1 as some guests can't handle
+ 30 ports (e.g. CentOS 4 and FreeBSD; bug #6984)</para>
+ </listitem>
+
+ <listitem>
+ <para>SATA: performance improvement</para>
+ </listitem>
+
+ <listitem>
+ <para>SCSI: fixed error when using the full format option during Windows
+ installation (bug #5101)</para>
+ </listitem>
+
+ <listitem>
+ <para>iSCSI: fixed authentication (bug #4031)</para>
+ </listitem>
+
+ <listitem>
+ <para>Host-only/bridged networking: fixed excessive host kernel warnings
+ under certain circumstances (Linux hosts only; 3.2.0 regression;
+ bug #6872)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed potential memory leaks</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: increased the size of the memory pool for 16K Jumbo frames
+ (performance tweak)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: allow to link/unlink the network cable even if the VM
+ is currently paused</para>
+ </listitem>
+
+ <listitem>
+ <para>E1000: disconnect cable was not properly handled if the NIC
+ was not yet initialized by the guest</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF: export performance optimization</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF: upgraded OS type definitions to CIM 2.25.0 so that Windows 7
+ and other OSes are now tagged correctly on export</para>
+ </listitem>
+
+ <listitem>
+ <para>Settings: the setting for disabling the host I/O cache was sometimes
+ not properly saved</para>
+ </listitem>
+
+ <listitem>
+ <para>Settings: save machine state into XML correctly even when snapshot
+ folder has been changed to a non-default location (bug #5656)</para>
+ </listitem>
+
+ <listitem>
+ <para>USB: allow the guest to disable an EHCI port</para>
+ </listitem>
+
+ <listitem>
+ <para>USB: find a valid language ID before querying strings (bug #7034)</para>
+ </listitem>
+
+ <listitem>
+ <para>POSIX hosts: fixed several memory leaks (3.2.0 regression)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed VDI access problem under certain circumstances
+ (IDE/SATA; 3.2.0 regression)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed VM fails to start on 32-bit hosts (3.2.0 regression; bug #6899)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows hosts (32-bit): increase guest RAM limit if the host
+ kernel allows for more virtual address space</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: re-read a directory after a file was removed
+ (bug #5251)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: install the DRI driver in the right location on
+ ArchLinux guests (bug #6937)</para>
+ </listitem>
+
+ <listitem>
+ <para>X11 Additions: fixed spurious mouse movement events (bug #4260)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris Additions: fixed guest execution feature</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: automatic logon on Windows Vista/Windows 7 is now able
+ to handle renamed and principal user accounts; added various bugfixes</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: improved command line parsing of the installer</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed driver verifier bugcheck in VBoxMouse (bug #6453)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed OpenGL support for 32bit applications under 64bit Windows guests</para>
+ </listitem>
+
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Version 3.2.4 (2010-06-07)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>GUI: fixed superfluous resize-event on powering-on VM for X11
+ (improvement for the 3.2.2 fix)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed keyboard capturing bug under metacity (bug #6727)</para>
+ </listitem>
+
+ <listitem>
+ <para>Host-only/bridged networking: fixed guest-to-guest communication
+ over wireless (3.2.0 regression; bug #6855)</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: fixed a potential guest disk corruption with
+ growing images (3.2.0 regression)</para>
+ </listitem>
+
+ <listitem>
+ <para>Page Fusion: fixed shared module detection for Win64 guests</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: allow use of <emphasis>CR_SYSTEM_GL_PATH</emphasis>
+ again (bug #6864)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed a host assertion for some multi-threaded guest
+ applications (bug #5236)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed host crashes with nVIDIA drivers on WDDM startup</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF: fixed import of OVFs with a VM description (annotation)
+ (3.2.2 regression; bug #6914)</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: fixed issues with secondary monitors (bug #6759)</para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect1>
+
+ <sect1>
+ <title>Version 3.2.2 (2010-06-02)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>VMM: fixed rare invalid guest state guru meditation (VT-x only)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed poor performance with nested paging and unrestricted
+ guest execution (VT-x only; bug #6716)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed occasional guru meditation during Windows 7 bootup (bug #6728)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: keep the status for remote control in sync with the actual
+ state</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: don't exit after a successful refresh of an invalid VM configuration</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed keyboard capturing bug under metacity (bug #6727)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed crash during VM termination if a modal dialog is open</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: default controllers names of New VM Wizard are synchronized with VM settings</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed superfluous resize-event on powering-on VM for X11</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed regression - missed USB item's tool-tip of USB devices menu</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: Activate VM window on mouse-hovering for multi-monitor VMs</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxSDL/Linux hosts: automated keyboard type detection (bug #5764)</para>
+ </listitem>
+
+ <listitem>
+ <para>SATA: fixed crash during VM suspend under rare circumstances</para>
+ </listitem>
+
+ <listitem>
+ <para>SATA: fixed crash during VM reset after a snapshot was taken</para>
+ </listitem>
+
+ <listitem>
+ <para>Storage: fixed sporadic hang of SMP guests using SATA or
+ LSI Logic SCSI and asynchronous I/O</para>
+ </listitem>
+
+ <listitem>
+ <para>Virtio-net: fix for guests with more than about 4GB RAM
+ (bug #6784)</para>
+ </listitem>
+
+ <listitem>
+ <para>Page Fusion: fixed VBoxService crash with enabled Page Fusion on Win64 guests</para>
+ </listitem>
+
+ <listitem>
+ <para>Page Fusion: added kernel module sharing</para>
+ </listitem>
+
+ <listitem>
+ <para>HGCM: fixed memory leak which showed up if the Guest Additions were
+ accessing a non-existing HGCM service</para>
+ </listitem>
+
+ <listitem>
+ <para>Teleportation: several fixes</para>
+ </listitem>
+
+ <listitem>
+ <para>Floppy: don't disable the host I/O cache by default</para>
+ </listitem>
+
+ <listitem>
+ <para>USB: fixed 3.1 regression with certain devices (e.g. iPhone); Windows
+ host only</para>
+ </listitem>
+
+ <listitem>
+ <para>Serial: updated the guest device emulation to 16550A and reduced the
+ probability for losing bytes during transmission (bug #1548)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: re-fetch the name server parameters from the host on guest DHCP
+ requests to handle host network switches more gracefully (bug #3847)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed parsing of IPv4 addresses in CIDR notation (bug #6797)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: limit the number of name servers passed to the guest to four
+ (non-Windows hosts only; bug #4098)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed DNS transaction ID mismatch (bug #6833)</para>
+ </listitem>
+
+ <listitem>
+ <para>VDE: fixed changing the attachment during runtime</para>
+ </listitem>
+
+ <listitem>
+ <para>Bridged networking: fixed memory leak in the Bridged Networking
+ driver for Windows hosts (bug #6824)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fix for NT4 guests (bug #6748)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: re-introduced system preparation feature</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux guests: enable PAE for RedHat guests by default</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux guests: fix support for disabling mouse integration
+ (bug #6714)</para>
+ </listitem>
+
+ <listitem>
+ <para>Web service: fixed a rare crash when calling IGuest methods from the web service</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF: fixed wrong hard disk UUIDs on export (bug #6802)</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF: fixed 3.2.0 regression importing legacy OVF 0.9 files</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed OpenGL support for 64bit applications on windows guests</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed various host crashes (bugs #2954, #5713, #6443)</para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect1>
+
+ <sect1>
+ <title>Version 3.2.0 (2010-05-18)</title>
+
+ <para>This version is a major update. The following major new features
+ were added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>Following the acquisition of Sun Microsystems by Oracle Corporation,
+ the product is now called "Oracle VM VirtualBox" and all references
+ were changed without impacting compatibility</para>
+ </listitem>
+
+ <listitem>
+ <para>Experimental support for Mac OS X Server guests (see <xref linkend="intro-macosxguests" />)</para>
+ </listitem>
+
+ <listitem>
+ <para>Memory ballooning to dynamically in- or decrease the
+ amount of RAM used by a VM (64-bit hosts only) (see <xref linkend="guestadd-balloon" />)</para>
+ </listitem>
+
+ <listitem>
+ <para>Page Fusion automatically de-duplicates RAM when running similar VMs thereby
+ increasing capacity. Currently supported for Windows guests on 64-bit hosts
+ (see <xref linkend="guestadd-pagefusion" />)</para>
+ </listitem>
+
+ <listitem>
+ <para>CPU hot-plugging for Linux (hot-add and hot-remove)
+ and certain Windows guests (hot-add only) (see <xref linkend="cpuhotplug" />)</para>
+ </listitem>
+
+ <listitem>
+ <para>New Hypervisor features: with both VT-x/AMD-V on 64-bit hosts, using large pages can improve performance
+ (see <xref linkend="nestedpaging"/>);
+ also, on VT-x, unrestricted guest execution is now supported (if nested paging
+ is enabled with VT-x, real mode and protected mode without paging code runs faster,
+ which mainly speeds up guest OS booting)</para>
+ </listitem>
+
+ <listitem>
+ <para>Support for deleting snapshots while the VM is running</para>
+ </listitem>
+
+ <listitem>
+ <para>Support for multi-monitor guest setups in the GUI for Windows
+ guests (see <xref linkend="settings-display" />)</para>
+ </listitem>
+
+ <listitem>
+ <para>USB tablet/keyboard emulation for improved user experience
+ if no Guest Additions are available (see <xref linkend="settings-motherboard" />)</para>
+ </listitem>
+
+ <listitem>
+ <para>LsiLogic SAS controller emulation (see <xref linkend="harddiskcontrollers" />)</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP video acceleration (see <xref linkend="vrde-videochannel"/>)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT engine configuration via API and VBoxManage</para>
+ </listitem>
+
+ <listitem>
+ <para>Use of host I/O cache is now configurable (see <xref linkend="iocaching" />)</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest Additions: added support for executing guest applications
+ from the host system (replaces the automatic system preparation feature; see
+ <xref linkend="guestadd-guestcontrol" />)</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF: enhanced OVF support with custom namespace to preserve settings
+ that are not part of the base OVF standard</para>
+ </listitem>
+
+ </itemizedlist>
+
+ <para>In addition, the following items were fixed and/or added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>VMM: fixed Windows 2000 guest crash when configured with a large
+ amount of RAM (bug #5800) </para>
+ </listitem>
+
+ <listitem>
+ <para>Linux/Solaris guests: PAM module for automatic logons added</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: guess the OS type from the OS name when creating a new
+ VM</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: added VM setting for passing the time in UTC instead of
+ passing the local host time to the guest (bug #1310)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed seamless mode on secondary monitors (bugs #1322 and
+ #1669)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: offer to download the user manual in the OSE version (bug
+ #6442)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: allow to set an empty host key to disallow any host key
+ combination (bug #684)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: allow to restrict the possible actions when shutting down
+ the VM from the GUI</para>
+ </listitem>
+
+ <listitem>
+ <para>Main: allow to start a VM even if a virtual DVD or floppy
+ medium is not accessible</para>
+ </listitem>
+
+ <listitem>
+ <para>Settings: be more robust when saving the XML settings files</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X: rewrite of the CoreAudio driver and added support for
+ audio input (bug #5869)</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X: external VRDP authentication module support (bug
+ #3106)</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X: moved the realtime dock preview settings to the VM
+ settings (no global option anymore). Use the dock menu to configure
+ it</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X: added the VM menu to the dock menu</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed corrupted surface rendering (bug #5695)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed VM crashes when using
+ <emphasis>ARB_IMAGING</emphasis> (bug #6014)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed assertion when guest applications uses several
+ windows with single OpenGL context (bug #4598)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: added GL_ARB_pixel_buffer_object support</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: added OpenGL 2.1 support</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed Final frame of Compiz animation not updated to the
+ screen (Mac OS X only) (bug #4653)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed blank screen after loading snapshot of VM with enabled Compiz</para>
+ </listitem>
+
+ <listitem>
+ <para>Added support for <emphasis>Virtual Distributed Ethernet</emphasis> (VDE)
+ (Linux hosts only; see <xref linkend="networkingmodes" />)</para>
+ </listitem>
+
+ <listitem>
+ <para>Added support for virtual high precision event timer (HPET)</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF: fixed mapping between two IDE channels in OVF and the one IDE controller
+ in VirtualBox</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF: fix VMDK format string identifiers and sort XML elements from rasd: namespace
+ alphabetically as prescribed by standard</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxShell: interactive Python shell extended to be fully functional TUI for
+ VirtualBox</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: support Fedora 13 (bug #6370)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: fixed overly strict checks when creating a raw partition
+ VMDK (bugs #688, #4438)</para>
+ </listitem>
+
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Version 3.1.8 (2010-05-10)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>VMM: fixed crash with the OpenSUSE 11.3 milestone kernel during
+ early boot (software virtualization only)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed invalid state during teleportation</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed OS/2 guest crash with nested paging enabled</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed massive display performance loss (AMD-V with nested paging
+ only) </para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed off-by-one bug when passing absolute mouse coordinates
+ to the guest (3.1.6 regression)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: show the real version of the Guest Additions, not the
+ interface version</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: when adding a DVD or floppy slot in the VM mass storage
+ settings dialog, don't attach a random medium but just leave the
+ slot empty</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: added <computeroutput>--seamless</computeroutput> and
+ <computeroutput>--fullscreen</computeroutput> command line switches
+ (bug #4220)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed a SEGFAULT under rare circumstances</para>
+ </listitem>
+
+ <listitem>
+ <para>2D Video acceleration: fixed display issues when working with
+ non 32-bit modes (bugs #6094 &amp; #6208)</para>
+ </listitem>
+
+ <listitem>
+ <para>LsiLogic: fixed detection of hard disks attached to port 0 when
+ using the drivers from LSI</para>
+ </listitem>
+
+ <listitem>
+ <para>ATA: fixed sporadic crash with Linux guests when having a hard
+ disk and DVD drive on the same channel (bug #6079)</para>
+ </listitem>
+
+ <listitem>
+ <para>Network: allow to start a VM even if not all network adapters are
+ attached</para>
+ </listitem>
+
+ <listitem>
+ <para>Network: promiscuous mode support for e1000 and paravirtualized
+ adapters (bug #6519)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed ICMP latency (non-Windows hosts only; bug #6427)</para>
+ </listitem>
+
+ <listitem>
+ <para>SCSI: fixed guest crashes under certain circumstances when
+ booting from SCSI devices</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: fixed several bugs in cloning of images (one of them
+ is bug #6408)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: fixed <emphasis>modifyvm --natnet default</emphasis></para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed a kernel panic when bridged networking might
+ fail to initialize</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed priority tagged VLAN packets in bridged networking</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared Folders: fixed issue with copying read-only files
+ (Linux guests only; bug #4890)</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared Folders: renamed the guest kernel module from <emphasis>vboxvfs</emphasis>
+ to <emphasis>vboxsf</emphasis> to make it load on demand by the Linux kernel.
+ Fixes mounting from /etc/fstab in Ubuntu 10.04</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared Folders: fixed setuid file permissions (Solaris guests only)</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared Folders: fixed deleting directories recursively
+ (Solaris guests only; bug #6513)</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest Additions: support seamless and dynamic resizing on certain
+ older X11 guests (bug #5840)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris Additions: fixed OpenGL library dependencies
+ (bug #6435)</para>
+ </listitem>
+
+ <listitem>
+ <para>Keyboard/Mouse emulation: fixed handling of simultaneous
+ mouse/keyboard events under certain circumstances (bug #5375)</para>
+ </listitem>
+
+ <listitem>
+ <para>Mouse emulation: never switch straight back from Explorer to
+ IntelliMouse mode as it confuses the FreeBSD mouse driver
+ (bug #6488)</para>
+ </listitem>
+
+ <listitem>
+ <para>SDK: fixed memory leak in
+ <emphasis>IDisplay::takeScreenShotSlow()</emphasis> (bug #6549)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed Final frame of Compiz animation not updated to the
+ screen (Mac OS X only) (bug #4653)</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: allow to bind to localhost only on Mac OS X (bug
+ #5227)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: add host USB support for Ubuntu 10.04 and other
+ hosts without the hal daemon or usbfs (bug #6343)</para>
+ </listitem>
+
+ <listitem>
+ <para>Web service: more structs and array fixes in PHP bindings</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows hosts: make the bridged networking driver notify dll
+ be correctly unregistred on uninstall (bug #5780)</para>
+ </listitem>
+
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Version 3.1.6 (2010-03-25)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>Linux hosts: fixed timing issue on hosts with Linux kernels
+ 2.6.31 or later with certain CPUs (asynchronous timer mode; bug #6250)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: properly handle host suspend/resume events on
+ Linux kernels 2.6.30 or later (bug #5562)</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: fixed VBoxSVC crash while enumerating the host network
+ interfaces under certain circumstances</para>
+ </listitem>
+
+ <listitem>
+ <para>Snapshots: fixed image corruption after snapshot merge under certain
+ circumstances (bug #6023)</para>
+ </listitem>
+
+ <listitem>
+ <para>Snapshots: fixed crash with VBoxHeadless / OSE</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed reference counting guru meditation (bug #4940)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: improved guest SMP stability</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed VT-x hardware debug issues (bugs #477 &amp; #5792)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed <emphasis>PGMDynMapHCPage</emphasis> guru meditation
+ (Mac OS X; VT-x only; bug #6095)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed <emphasis>pgmPoolTrackFlushGCPhysPTInt</emphasis> guru meditations
+ (Mac OS X; VT-x only; bugs #6095 &amp; #6125)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed host crash when running PAE guests in VT-X
+ mode (Mac OS X only; bug #5771)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fix displaying of error message (bug #4345)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fix inability to enter seamless mode (bugs #6185, #6188)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed assertion and flickering when guest application uses several
+ windows with a single OpenGL context (bug #4598)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed host crashes when using
+ <emphasis>GL_EXT_compiled_vertex_array</emphasis> and array element
+ calls (bug #6165)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed runtime linker errors with OpenGL guest libs
+ (bug #5297)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed OpenGL extension viewer crash on startup
+ (bug #4962)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed a 3.1.4 regression on Windows hosts where graceful
+ connection termination was broken (bug #6237)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: alternative network setting was not stored persistent
+ (bug #6176)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed memory corruption during ICMP traffic under
+ certain circumstances</para>
+ </listitem>
+
+ <listitem>
+ <para>Network: allow to switch the host interface or the internal
+ network while a VM is running (bug #5781)</para>
+ </listitem>
+
+ <listitem>
+ <para>VHD: fix for images with a block size different than 2MB</para>
+ </listitem>
+
+ <listitem>
+ <para>USB: fixed filtered device attach regression (bug #6251)</para>
+ </listitem>
+
+ <listitem>
+ <para>USB: fixed crash in OHCI under rare circumstances
+ (bug #3571)</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: fixed hang under rare circumstances when attaching USB
+ devices</para>
+ </listitem>
+
+ <listitem>
+ <para>ACPI: prevent guest freezes when accessing /proc/acpi for
+ determining the state of the host battery and the AC adapter
+ (Linux hosts only; bug #2836)</para>
+ </listitem>
+
+ <listitem>
+ <para>PulseAudio: fixed guest freezes under certain conditions
+ (3.1.4 regression; bug #6224)</para>
+ </listitem>
+
+ <listitem>
+ <para>BIOS: increased space for DMI strings</para>
+ </listitem>
+
+ <listitem>
+ <para>BIOS: fixed interrupt routing problem for certain configurations
+ (I/O-APIC enabled, ACPI not used; bug #6098)</para>
+ </listitem>
+
+ <listitem>
+ <para>iSCSI: be more robust when handling the <emphasis>INQUIRY</emphasis>
+ response</para>
+ </listitem>
+
+ <listitem>
+ <para>iSCSI: be more robust when handling sense data</para>
+ </listitem>
+
+ <listitem>
+ <para>BusLogic: fixed FreeBSD guests</para>
+ </listitem>
+
+ <listitem>
+ <para>Web service: vboxwebsrv is now multithreaded</para>
+ </listitem>
+
+ <listitem>
+ <para>Web service: fixed handling of structs and arrays in PHP bindings</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris Installer: fixed netmask to stay persistent across reboots for
+ Host-only interface (bug #4590)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux installer: removed external dependency to libpng12.so (bug #6243)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris Additions: fixed superfluous kernel logging (bug #6181)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: fixed hang when starting the X server in Fedora12
+ guests and in guests with Linux 2.6.33 or later (bug #6198)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: support Mandriva speedboot runlevel (bug #5484)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: fixed SELinux security context of mount.vboxsf (bug #6362)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: support Ubuntu 10.04 (bug #5737)</para>
+ </listitem>
+
+ <listitem>
+ <para>Web service: update PHP bindings to fix problems with enums and collections</para>
+ </listitem>
+
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Version 3.1.4 (2010-02-12)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>VMM: SMP stability fixes</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed guru meditation in certain rare cases (bug #5968)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: activate NXE for PAE enabled guests (VT-x and AMD-V on 32 bits
+ hosts only; bug #3578)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: added workaround for broken BIOSes that make VirtualBox think
+ AMD-V is in use (for details see bug #5639)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed rare host reboot when restoring a saved state
+ (bug #3945)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed incompatibility with 2.6.32 Linux kernels
+ (software virtualization only; bug #6100)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: turn on nested paging by default for new VMs (if available; VT-x
+ and AMD-V only) </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: turn on VPID by default for new VMs (if available; VT-x only) </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: perform strict CPUID compatibility checks when
+ teleporting; to get the old behavior set
+ "VBoxInternal/CPUM/StrictCpuIdChecks" to 0</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed VM crash with certain 16 bits Windows applications (software
+ virtualization only; bug #5399) </para>
+ </listitem>
+
+ <listitem>
+ <para>Snapshots: fixed a 3.1 regression that broke deletion of snapshots when
+ a machine had immutable or writethrough storage attached (bug #5727)</para>
+ </listitem>
+
+ <listitem>
+ <para>Saved state: fixed <emphasis>VERR_SSM_LOADED_TOO_MUCH</emphasis>
+ error when loading <emphasis>DisplayScreenshot</emphasis>(bug #6162)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: add <emphasis>restorecurrent</emphasis> operation to
+ snapshots command</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: fixed broken snapshot lookup by name (bug #6070</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed the broken "Reload" button that reloads the machine
+ XML when a machine is inaccessible</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed guest full screen mode after reboot (bug #5372)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: handle Ctrl+Break properly on X11 hosts (bug #6122)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed status LEDs for storage devices</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: workaround for disabling the seamless mode on KDE hosts
+ (KWin bug)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed SELinux warning saying VBoxOGL.so requires text
+ relocation (bug #5690)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed Corrupted surface rendering (bug #5695)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: free textures on guest application termination (bug #5206)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed <emphasis>ubigraph_server</emphasis> crashes (bug #4674)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixes for 64-bit Solaris guests</para>
+ </listitem>
+
+ <listitem>
+ <para>Seamless: disable seamless mode when guest changes screen
+ resolution (bug #5655)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed high CPU load under certain circumstances (Windows hosts only;
+ bug #5787)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed handling of the <emphasis>broadcast</emphasis> flag in
+ DHCP requests</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed rare crash due to an assertion in the ICMP code
+ (bug #3217)</para>
+ </listitem>
+
+ <listitem>
+ <para>Virtio-net: don't crash when ports accessed beyond the valid
+ range (bug #5923)</para>
+ </listitem>
+
+ <listitem>
+ <para>LsiLogic: fix for Windows 7 guests</para>
+ </listitem>
+
+ <listitem>
+ <para>ATA: fix for guru meditation when installing Solaris 8 guests (bug #5972)</para>
+ </listitem>
+
+ <listitem>
+ <para>VHD: fixed an incompatibility with Virtual PC (bug #5990)</para>
+ </listitem>
+
+ <listitem>
+ <para>VHD: update the footer backup after setting a new UUID (bug #5004)</para>
+ </listitem>
+
+ <listitem>
+ <para>Host DVD: really fixed loading "passthrough" setting from configuration
+ file (bug #5681)</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared Folders: fixed resolving of symlink target on Linux
+ (3.1.2 regression)</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: fixed <emphasis>VERR_NET_ADDRESS_IN_USE</emphasis>
+ error when restarting a VM (3.1 regression; bug #5902)</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: fixed crash on Mac OS X when 3D is enabled (3.1
+ regression)</para>
+ </listitem>
+
+ <listitem>
+ <para>PulseAudio: fixed recording (bug #4302)</para>
+ </listitem>
+
+ <listitem>
+ <para>USB: fixed a shutdown blue screen (Windows hosts only; bug #5885)</para>
+ </listitem>
+
+ <listitem>
+ <para>BIOS: fixed attribute during text scroll (bug #3407)</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF: fix strange error messages on disk import errors</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF: do not require write access to the .ovf file during import
+ (3.1 regression; bug #5762)</para>
+ </listitem>
+
+ <listitem>
+ <para>iSCSI: fix taking snapshots of a running VM (bug #5849)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: several USB fixes (including support for Apple iPod; bug #5873)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris installer: fixed USB module removal and Solaris 10 "id" binary incompatibility</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest Additions: fixed wrong guest time adjustment if the guest
+ clock is ahead (3.1 regression; non-Windows guests only)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: fixed shared folders for Linux 2.6.32 guests (bug #5891)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: make the mouse driver work on Debian 5.0.3 guests
+ again (3.1.2 regression, bug #5832)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed malfunctioning VBoxService that broke time-sync (bug #5872)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed uninstallation issues on 64-bit guests</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed some sysprep execution issues</para>
+ </listitem>
+
+ <listitem>
+ <para>X.Org Additions: never reject the saved video mode as invalid
+ (bug #5731)</para>
+ </listitem>
+
+ <listitem>
+ <para>XFree86 Additions: accept video mode hints for the initial mode
+ again</para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect1>
+
+ <sect1>
+ <title>Version 3.1.2 (2009-12-17)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>VMM: fixed SMP stability regression</para>
+ </listitem>
+
+ <listitem>
+ <para>USB: fixed USB related host crashes on 64 bits Windows hosts (bug #5237)</para>
+ </listitem>
+
+ <listitem>
+ <para>Main: wrong default HWVirtExExclusive value for new VMs (bug #5664)</para>
+ </listitem>
+
+ <listitem>
+ <para>Main: DVD passthrough setting was lost (bug #5681)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: iSCSI disks do not support adding a comment (bug #4460)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: added missing <emphasis>--cpus</emphasis> and
+ <emphasis>--memory</emphasis> options to OVF <emphasis>--import</emphasis></para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed VBox URL in update dialog for German and Dutch languages</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: NLS updates</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF: fixed export of non standard storage controller names (bug #5643)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: several USB fixes (including support for Apple iPhone)</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: several fixes for the 3D support</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: re-enabled CMD+Key combinations, even if the
+ Host-Key isn't CMD (bug #5684)</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: fixed to fast scrolling if the mouse wheel is
+ used inside the guest (bug #5672)</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: dock &amp; menubar don't disappear in
+ full screen when the VM is not running on the primary display (bug
+ #1762)</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: added an option for enabling "Auto show Dock &amp;
+ Menubar in full screen" (bug #5636)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows host installer: fixed starting VBox with wrong privileges
+ right after installation (bug #4162)</para>
+ </listitem>
+
+ <listitem>
+ <para>Host interface and host-only networking: prevent driver from unloading
+ while a VM is still active (Windows host only)</para>
+ </listitem>
+
+ <listitem>
+ <para>Host-only networking: fixed host-only interface creation (Windows host only) (bug #5708)</para>
+ </listitem>
+
+ <listitem>
+ <para>Virtio-net: don't crash without an attached network</para>
+ </listitem>
+
+ <listitem>
+ <para>Virtio-net: fixed the issue with intermittent network in VM with
+ several virtual CPU cores</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed port-forwarding regressions (bug #5666)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed crash under certain conditions (bug #5427)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed resolving of names containing a slash or underscore
+ when using the host resolver DNS proxy (bug #5698)</para>
+ </listitem>
+
+ <listitem>
+ <para>ATA: fixed sporadic crash when resuming after a VM was forcefully
+ paused (e.g. due to iSCSI target being unavailable)</para>
+ </listitem>
+
+ <listitem>
+ <para>SATA: fixed raw vmdk disks (bug #5724)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux guests: increased the default memory for Redhat and Fedora
+ guests</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Guest Additions: fixed installation on RHEL 3.9 guests
+ and on some 64bit guests</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Guest Additions: prevent SELinux warnings concerning
+ text relocations in VBoxOGL.so (bug #5690)</para>
+ </listitem>
+
+ <listitem>
+ <para>X11 guests: fixed mouse support for some Xorg 1.4 guests
+ (openSUSE 11.0)</para>
+ </listitem>
+
+ <listitem>
+ <para>X11 guests: fixed xorg.conf modification for some older Xorg
+ releases (openSUSE 11.1)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows guests: fixed some VBoxService shutdown issues</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows guests: fixed VBoxVideo spinlock issues on NT4</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Guest Additions: fixed uninstallation issues of NT4</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared Folders: fixed resolving of symlink target (bug #5631)</para>
+ </listitem>
+
+ <listitem>
+ <para>2D Video acceleration: delay loading of OpenGL dlls for Windows hosts to avoid
+ GUI crashes on misconfigured systems</para>
+ </listitem>
+
+ <listitem>
+ <para>2D Video acceleration: fixed issues with video picture not displayed on playback</para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect1>
+
+ <sect1>
+ <title>Version 3.1.0 (2009-11-30)</title>
+
+ <para>This version is a major update. The following major new features
+ were added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>Teleportation (aka live migration); migrate a live VM session
+ from one host to another (see <xref linkend="teleporting" />)</para>
+ </listitem>
+
+ <listitem>
+ <para>VM states can now be restored from arbitrary snapshots instead of only
+ the last one, and new snapshots can be taken from other snapshots as well
+ ("branched snapshots"; see <xref linkend="snapshots" />)</para>
+ </listitem>
+
+ <listitem>
+ <para>2D video acceleration for Windows guests; use the host video
+ hardware for overlay stretching and color conversion
+ (see <xref linkend="guestadd-2d" />)</para>
+ </listitem>
+
+ <listitem>
+ <para>More flexible storage attachments: CD/DVD drives can be attached to
+ arbitrary storage controllers, and there can be more than one such drive
+ (<xref linkend="storage" />)</para>
+ </listitem>
+
+ <listitem>
+ <para>The network attachment type can be changed while a VM is
+ running</para>
+ </listitem>
+
+ <listitem>
+ <para>Complete rewrite of experimental USB support for OpenSolaris hosts
+ making use of the latest USB enhancements in Solaris Nevada 124 and higher</para>
+ </listitem>
+
+ <listitem>
+ <para>Significant performance improvements for PAE and AMD64 guests
+ (VT-x and AMD-V only; normal (non-nested) paging) </para>
+ </listitem>
+
+ <listitem>
+ <para>Experimental support for EFI (Extensible Firmware Interface;
+ see <xref linkend="efi" />)</para>
+ </listitem>
+
+ <listitem>
+ <para>Support for paravirtualized network adapters (virtio-net;
+ see <xref linkend="nichardware" />)</para>
+ </listitem>
+
+ </itemizedlist>
+
+ <para>In addition, the following items were fixed and/or added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>VMM: guest SMP fixes for certain rare cases</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: snapshots include a screenshot</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: locked storage media can be unmounted by force</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: the log window grabbed all key events from other GUI windows
+ (bug #5291)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: allow to disable USB filters (bug #5426)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: improved memory slider in the VM settings</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: major performance improvement in VBO processing</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: added <emphasis>GL_EXT_framebuffer_object</emphasis>,
+ <emphasis>GL_EXT_compiled_vertex_array</emphasis> support</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed crashes in FarCry, SecondLife, Call of Duty,
+ Unreal Tournament, Eve Online (bugs #2801, #2791)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed graphics corruption in World of Warcraft (bug #2816)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed Final frame of Compiz animation not updated to the screen (bug #4653)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed incorrect rendering of non ARGB textures under compiz</para>
+ </listitem>
+
+ <listitem>
+ <para>iSCSI: support iSCSI targets with more than 2TiB capacity</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: fixed occasional VRDP server crash (bug #5424)</para>
+ </listitem>
+
+ <listitem>
+ <para>Network: fixed the E1000 emulation for QNX
+ (and probably other) guests (bug #3206)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: added host resolver DNS proxy
+ (see <xref linkend="nat_host_resolver_proxy" />)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMDK: fixed incorrectly rejected big images split into 2G pieces
+ (bug #5523, #2787)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMDK: fixed compatibility issue with fixed or raw disk VMDK files
+ (bug #2723)</para>
+ </listitem>
+
+ <listitem>
+ <para>VHD: fixed incompatibility with Hyper-V</para>
+ </listitem>
+
+ <listitem>
+ <para>Support for Parallels version 2 disk image (HDD) files;
+ see <xref linkend="vdidetails" /></para>
+ </listitem>
+
+ <listitem>
+ <para>OVF: create manifest files on export and verify the content of an
+ optional manifest file on import</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF: fixed memory setting during import (bug #4188)</para>
+ </listitem>
+
+ <listitem>
+ <para>Mouse device: now five buttons are passed to the guest
+ (bug #3773)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxHeadless: fixed loss of saved state when VM fails to start</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxSDL: fixed crash during shutdown (Windows hosts only)</para>
+ </listitem>
+
+ <listitem>
+ <para>X11 based hosts: allow the user to specify their own scan code
+ layout (bug #2302)</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: don't auto show the menu and dock in full screen
+ (bug #4866)</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts (64 bit): don't interpret mouse wheel events as
+ left click (bug #5049)</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: fixed a VM abort during shutdown under
+ certain conditions</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: combined the kernel interface package into the VirtualBox main package</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: support for OpenSolaris Boomer architecture (with OSS audio backend)</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared Folders: VBOXSVR is visible in Network folder (Windows guests, bug #4842)</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared Folders: performance improvements (Windows guests, bug #1728)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows, Linux and Solaris Additions: added balloon tip notifier if VirtualBox host version
+ was updated and Additions are out of date</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris guests: fixed keyboard emulation (bug #1589)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris Additions: fixed <emphasis>as_pagelock()</emphasis> failed errors affecting guest
+ properties (bug #5337)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: added automatic logon support for Windows Vista and Windows 7</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: improved file version lookup for guest OS information</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed runtime OS detection on Windows 7 for session information</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed crash in seamless mode (contributed by Huihong Luo)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: added support for uninstalling the Linux Guest
+ Additions (bug #4039)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux guest shared folders: allow mounting a shared folder if a
+ file of the same name as the folder exists in the current directory
+ (bug #928)</para>
+ </listitem>
+
+ <listitem>
+ <para>SDK: added object-oriented web service bindings for PHP5</para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect1>
+
+ <sect1>
+ <title>Version 3.0.12 (2009-11-10)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>VMM: reduced IO-APIC overhead for 32 bits Windows NT/2000/XP/2003
+ guests; requires 64 bits support (VT-x only; bug #4392) </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed double timer interrupt delivery on old Linux kernels
+ using IO-APIC (caused guest time to run at double speed; bug #3135)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: re-initizalize VT-x and AMD-V after host suspend or hibernate; some BIOSes
+ forget this (Windows hosts only; bug #5421)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed loading of saved state when RAM preallocation is
+ enabled</para>
+ </listitem>
+
+ <listitem>
+ <para>BIOS: ignore unknown shutdown codes instead of causing a guru
+ meditation (bug #5389)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: never start a VM on a single click into the selector window
+ (bug #2676)</para>
+ </listitem>
+
+ <listitem>
+ <para>Serial: reduce the probability of lost bytes if the host end
+ is connected to a raw file</para>
+ </listitem>
+
+ <listitem>
+ <para>VMDK: fixed handling of split image variants and fix a 3.0.10 regression
+ (bug #5355)</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: fixed occasional VRDP server crash</para>
+ </listitem>
+
+ <listitem>
+ <para>Network: even if the virtual network cable was disconnected, some
+ guests were able to send / receive packets (E1000; bug #5366)</para>
+ </listitem>
+
+ <listitem>
+ <para>Network: even if the virtual network cable was disconnected, the
+ PCNet card received some spurious packets which might confuse the
+ guest (bug #4496)</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared Folders: fixed changing case of file names (bug #2520)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed crash in seamless mode (contributed by Huihong Luo)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: fixed writing to files opened in
+ <emphasis>O_APPEND</emphasis> mode (bug #3805)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris Additions: fixed regression in Guest Additions driver which
+ among other things caused lost guest property updates and
+ periodic error messages being written to the system log</para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect1>
+
+ <sect1>
+ <title>Version 3.0.10 (2009-10-29)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>VMM: guest SMP stability fixes </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed guru meditation with nested paging and SMP guests (bug #5222) </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: changed VT-x/AMD-V usage to detect other active hypervisors;
+ necessary for e.g. Windows 7 XP compatibility mode
+ (Windows &amp; Mac OS X hosts only; bug #4239) </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: guru meditation during SCO OpenServer installation and reboot
+ (VT-x only; bug #5164)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed accessed bit handling in certain cases (bug #5248)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed VPID flushing (VT-x only)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed broken nested paging for 64 bits guests on 32 bits hosts (AMD-V only; bug #5285)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed loading of old saved states/snapshots (bug #3984)</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: fixed memory leaks (bug #5084)</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts (Snow Leopard): fixed redraw problem in a dual
+ screen setup (bug #4942)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows hosts: installer updates for Windows 7</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: out of memory handled incorrectly (bug #5241)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: the previous fix for #5077 broke the DVD host support
+ on Solaris 10 (VBox 3.0.8 regression)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: fixed module compilation against Linux 2.6.32rc4 and later</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest Additions: fixed possible guest OS kernel memory
+ exhaustion</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest Additions: fixed stability issues with SMP guests</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed color depth issue with low resolution hosts,
+ netbooks, etc. (bug #4935)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed NO_MORE_FILES error when saving to shared
+ folders (bug #4106)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed subdirectory creation on shared
+ folders (bug #4299)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: <emphasis>sendfile()</emphasis> returned
+ <emphasis>-EOVERFLOW</emphasis> when executed on a shared folder
+ (bug #2921)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: fixed incorrect disk usage value (non-Windows
+ hosts only)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux installer: register the module sources at DKMS even if the
+ package provides proper modules for the current running kernel</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: removed invalid OpenGL assertion (bug #5158)</para>
+ </listitem>
+
+ <listitem>
+ <para>Network: fixed the Am79C973 PCNet emulation for QNX
+ (and probably other) guests (bug #3206)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMDK: fix handling of split image variants</para>
+ </listitem>
+
+ <listitem>
+ <para>VHD: do not delay updating the footer when expanding the image to prevent
+ image inconsistency </para>
+ </listitem>
+
+ <listitem>
+ <para>USB: stability fix for some USB 2.0 devices</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: added a search index to the .chm help file</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI/Windows hosts: fixed CapsLock handling on French keyboards
+ (bug #2025)</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared clipboard/X11 hosts: fixed a crash when clipboard
+ initialisation failed (bug #4987)</para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect1>
+
+ <sect1>
+ <title>Version 3.0.8 (2009-10-02)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>VMM: fixed 64 bits guest on 32 bits host regression in 3.0.6
+ (VT-x only; bug #4947)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed a recompiler triple fault guru meditation (VT-x &amp;
+ AMD-V only; bug #5058) </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed hang after guest state restore (AMD-V, 32 bits Windows
+ guest and IO-APIC enabled only; bug #5059) </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed paging issue with OS/2 guests </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed guru meditation in rare cases (2.0 regression;
+ software virtualization only) </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed release assertion during state restore when using the
+ Sound Blaster 16 emulation (bug #5042) </para>
+ </listitem>
+
+ <listitem>
+ <para>Security: fixed vulnerability that allowed to execute commands
+ with root privileges</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: fixed runtime assertion in semaphore implementation
+ which was triggered under certain conditions (bug #616)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: change the default USB access mode on certain
+ distributions (bugs #3394 and #4291)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: on hardened Gentoo, the VBoxSVC daemon crashed by
+ opening the VM network settings (bug #3732)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts, Solaris hosts: pass the XAUTHORITY variable along the
+ DISPLAY variable when starting a VM from VBoxManage or from the VM
+ selector (bug #5063)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: use sysfs to enumerate host drives if hal is not
+ available</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed a bug which would hang the host sporadically as
+ interrupts were not re-enabled every time</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed a kernel panic with bridged and host-only
+ networking (bug #4775)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed incorrectly persistent CD/DVD-ROMs when
+ changing them (bug #5077)</para>
+ </listitem>
+
+ <listitem>
+ <para>X11-based hosts: support additional function keys on Sun keyboards
+ (bug #4907)</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts (Snow Leopard): fixed problem starting headless
+ VMs without a graphical session (bug #5002)</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: fixed problem listing host-only adapter names
+ with trailing garbage (attached VMs won't start)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: now work with Vista 64-bit Home editions (bug #3865)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed screen corruption with ZoomText Magnifier</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed NPGetUniversalName failure (bug #4853)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed Windows NT regression (bug #4946)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed VBoxService not running if no Shared Folders
+ are installed</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: implemented <emphasis>ftrunctate</emphasis>
+ (bug #4771)</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: start VM even if configured VRDP port is in use</para>
+ </listitem>
+
+ <listitem>
+ <para>Networking: the PCnet network device stopped receiving under
+ rare conditions (bug #4870)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: implemented <computeroutput>controlvm vrdpport</computeroutput>
+ command</para>
+ </listitem>
+
+ <listitem>
+ <para>iSCSI: fixed issue with NetApp targets (bug #5072)</para>
+ </listitem>
+
+ <listitem>
+ <para>SCSI: add support for virtual disks larger than 2TB </para>
+ </listitem>
+
+ <listitem>
+ <para>USB: fixed potential crash when unplugging USB2 devices
+ (bug #5089)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: IPSEC did not properly work with Linux guests (bug #4801)</para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect1>
+
+ <sect1>
+ <title>Version 3.0.6 (2009-09-09)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>VMM: fixed IO-APIC overhead for 32 bits Windows NT, 2000, XP and 2003 guests
+ (AMD-V only; bug #4392)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed a Guru meditation under certain circumstances when enabling
+ a disabled device (bug #4510)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed a Guru meditation when booting certain Arch Linux guests
+ (software virtualization only; bug #2149)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed hangs with 64 bits Solaris &amp; OpenSolaris
+ guests (bug #2258)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed decreasing <emphasis>rdtsc</emphasis> values
+ (AMD-V &amp; VT-x only; bug #2869)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: small Solaris/OpenSolaris performance improvements (VT-x only) </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: <emphasis>cpuid</emphasis> change to correct reported virtual CPU ID in Linux </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: NetBSD 5.0.1 CD hangs during boot (VT-x only; bug #3947) </para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: worked around an issue that caused the host to hang (bug #4486)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed a rare host system deadlock when using bridged networking</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed a potential host system deadlock when CPUs were
+ onlined or offlined</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts installer: added missing dependency for UTF-8 package (bug #4899)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: don't crash on Linux PAE kernels &lt; 2.6.11 (in particular
+ RHEL/CentOS 4); disable VT-x on Linux kernels &lt; 2.6.13 (bug #1842)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux/Solaris hosts: correctly detect keyboards with fewer keys
+ than usual (bug #4799)</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: prevent password dialogs in 32 bits Snow Leopard</para>
+ </listitem>
+
+ <listitem>
+ <para>Python WS: fixed issue with certain enumerations constants having
+ wrong values in Python web services bindings</para>
+ </listitem>
+
+ <listitem>
+ <para>Python API: several threading and platform issues fixed</para>
+ </listitem>
+
+ <listitem>
+ <para>Python shell: added <emphasis>exportVM</emphasis> command</para>
+ </listitem>
+
+ <listitem>
+ <para>Python shell: various improvements and bugfixes</para>
+ </listitem>
+
+ <listitem>
+ <para>Python shell: corrected detection of home directory in remote case</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF: fixed XML comment handling that could lead to parser errors</para>
+ </listitem>
+
+ <listitem>
+ <para>Main: fixed a rare parsing problem with port numbers of USB device
+ filters in machine settings XML</para>
+ </listitem>
+
+ <listitem>
+ <para>Main: restrict guest RAM size to 1.5 GB (32 bits Windows hosts only)</para>
+ </listitem>
+
+ <listitem>
+ <para>Main: fixed possible hang during guest reboot (bug #3792)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed rare crash when removing the last disk from the media manager (bug #4795)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: fixed <computeroutput>guestproperty</computeroutput>
+ for Mac OS X hosts (bug #3806)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: fixed setting guest properties with
+ <emphasis>--flags</emphasis> or <emphasis>-flags</emphasis></para>
+ </listitem>
+
+ <listitem>
+ <para>Web service: fixed a severe memory leak, at least on platforms using XPCOM</para>
+ </listitem>
+
+ <listitem>
+ <para>Serial: fixed host mode (Solaris, Linux and Mac OS X hosts; bug #4672)</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: Remote USB Protocol version 3</para>
+ </listitem>
+
+ <listitem>
+ <para>SATA: fixed hangs and BSODs introduced with 3.0.4 (bugs #4695, #4739, #4710)</para>
+ </listitem>
+
+ <listitem>
+ <para>SATA: fixed a bug which prevented Windows 7 from detecting more than one hard disk</para>
+ </listitem>
+
+ <listitem>
+ <para>SATA/SCSI: fixed rare random guest crashes and hangs </para>
+ </listitem>
+
+ <listitem>
+ <para>SCSI: fixed problem with Fedora 11 refusing to boot after kernel update</para>
+ </listitem>
+
+ <listitem>
+ <para>iSCSI: fix logging out when the target has dropped the connection,
+ fix negotiation of parameters, fix command resend when the connection
+ was dropped, fix processing SCSI status for targets which do not use
+ phase collapse</para>
+ </listitem>
+
+ <listitem>
+ <para>BIOS: fixed a bug that caused the OS/2 boot manager to fail
+ (2.1.0 regression, bug #3911)</para>
+ </listitem>
+
+ <listitem>
+ <para>PulseAudio: don't hang during VM termination if the connection
+ to the server was unexpectedly terminated (bug #3100)</para>
+ </listitem>
+
+ <listitem>
+ <para>Mouse: fixed weird mouse behaviour with SMP (Solaris) guests (bug #4538)</para>
+ </listitem>
+
+ <listitem>
+ <para>HostOnly Network: fixed failure in
+ <emphasis>CreateHostOnlyNetworkInterface()</emphasis> on Linux (no GUID)</para>
+ </listitem>
+
+ <listitem>
+ <para>HostOnly Network: fixed wrong DHCP server startup while hostonly
+ interface bringup on Linux</para>
+ </listitem>
+
+ <listitem>
+ <para>HostOnly Network: fixed incorrect factory and default MAC address on Solaris</para>
+ </listitem>
+
+ <listitem>
+ <para>HostOnly Network: fixed the problem with listing host-only
+ interfaces on Mac OS X when all physical interfaces are down (bugs
+ #4698, #4790)</para>
+ </listitem>
+
+ <listitem>
+ <para>DHCP: fixed a bug in the DHCP server where it allocated one IP address
+ less than the configured range</para>
+ </listitem>
+
+ <listitem>
+ <para>E1000: fixed receiving of multicast packets</para>
+ </listitem>
+
+ <listitem>
+ <para>E1000: fixed up/down link notification after resuming a VM</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed Ethernet address corruptions (bug #4839)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed hangs, dropped packets and retransmission problems (bug #4343)</para>
+ </listitem>
+
+ <listitem>
+ <para>Bridged networking: fixed packet queue issue which might cause
+ DRIVER_POWER_STATE_FAILURE BSOD for Windows hosts (bug #4821)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed a bug in VBoxGINA which prevented selecting
+ the right domain when logging in the first time</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows host installer: should now also work on unicode systems
+ (like Korean, bug #3707)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows host installer: check for sufficient disk space</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared clipboard: do not send zero-terminated text to X11 guests
+ and hosts (bug #4712)</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared clipboard: use a less CPU intensive way of checking for
+ new data on X11 guests and hosts (bug #4092)</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest Additions: do not hide the host mouse cursor when restoring
+ a saved state (bug #4700)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows guests: fixed issues with the display of the mouse
+ cursor image (bugs #2603, #2660 and #4817)</para>
+ </listitem>
+
+ <listitem>
+ <para>SUSE 11 guests: fixed Guest Additions installation (bug #4506)</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest Additions: support Fedora 12 Alpha guests (bugs #4731, #4733 and #4734)</para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect1>
+
+ <sect1>
+ <title>Version 3.0.4 (2009-08-04)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>VMM: 64 bits guest stability fixes (AMD-V only; bugs #3923 &amp; #3666)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: SMP stability fixes (AMD-V only)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: SMP performance improvement (esp. for Solaris guests)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: eliminated several bugs which could lead to a host reboot</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed OS/2 ACP2 boot floppy hang (VT-x only)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: small performance improvement for OpenSolaris guests (AMD-V only)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed CentOS/Xen reboot (software virtualization only; bug #4509)</para>
+ </listitem>
+
+ <listitem>
+ <para>SATA: fixed hangs / BSOD during Windows XP installation (bug #4342)</para>
+ </listitem>
+
+ <listitem>
+ <para>SATA: mark the ports as non hotpluggable (bug #3920)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fix deadlocks and context/window tracking for
+ multithreaded applications (bug #3922)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fix memory leaks when terminating OpenGL guest applications</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fix crash in Call of Duty</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: using two or more NAT adapters in one VM was broken (3.0.0 regression)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed network communication corruptions (bugs #4499, #4540, #4591, #4604)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed passive ftp access to host server (bug #4427)</para>
+ </listitem>
+
+ <listitem>
+ <para>iSCSI: fixed cloning to/from iSCSI disks</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed path separator handling for the OVF export on
+ Windows (bug #4354)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: the mini toolbar was only shown on the first host display
+ (bug #4654)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: added a VM option to display the mini toolbar on top</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: don't crash when adding plus configuring host-only network
+ interfaces</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared Folders: fixed selection of a drive root directory as a shared folder host path
+ in VirtualBox (Windows host only)</para>
+ </listitem>
+
+ <listitem>
+ <para>USB: fixed a bug that may have rendered USB device filter settings
+ inactive (3.0.2 regression, bug #4668)</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest Additions: report the Guest Additions version to the guest
+ properties (bug #3415)</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: fix creation of VMDK files giving raw partition access
+ (bug #1461)</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: improved support for Snow Leopard </para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: fixed problems leading to wrong colors or
+ transparency in host windows with some graphics drivers (bug #3095)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: hardware detection fallbacks if the hal service
+ fails to find any DVD drives</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux and Solaris hosts: Work around color handling problems in
+ Qt (bug #4353)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed memory leaks in host-only networking</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris Installer: fixed incorrect netmask for Host-only interface (bug #4590)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris Installer: added package dependency for Python and Python-devel (bug #4570)</para>
+ </listitem>
+
+ <listitem>
+ <para>X11 guests: prevent windows from being skipped in
+ seamless mode KDE guests (bugs #1681 and #3574)</para>
+ </listitem>
+
+ <listitem>
+ <para>X11 guests: fixed screen corruption in X11 guests when large
+ amounts of video RAM were allocated (bug #4430)</para>
+ </listitem>
+
+ <listitem>
+ <para>X11 guests: some fixes when switching between host and
+ guest-drawn mouse pointers</para>
+ </listitem>
+
+ <listitem>
+ <para>X11 guests: fixed an issue which caused seamless mode to stop
+ working as it should (the main issue listed in bug #2238)</para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect1>
+ <sect1>
+ <title>Version 3.0.2 (2009-07-10)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>VMM: fixed network regressions (guest hangs during network IO) (bug #4343)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: guest SMP performance improvements</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed hangs and poor performance with Kaspersky Internet Security
+ (VT-x/AMD-V only; bug #1778)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed crashes when executing certain Linux guests (software
+ virtualization only; bugs #2696 &amp; #3868)</para>
+ </listitem>
+
+ <listitem>
+ <para>ACPI: fixed Windows 2000 kernel hangs with IO-APIC enabled (bug #4348)</para>
+ </listitem>
+
+ <listitem>
+ <para>APIC: fixed high idle load for certain Linux guests (3.0 regression)</para>
+ </listitem>
+
+ <listitem>
+ <para>BIOS: properly handle Ctrl-Alt-Del in real mode</para>
+ </listitem>
+
+ <listitem>
+ <para>iSCSI: fixed configuration parsing (bug #4236)</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF: fix potential confusion when exporting networks</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF: compatibility fix (bug #4452)</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF: accept ovf:/disk/ specifiers with a single slash in addition to ovf://disk/ (bug #4452) </para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed crashes under certain circumstances (bug #4330)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed dynamic linking on Solaris/OpenSolaris guests (bug #4399)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed incorrect context/window tracking for multithreaded apps</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared Folders: fixed loading from saved state (bug #1595)</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared Folders: host file permissions set to 0400 with Windows
+ guest (bug #4381)</para>
+ </listitem>
+
+ <listitem>
+ <para>X11 host and guest clipboard: fixed a number of issues, including bug #4380 and #4344</para>
+ </listitem>
+
+ <listitem>
+ <para>X11 Additions: fixed some issues with seamless windows in X11 guests (bug #3727)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: added VBoxServiceNT for NT4 guests
+ (for time synchronization and guest properties)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed version lookup</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Installer: support Pardus Linux</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: workaround for buggy graphics drivers showing a
+ black VM window on recent distributions (bug #4335)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: fixed typo in kernel module startup script (bug #4388)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: several installer fixes</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed a preemption issue causing VMs to never start on Solaris 10 (bug #4328)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris guests: fixed mouse integration for OpenSolaris 2009.06 (bug #4365) </para>
+ </listitem>
+
+ <listitem>
+ <para>Windows hosts: fixed high CPU usage after resuming the host (bug #2978)</para>
+ </listitem>
+
+ <listitem>
+ <para>Fixed a settings file conversion bug which sometimes caused hardware acceleration to be enabled for virtual machines that had no explicit configuration in the XML</para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect1>
+
+ <sect1>
+ <title>Version 3.0.0 (2009-06-30)</title>
+
+ <para>This version is a major update. The following major new features
+ were added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>Guest SMP with up to 32 virtual CPUs (VT-x and AMD-V only; see <xref linkend="settings-processor" />)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows guests: ability to use Direct3D 8/9 applications / games
+ (experimental; see <xref linkend="guestadd-3d" />)</para>
+ </listitem>
+
+ <listitem>
+ <para>Support for OpenGL 2.0 for Windows, Linux and Solaris guests</para>
+ </listitem>
+
+ </itemizedlist>
+
+ <para>In addition, the following items were fixed and/or added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>Solaris hosts: allow suspend/resume on the host when a VM is running (bug #3826)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: loosen the restriction for contiguous physical memory under
+ certain conditions</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: fixed guest PAE</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: kernel module compile fixes for 2.6.31 (bug #4264)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed occasional guru meditation when loading a saved state (VT-x only)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: eliminated IO-APIC overhead with 32 bits guests (VT-x only, some Intel CPUs don't support
+ this feature (most do); bug #638)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed 64 bits CentOS guest hangs during early boot (AMD-V only; bug #3927)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: performance improvements for certain PAE guests (e.g. Linux 2.6.29+ kernels) </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: some Windows guests detected a completely wrong CPU frequency (bug #2227)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed hanging and unkillable VM processes (bug #4040)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed random infrequent guest crashes due XMM state corruption (Win64 hosts only)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: performance improvements for network I/O (VT-x/AMD-V only)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: added mini toolbar for full screen and seamless mode (Thanks to Huihong Luo)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: redesigned settings dialogs</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: allow to create/remove more than one host-only network adapters
+ (non Windows hosts)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: display estimated time for long running operations (e.g. OVF import/export)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed rare hangs when open the OVF import/export wizards (bug #4157)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed VM crashes for client applications using incorrect OpenGL states</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed memory corruption when querying for supported texture compression formats</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed incorrect rendering of glDrawRangeElements</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed memory leak when using VBOs</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed glew library detection</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed random textures corruption</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: support Windows 7 RDP client</para>
+ </listitem>
+
+ <listitem>
+ <para>Networking: fixed another problem with TX checksum offloading
+ with Linux kernels up to version 2.6.18</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed "open ports on virtual router 10.0.2.2 - 513, 514" (forum)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: allow to configure socket and internal parameters</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: allow to bind sockets to specific interface</para>
+ </listitem>
+
+ <listitem>
+ <para>PXE boot: significant performance increase (VT-x/AMD-V only)</para>
+ </listitem>
+
+ <listitem>
+ <para>VHD: properly write empty sectors when cloning of VHD images (bug #4080)</para>
+ </listitem>
+
+ <listitem>
+ <para>VHD: fixed crash when discarding snapshots of a VHD image</para>
+ </listitem>
+
+ <listitem>
+ <para>VHD: fixed access beyond the block bitmap which could lead to arbitrary crashes</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: fixed incorrect partition table processing when
+ creating VMDK files giving raw partition access (bug #3510)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: support cloning to existing image file</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF: several OVF 1.0 compatibility fixes</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF: fixed exporting of disk images when multiple virtual machines are exported at once</para>
+ </listitem>
+
+ <listitem>
+ <para>Virtual mouse device: eliminated micro-movements of the
+ virtual mouse which were confusing some applications (bug #3782)</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared Folders: sometimes a file was created using the wrong permissions
+ (2.2.0 regression; bug #3785)</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared Folders: allow to change file attributes from Linux guests and use the
+ correct file mode when creating files</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared Folders: some content was incorrectly written under certain
+ conditions (bug #1187)</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared Folders: fixed incorrect file timestamps, when using Windows guest
+ on a Linux host (bug #3404)</para>
+ </listitem>
+
+ <listitem>
+ <para>X11 clipboard: fix duplicate end of lines (bug #4270)</para>
+ </listitem>
+
+ <listitem>
+ <para>X11 guests: a number of shared clipboard fixes</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux guests: Guest Additions support for SUSE Linux
+ Enterprise Desktop 11</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux guests: new daemon vboxadd-service to handle time synchronization and
+ guest property lookup</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux guests: implemented guest properties (OS info, logged in users,
+ basic network information)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows host installer: VirtualBox Python API can now be installed automatically
+ (requires Python and Win32 Extensions installed)</para>
+ </listitem>
+
+ <listitem>
+ <para>USB: Support for high-speed isochronous endpoints has been
+ added. In addition, read-ahead buffering is performed for input
+ endpoints (currently Linux hosts only). This should allow additional
+ devices to work, notably webcams (bug #242)</para>
+ </listitem>
+
+ <listitem>
+ <para>USB: fixed error handling for some USB dongles</para>
+ </listitem>
+
+ <listitem>
+ <para>Web service: fixed inability to handle NULL pointers for object arguments, which
+ are valid values for a lot of APIs, in both the raw and the object-oriented
+ web service</para>
+ </listitem>
+
+ <listitem>
+ <para>Web service: object-oriented bindings for JAX-WS did not exhibit interface
+ inheritance correctly, fixed</para>
+ </listitem>
+
+ <listitem>
+ <para>Web service: added support for IDisplay and IGuest interfaces, which were previously
+ unavailable</para>
+ </listitem>
+
+ <listitem>
+ <para>Registration dialog uses Sun Online accounts now</para>
+ </listitem>
+
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Version 2.2.4 (2009-05-29)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>Windows Installer: fixed a potential hang during
+ installation</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Installer: fixed several problems (bug #3892)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: make it work with Solaris build 114 or
+ later (bug #3981)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed a bug serial port character handling found during
+ loopback (bug #3120)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: adapted vboxdrv.sh to the latest changes in
+ <computeroutput>VBoxManage list runningvms</computeroutput>
+ (bug #4034)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Windows hosts: fixed a crash caused by host-only/bridged
+ networking</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: fixed access to host DVD with passthrough
+ disabled (bug #4077)</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest Additions: fixed problems with KDE 4 not recognizing mouse
+ clicks</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed incorrect 8-bit guest color depth in
+ Windows 7 guests</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: warn if VT-x/AMD-V could not be enabled for guests
+ that require this setting (bug #4055)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed occasional crash due to insufficient memory</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed hanging 64 bits Solaris guests</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: restore from a saved state occasionally failed
+ (bugs #3984 and #2742)</para>
+ </listitem>
+
+ <listitem>
+ <para>Clipboard: fixed a deadlock while shutting down the shared
+ clipboard on X11 hosts (bug #4020)</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF: fixed potential hang during import</para>
+ </listitem>
+
+ <listitem>
+ <para>OVF: fixed potential crashes during import/export on Win64 hosts</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage <computeroutput>modifyhd --compact</computeroutput>:
+ fixed bug which could lead to crashes and image corruption
+ (bug #3864)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage <computeroutput>metrics collect</computeroutput>:
+ now flushes the output stream</para>
+ </listitem>
+
+ <listitem>
+ <para>VHD: made <computeroutput>VBoxManage internalcommands
+ sethduuid</computeroutput> work for .vhd files (bug #3443)</para>
+ </listitem>
+
+ <listitem>
+ <para>VHD: some .vhd files could not be cloned (bug #4080)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: improvement of TCP connection establishment (bug #2987)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed order of DNS servers in DHCP lease (bug #4091)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed DHCP lease for multiple name servers (bug #3692)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed a potential segfault if the host lost its connectivity
+ (bug #3964)</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared Folders: deny access to parent directories on Windows
+ hosts (bug #4090)</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared Folders: make rm/rmdir work with Solaris guests on Windows
+ hosts</para>
+ </listitem>
+
+ <listitem>
+ <para>Networking: fixed the problem with blocked receiving thread when
+ a broadcast packet arrives too early to be handled by uninitialized
+ e1000 adapter</para>
+ </listitem>
+
+ <listitem>
+ <para>Networking: fixed the problem that caused host freezes/crashes
+ when using bridged mode with host's interface having RX checksum
+ offloading on (bug #3926 and related). Fixes problems with TX
+ offloading as well (bug #3870)</para>
+ </listitem>
+
+ <listitem>
+ <para>PXE boot: Added support for PRO/1000 MT Server adapter</para>
+ </listitem>
+
+ <listitem>
+ <para>Python bindings: fixed keyword conflict</para>
+ </listitem>
+
+ <listitem>
+ <para>SCSI: fixed occasional crashes on Win64</para>
+ </listitem>
+
+ <listitem>
+ <para>Serial: allow to redirect the serial port to a raw
+ file (bug #1023)</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: fixed a rare incorrect screen update</para>
+ </listitem>
+
+ <listitem>
+ <para>VMDK: fixed creating snapshots</para>
+ </listitem>
+
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Version 2.2.2 (2009-04-27)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>Host and guest clipboard: fixed a number of issues affecting
+ hosts and guests running the X window system</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest Additions: make sure the virtual mouse autodetection works
+ on first reboot after installing the Additions on X.Org server 1.5
+ and later</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest Additions: properly report process identity number of
+ running services</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest Additions: clean up properly if the X Window server
+ terminates</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: fixed installation path for OpenGL libraries
+ in some 64-bit guests (bug #3693)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris Additions: fixed installation to work when X.Org is not
+ installed on the guest</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris Additions: fixed a bug that could panic the guest when
+ unmounting a busy shared folder</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed mouse pointer integration of some
+ Windows guests (2.2.0 regression, bug #3734)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed installation on Windows Server 2008 Core
+ (bug #2628)</para>
+ </listitem>
+
+ <listitem>
+ <para>Main: do not try to use older versions of D-Bus (Linux
+ hosts only, bug #3732)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed out-of-memory conditions on Windows hosts
+ (bug #3657)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed occasional hangs when attaching USB
+ devices during VM startup (2.2.0 regression; bugs #3787)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed guru meditation related to memory management (software
+ virtualization only)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Virtual disks: fix possible data corruption when writing to diff
+ images, incorrect detection of redundant writes</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: reworked network settings dialog</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: properly show the detailed settings dialog of NAT
+ networks (bug #3702)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: HostKey could not be changed (2.2.0 regression,
+ bug #3689)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed memory textfield size (Windows hosts only;
+ bug #3679)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed crash when selecting a shared folder path (Windows hosts only;
+ bugs #3694, #3751, #3756)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage <computeroutput>modifyhd --compact</computeroutput>:
+ implemented again for VDI files, and now supports relative paths
+ (bug #2180, #2833)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage <computeroutput>snapshot discard</computeroutput>:
+ made it work again (2.1.0 regression; bug #3714)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: on some Windows hosts, the guest didn't receive a DHCP
+ lease (bug #3655)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed release assertion during <emphasis>poll()</emphasis>
+ (bug #3667)</para>
+ </listitem>
+
+ <listitem>
+ <para>Networking: fixed a deadlock caused by the PCnet network device
+ emulation (2.2.0 regression, bug #3676)</para>
+ </listitem>
+
+ <listitem>
+ <para>Clipboard: fixed random crashes (X11 hosts only, bug #3723)</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared Folders: fixed incorrect permissions for Solaris guests</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared Folders: fixed wrong file sizes with Solaris guests</para>
+ </listitem>
+
+ <listitem>
+ <para>CBindings: fixed possible memory leak while releasing the IVirtualBox and ISession Objects</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed host-only network interface incompatibility with nwam/dhcpagent (bug #3754)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows installer: fixed several install and uninstall issues (bugs #3659, #3686, #1730, #3711, #3373, #3382, #3701, #3685, #3710)</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: preliminary support for Snow Leopard</para>
+ </listitem>
+
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Version 2.2.0 (2009-04-08)</title>
+
+ <para>This version is a major update. The following major new features
+ were added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>OVF (Open Virtualization Format) appliance import and export (see <xref linkend="ovf" />) </para>
+ </listitem>
+
+ <listitem>
+ <para>Host-only networking mode (see <xref linkend="network_hostonly" />) </para>
+ </listitem>
+
+ <listitem>
+ <para>Hypervisor optimizations with significant performance gains for high context switching rates</para>
+ </listitem>
+
+ <listitem>
+ <para>Raised the memory limit for VMs on 64-bit hosts to 16GB</para>
+ </listitem>
+
+ <listitem>
+ <para>VT-x/AMD-V are enabled by default for newly created virtual machines</para>
+ </listitem>
+
+ <listitem>
+ <para>USB (OHCI &amp; EHCI) is enabled by default for newly created virtual machines (Qt GUI only)</para>
+ </listitem>
+
+ <listitem>
+ <para>Experimental USB support for OpenSolaris hosts</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared Folders for Solaris and OpenSolaris guests</para>
+ </listitem>
+
+ <listitem>
+ <para>OpenGL 3D acceleration for Linux and Solaris guests (see <xref linkend="guestadd-3d" />)</para>
+ </listitem>
+
+ <listitem>
+ <para>Added C API in addition to C++, Java, Python and Web Services</para>
+ </listitem>
+
+ </itemizedlist>
+
+ <para>In addition, the following items were fixed and/or added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>VMM: FreeBSD guest related fix for V86 flags (bug #2342) </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed guru meditation when booting an AsteriskNow Linux VM (bug #2342) </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed PGMPOOLKIND_FREE guru meditation (bugs #3356, #3431) </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed Windows XP boot hang (guest PAE + nested paging only) </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: allow mixing of VT-x/AMD-V and software virtualization </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed extremely slow safe mode booting in e.g. Windows 2008 (VT-x/AMD-V only) </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: significant speedup of certain GRUB boot loaders (e.g. Solaris) (VT-x/AMD-V only) </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: real-mode IOPL fix for DOS guests (VT-x only) </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed VT-x detection with certain BIOSes that enable VT-x,
+ but don't set the lock bit in MSR_IA32_FEATURE_CONTROL </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed hibernation issues on Windows XP hosts (VT-x only; bug #1794) </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: properly emulate <emphasis>RDMSR</emphasis> from the
+ TSC MSR, should fix some NetBSD guests</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: emulate <emphasis>RDPMC</emphasis>; fixes Windows guests crashes
+ when using the Kaspersky virus scanner (bug #1778) </para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed truncated downloads (FTP) (bug #3257)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: blocked UDP packets caused a crash (bug #3426)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: allow to configure the <emphasis>next server</emphasis>
+ and the <emphasis>boot file</emphasis> via VBoxManage (bug #2759)</para>
+ </listitem>
+
+ <listitem>
+ <para>IDE: fixed hard disk upgrade from XML-1.2 settings (bug #1518)</para>
+ </listitem>
+
+ <listitem>
+ <para>Hard disk: support more VMDK file variants (including fixed-size
+ ESX server images)</para>
+ </listitem>
+
+ <listitem>
+ <para>Hard disks: refuse to start the VM if a disk image is not
+ writable</para>
+ </listitem>
+
+ <listitem>
+ <para>USB: further reduced host CPU utilization for OHCI and
+ EHCI; the "VBoxInternal/Devices/usb-ohci/0/Config/FrameRate" CFG key
+ is no longer necessary and no longer supported</para>
+ </listitem>
+
+ <listitem>
+ <para>USB: fixed BSOD on the host with certain USB devices
+ (Windows hosts only; bug #1654)</para>
+ </listitem>
+
+ <listitem>
+ <para>E1000: properly handle cable disconnects (bug #3421)</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: fixed hangs when VRDP server is enabled or disabled in runtime</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared Folders: respect umask settings on Linux, OSX and Solaris
+ hosts when creating files</para>
+ </listitem>
+
+ <listitem>
+ <para>X11 guests: prevented setting the locale in vboxmouse, as
+ this caused problems with Turkish locales (bug #3563)</para>
+ </listitem>
+
+ <listitem>
+ <para>X11 guests: show the guest mouse pointer at the right position
+ if the virtual desktop is larger than the guest resolution (bug
+ #2306)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: fixed typo when detecting Xorg 1.6
+ (bug #3555)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris guests: added xpg4/xcu4 dependency to the Guest Additions
+ installer (bug #3524)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows guests: bind the VBoxMouse.sys filter driver to the
+ correct guest pointing device (bug #1324)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows hosts: fixed BSOD when starting a VM with enabled host
+ interface (bug #3414)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: do proper reference counting to prevent unloading
+ the vboxnetflt module as long as this code is in use (bug #3104)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: do not leave zombies of VBoxSysInfo.sh
+ (bug #3586)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux installers: fixes for Slackware, Arch Linux and Linux
+ from Scratch systems</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows installers: combined installer executable which contains
+ both (32- and 64-bit) architectures</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: less cryptic command-line error messages</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage <computeroutput>list vms</computeroutput> commands now
+ default to compact format</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage <computeroutput>controlvm dvdattach</computeroutput>
+ did not work if the image was attached before</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: allow creation of all supported disk image variants</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage <computeroutput>showvminfo</computeroutput>:
+ don't spam the release log if the Guest Additions don't support
+ statistics information (bug #3457)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: big command line processing cleanup, the legacy
+ single-dash options are deprecated and will be removed in the
+ next major release, so switch to the new options now</para>
+ </listitem>
+
+ <listitem>
+ <para>Hard disks: improved immutable disk support to auto-reset diff file at
+ VM startup (related to bug #2772)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: enable the audio adapter by default for new VMs</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: warn if VT-x/AMD-V is not operational when starting a 64-bit guest</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: deactivate 64-bit guest support when the host CPU does not support VT-x/AMD-V</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: removed floppy icon from the status bar</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: show build revision in about dialog</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed sticky status bar text</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: improved error dialogs</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fail with an appropriate error message when trying to boot
+ a read-only disk image (bug #1745)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI/Mac OS X: fixed disabled close button</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI/Windows: re-enabled support for copy and paste (Windows hosts 2.0
+ regression; bug #2065)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: added OpenGL select/feedback support (bug #2920)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: close OpenGL subsystem for terminated guest applications (bug #3243)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed VM hangs when starting guests with 3D acceleration enabled (bug #3437)</para>
+ </listitem>
+
+ <listitem>
+ <para>PXE: fixed boot hangs when hardware virtualization is used (bug
+ #2536)</para>
+ </listitem>
+
+ <listitem>
+ <para>LsiLogic: fixed problems with Solaris guests</para>
+ </listitem>
+
+ <listitem>
+ <para>Main API: close machine settings XML file when unregistering machine
+ (bug #3548)</para>
+ </listitem>
+
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Version 2.1.4 (2009-02-16)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>Windows hosts: fixed host crashes/hangs on certain 32 bits Windows systems
+ when running Linux guests (bugs #1606, #2269, #2763)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows hosts: fixed network component BSOD issue (bugs #3168, #2916)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows hosts: fixed installation issues (bugs #2517, #1730, #3130)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: fixed occasional kernel oopses (bug #2556)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: fixed module dependency for shipped modules
+ (bug #3115)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: moved the udev rules for USB forward so that they
+ don't override existing system rules (bug #3143)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: fixed the issue with guest not being able to
+ communicate with each other when attached via TAP interfaces
+ (bug #3215)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: give up probing for USB gracefully if DBus or hal
+ are not available (bug #3136)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: fixed warnings in installer when SELinux was
+ disabled (bug #3098)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: VirtualBox sometimes failed to start if it had
+ been started using sudo previously (bug #3270)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed high CPU load while running many guests
+ in parallel</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed inability to start more than 128 VMs</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed performance regression for Windows guests (bug #3172) </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: ignore CPU stepping when restoring a saved state/snapshot</para>
+ </listitem>
+
+ <listitem>
+ <para>REM: fixed inability to use gdb to debug programs in Linux guests with
+ software virtualization (bug #3245)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed dead key handling on Solaris hosts (bug #3256)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: in the shutdown dialog, disable the action <emphasis>send the
+ shutdown signal</emphasis> if the guest is currently not using ACPI</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: suppress additional key release events sent by X11 hosts
+ when keys are auto-repeated (bug #1296)</para>
+ </listitem>
+
+ <listitem>
+ <para>API: restore case insensitive OS type name lookup (bug #3087)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxHeadless: really don't start X11 services (clipboard service,
+ 3D acceleration; Solaris &amp; Darwin hosts only; bug #3199)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed occasional crashes when the guest is doing
+ traceroute (non-Windows hosts; bug #3200)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed crashes under high load (bug #3110)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed truncated downloads (Windows hosts only, bug #3257)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: don't intercept TFTP packages with a destination address
+ different from the builtin TFTP server (bug #3112)</para>
+ </listitem>
+
+ <listitem>
+ <para>USB: several fixes for USB passthrough on Linux hosts</para>
+ </listitem>
+
+ <listitem>
+ <para>USB: reduced host CPU utilization if EHCI is active</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: fixed VRDP server black screen after a client reconnect (bug #1989)</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: modified rdesktop client (rdesktop-vrdp) now uses NumLock state
+ synchronization (bug #3253)</para>
+ </listitem>
+
+ <listitem>
+ <para>LsiLogic: make FreeBSD guests work (bug #3174)</para>
+ </listitem>
+
+ <listitem>
+ <para>ATA: fixed deadlock when pausing VM due to problems with the
+ virtual disk (e.g. disk full, iSCSI target unavailable)</para>
+ </listitem>
+
+ <listitem>
+ <para>iSCSI: fixed possible crash when pausing the VM</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: added missing GL_MAX_TEXTURE_COORDS_ARB (bug #3246)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed <emphasis>ERROR (e0000101)</emphasis>
+ error during installation (bug #1923)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed Windows Explorer hang when browsing shared folders
+ with 64 bit guests (bug #2225)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed guest screen distortions during a video mode change</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed the <emphasis>Network drive not connected</emphasis>
+ message for mapped shared folders drives after the guest startup (bug #3157)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: fixed occasional file corruption when writing files
+ in <emphasis>O_APPEND</emphasis> mode to a shared folder (bug #2844)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: the mouse driver was not properly set up
+ on X.Org release candidates (bug #3212)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: fixed installer to work with openSUSE 11.1
+ (bug #3213)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: disable dynamic resizing if the X server is
+ configured for fixed resolutions</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux/Solaris Additions: handle virtual resolutions properly which are
+ larger than the actual guest resolution (bug #3096)</para>
+ </listitem>
+
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Version 2.1.2 (2009-01-21)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>USB: Linux host support fixes (bug #3136)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed guru meditation for PAE guests on non-PAE hosts (AMD-V)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed guru meditation on Mac OS X hosts when using VT-x</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: allow running up to 1023 VMs on 64-bit hosts (used to be 127)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: several FreeBSD guest related fixes (bugs #2342, #2341, #2761) </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed guru meditation when installing Suse Enterprise Server 10U2 (VT-x only; bug #3039)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed guru meditation when booting Novell Netware 4.11 (VT-x only; bug #2898) </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed VERR_ADDRESS_TOO_BIG error on some Mac OS X systems when starting a VM </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: clear MSR_K6_EFER_SVME after probing for AMD-V (bug #3058) </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed guru meditation during Windows 7 boot with more than 2 GB guest RAM (VT-x, nested paging only) </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed hang during OS/2 MCP2 boot (AMD-V and VT-x only) </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed loop during OpenBSD 4.0 boot (VT-x only) </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed random crashes related to FPU/XMM with 64 bits guests on 32 bits hosts </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed occasional XMM state corruption with 64 bits guests </para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: raised the RAM limit for new VMs to 75% of the host memory</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: added Windows 7 as operating system type</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxSDL: fixed <computeroutput>-fixed fixedmode</computeroutput> parameter
+ (bug #3067)</para>
+ </listitem>
+
+ <listitem>
+ <para>Clipboard: stability fixes (Linux and Solaris hosts only,
+ bug #2675 and #3003)</para>
+ </listitem>
+
+ <listitem>
+ <para>3D support: fixed VM crashes for certain guest applications
+ (bugs #2781, #2797, #2972, #3089)</para>
+ </listitem>
+
+ <listitem>
+ <para>LsiLogic: improved support for Windows guests (still experimental)</para>
+ </listitem>
+
+ <listitem>
+ <para>VGA: fixed a 2.1.0 regression where guest screen resize
+ events were not properly handled (bug #2783)</para>
+ </listitem>
+
+ <listitem>
+ <para>VGA: significant performance improvements when using VT-x/AMD-V
+ on Mac OS X hosts</para>
+ </listitem>
+
+ <listitem>
+ <para>VGA: better handling for VRAM offset changes (fixes GRUB2 and Dos DOOM display issues)</para>
+ </listitem>
+
+ <listitem>
+ <para>VGA: custom VESA modes with invalid widths are now rounded up
+ to correct ones (bug #2895)</para>
+ </listitem>
+
+ <listitem>
+ <para>IDE: fixed ATAPI passthrough support (Linux hosts only; bug #2795)</para>
+ </listitem>
+
+ <listitem>
+ <para>Networking: fixed kernel panics due to NULL pointer dereference
+ in Linux kernels &lt; 2.6.20 (Linux hosts only; bug #2827)</para>
+ </listitem>
+
+ <listitem>
+ <para>Networking: fixed intermittent BSODs when using the new host
+ interface (Windows hosts only; bugs #2832, #2937, #2929)</para>
+ </listitem>
+
+ <listitem>
+ <para>Networking: fixed several issues with displaying hostif NICs
+ in the GUI (Windows hosts only; bugs 2814, #2842)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Networking: fixed the issue with displaying hostif NICs
+ without assigned IP addresses (Linux hosts only; bug #2780)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Networking: fixed the issue with sent packets coming back to
+ internal network when using hostif (Linux hosts only; bug #3056).
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed port forwarding (Windows hosts only; bug #2808)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed booting from the builtin TFTP server (bug #1959)</para>
+ </listitem>
+
+ <listitem>
+ <para>NAT: fixed occasional crashes (bug #2709)</para>
+ </listitem>
+
+ <listitem>
+ <para>SATA: vendor product data (VPD) is now configurable</para>
+ </listitem>
+
+ <listitem>
+ <para>SATA: raw disk partitions were not recognized
+ (2.1.0 regression, Windows host only, bug #2778)</para>
+ </listitem>
+
+ <listitem>
+ <para>SATA: fixed timeouts in the guest when using raw VMDK files
+ (Linux host only, bug #2796)</para>
+ </listitem>
+
+ <listitem>
+ <para>SATA: huge speed up during certain I/O operations like
+ formatting a drive</para>
+ </listitem>
+
+ <listitem>
+ <para>SATA/IDE: fixed possible crash/errors during VM shutdown</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: fixed loading of <computeroutput>libpam.so.1</computeroutput>
+ from the host (Solaris hosts only)</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: fixed RDP client disconnects</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: fixed VRDP server misbehavior after a broken client connection</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage <computeroutput>showvminfo</computeroutput>:
+ fixed assertion for running VMs (bug #2773)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage <computeroutput>convertfromraw</computeroutput>: added
+ parameter checking and made it default to creating VDI files;
+ fixed and documented format parameter (bug #2776)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage <computeroutput>clonehd</computeroutput>: fixed
+ garbled output image when creating VDI files (bug #2813)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage <computeroutput>guestproperty</computeroutput>: fixed
+ property enumeration (incorrect parameters/exception)</para>
+ </listitem>
+
+ <listitem>
+ <para>VHD: fixed error when attaching certain container files
+ (bug #2768)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: added support for serial ports (bug #1849)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fix for Japanese keyboards (bug #2847)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: 32-bit and 64-bit versions now available as a
+ single, unified package</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: don't depend on <computeroutput>libcap1</computeroutput>
+ anymore (bug #2859)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: kernel module compile fixes for 2.6.29-rc1</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: don't drop any capability if the VM was started
+ by root (2.1.0 regression)</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: save the state of running or paused VMs when the
+ host machine's battery reaches critical level</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: improved window resizing of the VM window</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: added GUI option to disable the dock icon realtime
+ preview in the GUI to decrease the host CPU load when the guest is
+ doing 3D</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: polished realtime preview dock icon</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed guest property and logging OS type
+ detection for Windows 2008 and Windows 7 Beta</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: added support for Windows 7 Beta (bugs #2995, #3015)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed Windows 2000 guest freeze when accessing
+ files on shared folders (bug #2764)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed CTRL-ALT-DEL handling when using VBoxGINA</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions Installer: added /extract switch to only extract
+ (not install) the files to a directory (can be specified with /D=path)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux installer and Additions: added support for the Linux
+ From Scratch distribution (bug #1587) and recent Gentoo versions
+ (bug #2938)</para>
+ </listitem>
+
+ <listitem>
+ <para>Additions: added experimental support for X.Org Server 1.6 RC on
+ Linux guests</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: fixed bug which prevented to properly set
+ <computeroutput>fmode</computeroutput> on mapped shared folders
+ (bug #1776)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: fixed appending of files on shared folders
+ (bug #1612)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: ignore <computeroutput>noauto</computeroutput>
+ option when mounting a shared folder (bug #2498)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: fixed a driver issue preventing X11 from
+ compiling keymaps (bug #2793 and #2905)</para>
+ </listitem>
+
+ <listitem>
+ <para>X11 Additions: workaround in the mouse driver for a server
+ crash when the driver is loaded manually (bug #2397)</para>
+ </listitem>
+
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Version 2.1.0 (2008-12-17)</title>
+
+ <para>This version is a major update. The following major new features
+ were added:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Support for hardware virtualization (VT-x and AMD-V) on Mac OS X hosts</para>
+ </listitem>
+
+ <listitem>
+ <para>Support for 64-bit guests on 32-bit host operating systems (experimental; see <xref linkend="intro-64bitguests" />)</para>
+ </listitem>
+
+ <listitem>
+ <para>Added support for Intel Nehalem virtualization enhancements (EPT and VPID; see <xref linkend="hwvirt" />)</para>
+ </listitem>
+
+ <listitem>
+ <para>Experimental 3D acceleration via OpenGL (see <xref linkend="guestadd-3d" />)</para>
+ </listitem>
+
+ <listitem>
+ <para>Experimental LsiLogic and BusLogic SCSI controllers (see <xref linkend="harddiskcontrollers" />)</para>
+ </listitem>
+
+ <listitem>
+ <para>Full VMDK/VHD support including snapshots (see <xref linkend="vdidetails" />)</para>
+ </listitem>
+
+ <listitem>
+ <para>New NAT engine with significantly better performance, reliability and ICMP echo
+ (ping) support (bugs #1046, #2438, #2223, #1247)</para>
+ </listitem>
+
+ <listitem>
+ <para>New Host Interface Networking implementations for Windows and
+ Linux hosts with easier setup (replaces TUN/TAP on Linux and manual bridging on Windows)</para>
+ </listitem>
+
+ </itemizedlist>
+
+ <para>In addition, the following items were fixed and/or added:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>VMM: significant performance improvements for VT-x (real mode execution) </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: support for hardware breakpoints (VT-x and AMD-V only; bug #477)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: VGA performance improvements for VT-x and AMD-V </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: Solaris and OpenSolaris guest performance improvements for AMD-V (Barcelona family CPUs only) </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed guru meditation while running the Dr. Web virus scanner
+ (software virtualization only; bug #1439)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: deactivate VT-x and AMD-V when the host machine goes into suspend mode; reactivate
+ when the host machine resumes (Windows, Mac OS X &amp; Linux hosts; bug #1660)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed guest hangs when restoring VT-x or AMD-V saved states/snapshots </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed guru meditation when executing a one byte debug
+ instruction (VT-x only; bug #2617)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed guru meditation for PAE guests on non-PAE hosts (VT-x) </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: disallow mixing of software and hardware virtualization execution in general (bug #2404)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed black screen when booting OS/2 1.x (AMD-V only) </para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: pause running VMs when the host machine goes into suspend mode (Windows &amp; Mac OS X hosts)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: resume previously paused VMs when the host machine resumes after suspend (Windows &amp; Mac OS X hosts)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: save the state of running or paused VMs when the host machine's
+ battery reaches critical level (Windows hosts)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: properly restore the position of the selector window when running on
+ the compiz window manager</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: properly restore the VM in seamless mode (2.0 regression)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: warn user about non optimal memory settings</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: structure operating system list according to family and version for improved usability</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: predefined settings for QNX guests</para>
+ </listitem>
+
+ <listitem>
+ <para>IDE: improved ATAPI passthrough support</para>
+ </listitem>
+
+ <listitem>
+ <para>Networking: added support for up to 8 Ethernet adapters per VM</para>
+ </listitem>
+
+ <listitem>
+ <para>Networking: fixed issue where a VM could lose connectivity after a reboot</para>
+ </listitem>
+
+ <listitem>
+ <para>iSCSI: allow snapshot/diff creation using local VDI file</para>
+ </listitem>
+
+ <listitem>
+ <para>iSCSI: improved interoperability with iSCSI targets</para>
+ </listitem>
+
+ <listitem>
+ <para>Graphics: fixed handling of a guest video memory which is not a power
+ of two (bug #2724)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: fixed bug which prevented setting up the serial port
+ for direct device access</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: added support for VMDK and VHD image creation</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: added support for image conversion (VDI/VMDK/VHD/RAW)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: added IPv6 support between host and guest when using host interface networking</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: added ACPI host power status reporting</para>
+ </listitem>
+
+ <listitem>
+ <para>API: redesigned storage model with better generalization</para>
+ </listitem>
+
+ <listitem>
+ <para>API: allow attaching a hard disk to more than one VM at a time</para>
+ </listitem>
+
+ <listitem>
+ <para>API: added methods to return network configuration information of the host system</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared Folders: performance and stability fixes for Windows guests (Microsoft Office Applications)</para>
+ </listitem>
+
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Version 2.0.8 (2009-03-10)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>VMM: fixed guest hangs when restoring VT-x or AMD-V saved
+ states/snapshots</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed memory allocation issues which can cause VM start
+ failures with VERR_PGM_MAPPING_CONFLICT error</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed host crashes/hangs on certain 32 bits Windows systems
+ when running Linux guests (bugs #1606, #2269, #2763)</para>
+ </listitem>
+
+ <listitem>
+ <para>XPCOM/Main: fixed synchronization bug caused by SYSV semaphore key
+ collisions</para>
+ </listitem>
+
+ <listitem>
+ <para>ATA: fixed deadlock when pausing VM due to problems with the
+ virtual disk (e.g. disk full, iSCSI target unavailable)</para>
+ </listitem>
+
+ <listitem>
+ <para>iSCSI: fixed possible crash when pausing the VM</para>
+ </listitem>
+
+ <listitem>
+ <para>iSCSI: fix PDU validity checking and detect final PDU
+ reliably</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxHeadless: really don't start X11 services (clipboard service,
+ 3D acceleration; Solaris &amp; Darwin hosts only; bug #3199)</para>
+ </listitem>
+
+ <listitem>
+ <para>Networking: fixed issue where a VM could lose connectivity after
+ a reboot</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: fixed occasional kernel oopses (bug #2556)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed high CPU load while running many guests
+ in parallel</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed inability to start more than 128 VMs</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris/Web services: fixed SMF script to set home directory
+ correctly</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: fixed occasional file corruption when writing files
+ in <emphasis>O_APPEND</emphasis> mode to a shared folder (bug #2844)</para>
+ </listitem>
+
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Version 2.0.6 (2008-11-21)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>VMM: fixed Guru meditation when running 64 bits Windows guests
+ (bug #2220)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed Solaris 10U6 boot hangs (VT-x and AMD-V) bug #2565)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed Solaris 10U6 reboot hangs (AMD-V only; bug #2565)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: the host key was sometimes not properly displayed (Windows
+ hosts only, bug #1996)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: the keyboard focus was lost after minimizing and restoring
+ the VM window via the Windows taskbar (bugs #784)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: properly show SATA disks when showing the VM information
+ (bug #2624)</para>
+ </listitem>
+
+ <listitem>
+ <para>SATA: fixed access if the buffer size is not sector-aligned
+ (bug #2024)</para>
+ </listitem>
+
+ <listitem>
+ <para>SATA: improved performance</para>
+ </listitem>
+
+ <listitem>
+ <para>SATA: fixed snapshot function with ports&gt;1 (bug #2510)</para>
+ </listitem>
+
+ <listitem>
+ <para>E1000: fixed crash under rare circumstances</para>
+ </listitem>
+
+ <listitem>
+ <para>USB: fixed support for iPhone and Nokia devices (Linux host:
+ bugs #470 &amp; #491)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows host installer: added proper handling of open VirtualBox
+ applications when updating the installation</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows host installer: fixed default installation directory on
+ 64-bit on new installations (bug #2501)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux/Solaris/Darwin hosts: verify permissions
+ in <computeroutput>/tmp/vbox-$USER-ipc</computeroutput></para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: fixed assertion on high network load (AMD64 hosts,
+ fix for Linux distributions with glibc 2.6 and newer (bug #616)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: don't crash during shutdown with serial ports
+ connected to a host device</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed incompatibility between IPSEC and host interface networking</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed a rare race condition while powering off VMs with host interface networking</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed VBoxSDL on Solaris 10 by shipping the required SDL library (bug #2475)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed logged in users reporting via guest properties
+ when using native RDP connections</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed Vista crashes when accessing shared
+ folders under certain circumstances (bug #2461)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed shared folders access with MS-Office
+ (bug #2591)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: fixed compilation of vboxvfs.ko for 64-bit
+ guests (bug #2550)</para>
+ </listitem>
+
+ <listitem>
+ <para>SDK: added JAX-WS port caching to speedup connections</para>
+ </listitem>
+
+ </itemizedlist>
+ </sect1>
+
+ <sect1>
+ <title>Version 2.0.4 (2008-10-24)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>VMM: better error reporting for VT-x failures</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: don't overflow the release log with PATM messages (bug #1775)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed save state restore in real mode (software virtualization only)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: work around a Qt bug on Mac OS X (bug #2321)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: properly install the Qt4 accessible plugin (bug #629)</para>
+ </listitem>
+
+ <listitem>
+ <para>SATA: error message when starting a VM with a VMDK connected to a SATA port (bug #2182)</para>
+ </listitem>
+
+ <listitem>
+ <para>SATA: fixed Guru mediation when booting OpenSolaris/64; most
+ likely applies to other guests as well (bug #2292)</para>
+ </listitem>
+
+ <listitem>
+ <para>Network: don't crash when changing the adapter link state if no
+ host driver is attached (bug #2333)</para>
+ </listitem>
+
+ <listitem>
+ <para>VHD: fixed bug which prevents booting from VHD images bigger than 4GB (bug #2085)</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: fixed a repaint problem when the guest resolution was not
+ equal to the client resolution</para>
+ </listitem>
+
+ <listitem>
+ <para>Clipboard: don't crash when host service initialization takes
+ longer than expected (Linux hosts only; bug #2001)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows hosts: VBoxSVC.exe crash (bug #2212)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows hosts: VBoxSVC.exe memory leak due to a Windows WMI memory leak (Vista only) (bug #2242)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows hosts: VBoxSVC.exe delays GUI startup</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: handle jiffies counter overflow (VM stuck after 300
+ seconds of host uptime; bug #2247)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed host or guest side networking going stale while using host interface
+ networking (bug #2474)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: added support for using unplumbed network interfaces and Crossbow Virtual
+ Network Interfaces (VNICs) with host interface networking</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: reworked threading model improves performance for host interface networking</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed crash when accessing deep directory structures in a shared folder</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: improved shared folder name resolving (bug #1728)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed Windows 2000 shutdown crash (bug #2254)</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: fixed error code for
+ <computeroutput>MoveFile()</computeroutput> if the target exists (bug #2350)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: fixed <computeroutput>seek()</computeroutput>
+ for files bigger than 2GB (bug #2379)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: support Ubuntu 8.10</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: clipboard fixes (bug #2015)</para>
+ </listitem>
+
+ <listitem>
+ <para>Web services: improved documentation and fixed example (bug #1642)</para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect1>
+
+ <sect1>
+ <title>Version 2.0.2 (2008-09-12)</title>
+
+ <para>This is a maintenance release. The following items were fixed and/or
+ added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>VMM: fixed inability to run more than one VM in parallel (AMD-V on
+ CPUs with erratum 170 only; bug #2167)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: VT-x stability fixes (bug #2179 and others)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed Linux 2.6.26+ kernel crashes (used by Ubuntu 8.10 Alpha,
+ Fedora 10 Alpha; bug #1875) </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed 64 bits Linux 2.6.26 kernel crashes (Debian) </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed Vista (32 bits) guest crash during boot when PAE and
+ NX are enabled (applied to 64 bits hosts with VT-x enabled only) </para>
+ </listitem>
+
+ <listitem>
+ <para>VMM: fixed OS/2 guest crashes during boot (AMD-V; bug #2132) </para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed crash when trying to release an inaccessible image in
+ the virtual disk manager</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed invalid error message for a changed snapshot path even
+ if that path wasn't changed (bug #2064)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed crash when creating a new hard disk image (bug #2060)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed crash when adding a hard disk in the VM settings (bug #2081)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed a bug where VirtualBox isn't working with the new
+ QGtkStyle plugin (bug #2066)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed VM close dialog in seamless mode (Mac OS X hosts only;
+ bug #2067)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: fixed standard menu entries for NLS versions (Mac OS X hosts only)</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: disable the VT-x/AMD-V setting when it's not supported by
+ the CPU (or on Mac OS X hosts) </para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: fixed crash during
+ <computeroutput>internalcommands createrawvmdk</computeroutput>
+ (bug #2184)</para>
+ </listitem>
+
+ <listitem>
+ <para>VBoxManage: fixed output of
+ <computeroutput>snapshot showvminfo</computeroutput> (bug #698)</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest properties: added information about guest network interfaces
+ (Windows guests only)</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared Folders: fixed regression that caused Windows guest crashes</para>
+ </listitem>
+
+ <listitem>
+ <para>API: fixed number of installed CPUs (Solaris hosts only)</para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: allow a client to reconnect to an existing session on the VRDP server by dropping the existing connection
+ (configurable and disabled by default; only relevant when multiconnection mode is disabled) </para>
+ </listitem>
+
+ <listitem>
+ <para>VRDP: fixed an image repaint problem</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: fixed bug in vboxdrv.ko that could corrupt kernel
+ memory and panic the kernel (bug #2078)
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>Linux hosts: compile fixes for kernel module on Linux 2.6.27</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: added Python support</para>
+ </listitem>
+
+ <listitem>
+ <para>Additions: fixed a possible hang in HGCM communication after
+ a VM reboot</para>
+ </listitem>
+
+ <listitem>
+ <para>Windows Additions: added support for Windows XP 64 bits (bug #2117)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: deactivate dynamic resizing on Linux guests with
+ buggy X servers</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: support Ubuntu 8.10 guests and Fedora 9 guests
+ (dynamic resizing disabled for the latter)</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: added installer check for the system architecture</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: fixed Xorg modules path for some Linux distributions
+ (bug #2128)</para>
+ </listitem>
+
+ <listitem>
+ <para>VMDK: be more liberal with ambiguous parts of the format
+ specification and accept more format variants (bug #2062)</para>
+ </listitem>
+
+ <listitem>
+ <para>VHD: fixed a bug in the VHD backend which resulted in reading
+ the wrong data (bug #2085)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed kernel panic on certain machines when
+ starting VMs with host interface networking (bug #2183)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed inability to access NFS shares on the
+ host when host interface networking was enabled</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: installer now detects and reports when
+ installing under the wrong architecture</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris hosts: fixed security hardening that prevented
+ starting VMs from non-global zones even as root (bug #1948)</para>
+ </listitem>
+
+ <listitem>
+ <para>Solaris Additions: combined the 32 bit and 64 bit Additions
+ installer into a single package</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X hosts: experimental support for attaching a real serial
+ port to the guest
+ </para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect1>
+
+ <sect1>
+ <title>Version 2.0.0 (2008-09-04)</title>
+
+ <para>This version is a major update. The following major new features
+ were added:<itemizedlist>
+
+ <listitem>
+ <para>64 bits guest support (64 bits host only) </para>
+ </listitem>
+
+ <listitem>
+ <para>New native Leopard user interface on Mac OS X hosts</para>
+ </listitem>
+
+ <listitem>
+ <para>The GUI was converted from Qt3 to Qt4 with many visual improvements</para>
+ </listitem>
+
+ <listitem>
+ <para>New-version notifier</para>
+ </listitem>
+
+ <listitem>
+ <para>Guest property information interface</para>
+ </listitem>
+
+ <listitem>
+ <para>Host Interface Networking on Mac OS X hosts</para>
+ </listitem>
+
+ <listitem>
+ <para>New Host Interface Networking on Solaris hosts</para>
+ </listitem>
+
+ <listitem>
+ <para>Support for Nested Paging on modern AMD CPUs (major performance gain)</para>
+ </listitem>
+
+ <listitem>
+ <para>Framework for collecting performance and resource usage data (metrics)</para>
+ </listitem>
+
+ <listitem>
+ <para>Added SATA asynchronous IO (NCQ: Native Command Queuing) when accessing raw
+ disks/partitions (major performance gain)</para>
+ </listitem>
+
+ <listitem>
+ <para>Clipboard integration for OS/2 Guests</para>
+ </listitem>
+
+ <listitem>
+ <para>Created separate SDK component featuring a new Python programming interface on Linux and Solaris hosts</para>
+ </listitem>
+
+ <listitem>
+ <para>Support for VHD disk images</para>
+ </listitem>
+
+ </itemizedlist></para>
+
+ <para>In addition, the following items were fixed and/or added:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>VMM: VT-x fixes</para>
+ </listitem>
+
+ <listitem>
+ <para>AHCI: improved performance</para>
+ </listitem>
+
+ <listitem>
+ <para>GUI: keyboard fixes</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux installer: properly uninstall the package even if
+ unregistering the DKMS module fails</para>
+ </listitem>
+
+ <listitem>
+ <para>Linux Additions: the guest screen resolution is properly
+ restored</para>
+ </listitem>
+
+ <listitem>
+ <para>Network: added support for jumbo frames (> 1536 bytes)</para>
+ </listitem>
+
+ <listitem>
+ <para>Shared Folders: fixed guest crash with Windows Media Player 11</para>
+ </listitem>
+
+ <listitem>
+ <para>Mac OS X: Ctrl+Left mouse click doesn't simulate a right mouse click in the guest anymore. Use Hostkey+Left for a right mouse click emulation. (bug #1766)</para>
+ </listitem>
+
+ </itemizedlist>
+
+ </sect1>
+
diff --git a/doc/manual/xidl2docbook.xsl b/doc/manual/xidl2docbook.xsl
new file mode 100644
index 00000000..12ea9399
--- /dev/null
+++ b/doc/manual/xidl2docbook.xsl
@@ -0,0 +1,565 @@
+<?xml version="1.0"?>
+
+<!--
+ xidl2docbook.xsl:
+ XSLT stylesheet that generates docbook from
+ VirtualBox.xidl.
+
+ Copyright (C) 2006-2008 Oracle Corporation
+
+ This file is part of VirtualBox Open Source Edition (OSE), as
+ available from http://www.virtualbox.org. This file is free software;
+ you can redistribute it and/or modify it under the terms of the GNU
+ General Public License (GPL) as published by the Free Software
+ Foundation, in version 2 as it comes in the "COPYING" file of the
+ VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+-->
+
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:exsl="http://exslt.org/common"
+ extension-element-prefixes="exsl">
+
+ <xsl:output
+ method="xml"
+ version="1.0"
+ encoding="utf-8"
+ indent="yes"/>
+
+ <xsl:strip-space elements="*"/>
+
+<!-- - - - - - - - - - - - - - - - - - - - - - -
+ global XSLT variables
+ - - - - - - - - - - - - - - - - - - - - - - -->
+
+<xsl:variable name="G_xsltFilename" select="'glue-jaxws.xsl'" />
+
+<!-- collect all interfaces with "wsmap='suppress'" in a global variable for
+ quick lookup -->
+<xsl:variable name="G_setSuppressedInterfaces"
+ select="//interface[@wsmap='suppress']" />
+
+<xsl:template name="makeLinkId">
+ <xsl:param name="ifname" />
+ <xsl:param name="member" />
+ <xsl:value-of select="concat($ifname, '__', $member)"/>
+</xsl:template>
+
+<xsl:template name="emitType">
+ <xsl:param name="type" />
+ <xsl:choose>
+ <xsl:when test="$type">
+ <xsl:choose>
+ <xsl:when test="//interface[@name=$type]">
+ <xref>
+ <xsl:attribute name="apiref">yes</xsl:attribute>
+ <xsl:attribute name="linkend">
+ <xsl:value-of select="translate($type, ':', '_')" />
+ </xsl:attribute>
+ <xsl:value-of select="$type" />
+ </xref>
+ </xsl:when>
+ <xsl:when test="//enum[@name=$type]">
+ <xref>
+ <xsl:attribute name="apiref">yes</xsl:attribute>
+ <xsl:attribute name="linkend">
+ <xsl:value-of select="translate($type, ':', '_')" />
+ </xsl:attribute>
+ <xsl:value-of select="$type" />
+ </xref>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$type" />
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="'void'" />
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="isWebserviceOnly">
+ <xsl:for-each select="ancestor-or-self::*">
+ <xsl:if test="(name()='if') and (@target='wsdl')">
+ <xsl:text>yes</xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+</xsl:template>
+
+
+<!-- - - - - - - - - - - - - - - - - - - - - - -
+ root match
+ - - - - - - - - - - - - - - - - - - - - - - -->
+
+<xsl:template match="/idl">
+ <chapter>
+ <title id="sdkref_classes">Classes (interfaces)</title>
+ <xsl:for-each select="//interface">
+ <xsl:sort select="@name"/>
+
+ <!-- ignore those interfaces within module sections; they don't have uuid -->
+ <xsl:if test="@uuid">
+ <xsl:variable name="ifname" select="@name" />
+ <xsl:variable name="wsmap" select="@wsmap" />
+ <xsl:variable name="wscpp" select="@wscpp" />
+ <xsl:variable name="wsonly"><xsl:call-template name="isWebserviceOnly" /></xsl:variable>
+ <xsl:variable name="extends" select="@extends" />
+ <xsl:variable name="reportExtends" select="not($extends='$unknown') and not($extends='$errorinfo')" />
+
+ <sect1>
+ <xsl:attribute name="id">
+ <xsl:value-of select="$ifname" />
+ </xsl:attribute>
+ <title><xsl:value-of select="$ifname" />
+ <xsl:if test="$reportExtends">
+ <xsl:value-of select="concat(' (', @extends, ')')" />
+ </xsl:if>
+ </title>
+
+ <xsl:choose>
+ <xsl:when test="$wsmap='suppress'">
+ <note>
+ This interface is not supported in the web service.
+ </note>
+ </xsl:when>
+ <xsl:when test="$wsmap='struct'">
+ <note>With the web service, this interface is mapped to a structure. Attributes that return this interface will not return an object, but a complete structure
+ containing the attributes listed below as structure members.</note>
+ </xsl:when>
+ <xsl:when test="$wsonly='yes'">
+ <note>This interface is supported in the web service only, not in COM/XPCOM.</note>
+ </xsl:when>
+ </xsl:choose>
+
+ <xsl:if test="$reportExtends">
+ <note>
+ This interface extends
+ <xref>
+ <xsl:attribute name="apiref">yes</xsl:attribute>
+ <xsl:attribute name="linkend"><xsl:value-of select="$extends" /></xsl:attribute>
+ <xsl:value-of select="$extends" />
+ </xref>
+ and therefore supports all its methods and attributes as well.
+ </note>
+ </xsl:if>
+
+ <xsl:apply-templates select="desc" />
+
+ <xsl:if test="attribute">
+ <sect2>
+ <title>Attributes</title>
+ <xsl:for-each select="attribute">
+ <xsl:variable name="attrtype" select="@type" />
+ <sect3>
+ <xsl:attribute name="id">
+ <xsl:call-template name="makeLinkId">
+ <xsl:with-param name="ifname" select="$ifname" />
+ <xsl:with-param name="member" select="@name" />
+ </xsl:call-template>
+ </xsl:attribute>
+ <title>
+ <xsl:choose>
+ <xsl:when test="@readonly='yes'">
+ <xsl:value-of select="concat(@name, ' (read-only)')" />
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="concat(@name, ' (read/write)')" />
+ </xsl:otherwise>
+ </xsl:choose>
+ </title>
+ <programlisting>
+ <xsl:call-template name="emitType">
+ <xsl:with-param name="type" select="$attrtype" />
+ </xsl:call-template>
+ <xsl:value-of select="concat(' ', $ifname, '::', @name)" />
+ <xsl:if test="(@array='yes') or (@safearray='yes')">
+ <xsl:text>[]</xsl:text>
+ </xsl:if>
+ </programlisting>
+ <xsl:if test="( ($attrtype=($G_setSuppressedInterfaces/@name)) )">
+ <note>
+ This attribute is not supported in the web service.
+ </note>
+ </xsl:if>
+ <xsl:apply-templates select="desc" />
+ </sect3>
+ </xsl:for-each>
+ </sect2>
+ </xsl:if>
+
+ <xsl:if test="method">
+<!-- <sect2> -->
+<!-- <title>Methods</title> -->
+ <xsl:for-each select="method">
+ <xsl:sort select="@name" />
+ <xsl:variable name="returnidltype" select="param[@dir='return']/@type" />
+ <sect2>
+ <xsl:attribute name="id">
+ <xsl:call-template name="makeLinkId">
+ <xsl:with-param name="ifname" select="$ifname" />
+ <xsl:with-param name="member" select="@name" />
+ </xsl:call-template>
+ </xsl:attribute>
+ <title>
+ <xsl:value-of select="@name" />
+ </title>
+ <xsl:if test=" (param[@type=($G_setSuppressedInterfaces/@name)])
+ or (param[@mod='ptr'])" >
+ <note>
+ This method is not supported in the web service.
+ </note>
+ </xsl:if>
+ <!-- make a set of all parameters with in and out direction -->
+ <xsl:variable name="paramsinout" select="param[@dir='in' or @dir='out']" />
+ <programlisting>
+ <!--emit return type-->
+ <xsl:call-template name="emitType">
+ <xsl:with-param name="type" select="$returnidltype" />
+ </xsl:call-template>
+ <xsl:if test="(param[@dir='return']/@array='yes') or (param[@dir='return']/@safearray='yes')">
+ <xsl:text>[]</xsl:text>
+ </xsl:if>
+ <xsl:value-of select="concat(' ', $ifname, '::', @name, '(')" />
+ <xsl:if test="$paramsinout">
+ <xsl:for-each select="$paramsinout">
+ <xsl:text>&#10;</xsl:text>
+ <xsl:value-of select="concat(' [', @dir, '] ')" />
+ <xsl:if test="@mod = 'ptr'">
+ <xsl:text>[ptr] </xsl:text>
+ </xsl:if>
+ <xsl:call-template name="emitType">
+ <xsl:with-param name="type" select="@type" />
+ </xsl:call-template>
+ <emphasis role="bold">
+ <xsl:value-of select="concat(' ', @name)" />
+ </emphasis>
+ <xsl:if test="(@array='yes') or (@safearray='yes')">
+ <xsl:text>[]</xsl:text>
+ </xsl:if>
+ <xsl:if test="not(position()=last())">
+ <xsl:text>, </xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:if>
+ <xsl:text>)</xsl:text>
+ </programlisting>
+
+ <xsl:if test="$paramsinout">
+ <glosslist>
+ <xsl:for-each select="$paramsinout">
+ <glossentry>
+ <glossterm>
+ <xsl:value-of select="@name" />
+ </glossterm>
+ <glossdef>
+ <para>
+ <xsl:apply-templates select="desc" />
+ </para>
+ </glossdef>
+ </glossentry>
+ </xsl:for-each>
+ </glosslist>
+ </xsl:if>
+
+ <!-- dump the description here -->
+ <xsl:apply-templates select="desc" />
+
+ <xsl:if test="desc/result">
+ <para>If this method fails, the following error codes may be reported:</para>
+ <itemizedlist>
+ <xsl:for-each select="desc/result">
+ <listitem>
+ <para><code><xsl:value-of select="@name" />: </code>
+ <xsl:apply-templates />
+ </para>
+ </listitem>
+ </xsl:for-each>
+ </itemizedlist>
+ </xsl:if>
+ </sect2>
+ </xsl:for-each>
+<!-- </sect2> -->
+ </xsl:if>
+
+ </sect1>
+ </xsl:if>
+ </xsl:for-each>
+ </chapter>
+
+ <chapter>
+ <title id="sdkref_enums">Enumerations (enums)</title>
+ <xsl:for-each select="//enum">
+ <xsl:sort select="@name"/>
+
+ <xsl:variable name="ifname" select="@name" />
+ <xsl:variable name="wsmap" select="@wsmap" />
+ <xsl:variable name="wscpp" select="@wscpp" />
+
+ <sect1>
+ <xsl:attribute name="id">
+ <xsl:value-of select="$ifname" />
+ </xsl:attribute>
+ <title><xsl:value-of select="$ifname" /></title>
+
+ <xsl:apply-templates select="desc" />
+
+ <glosslist>
+ <xsl:for-each select="const">
+ <glossentry>
+ <glossterm>
+ <xsl:attribute name="id">
+ <xsl:call-template name="makeLinkId">
+ <xsl:with-param name="ifname" select="$ifname" />
+ <xsl:with-param name="member" select="@name" />
+ </xsl:call-template>
+ </xsl:attribute>
+ <xsl:value-of select="@name" />
+ </glossterm>
+ <glossdef>
+ <xsl:apply-templates select="desc" />
+ </glossdef>
+ </glossentry>
+ </xsl:for-each>
+ </glosslist>
+ </sect1>
+ </xsl:for-each>
+ </chapter>
+
+</xsl:template>
+
+<!-- - - - - - - - - - - - - - - - - - - - - - -
+ if
+ - - - - - - - - - - - - - - - - - - - - - - -->
+
+<!--
+ * ignore all |if|s except those for WSDL target
+-->
+<xsl:template match="if">
+ <xsl:if test="@target='wsdl'">
+ <xsl:apply-templates/>
+ </xsl:if>
+</xsl:template>
+
+<!-- - - - - - - - - - - - - - - - - - - - - - -
+ cpp
+ - - - - - - - - - - - - - - - - - - - - - - -->
+
+<xsl:template match="cpp">
+<!-- ignore this -->
+</xsl:template>
+
+<!-- - - - - - - - - - - - - - - - - - - - - - -
+ result
+ - - - - - - - - - - - - - - - - - - - - - - -->
+
+<xsl:template match="result">
+ <!-- ignore this, we handle them explicitly in method loops -->
+</xsl:template>
+
+<!-- - - - - - - - - - - - - - - - - - - - - - -
+ library
+ - - - - - - - - - - - - - - - - - - - - - - -->
+
+<xsl:template match="library">
+ <xsl:apply-templates />
+</xsl:template>
+
+<!-- - - - - - - - - - - - - - - - - - - - - - -
+ class
+ - - - - - - - - - - - - - - - - - - - - - - -->
+
+<xsl:template match="module/class">
+<!-- TODO swallow for now -->
+</xsl:template>
+
+<!-- - - - - - - - - - - - - - - - - - - - - - -
+ enum
+ - - - - - - - - - - - - - - - - - - - - - - -->
+
+<xsl:template match="enum">
+</xsl:template>
+
+<!-- - - - - - - - - - - - - - - - - - - - - - -
+ const
+ - - - - - - - - - - - - - - - - - - - - - - -->
+
+<!--
+<xsl:template match="const">
+ <xsl:apply-templates />
+</xsl:template>
+-->
+
+<!-- - - - - - - - - - - - - - - - - - - - - - -
+ desc
+ - - - - - - - - - - - - - - - - - - - - - - -->
+
+<xsl:template match="desc">
+ <xsl:apply-templates />
+</xsl:template>
+
+<xsl:template name="getCurrentInterface">
+ <xsl:for-each select="ancestor-or-self::*">
+ <xsl:if test="name()='interface'">
+ <xsl:value-of select="@name"/>
+ </xsl:if>
+ </xsl:for-each>
+</xsl:template>
+
+<!-- <link to="DeviceType::HardDisk"/> -->
+<xsl:template match="link">
+ <xref>
+ <xsl:attribute name="apiref">yes</xsl:attribute>
+ <xsl:variable name="tmp" select="@to" />
+ <xsl:variable name="enumNameFromCombinedName">
+ <xsl:value-of select="substring-before($tmp, '_')" />
+ </xsl:variable>
+ <xsl:variable name="enumValueFromCombinedName">
+ <xsl:value-of select="substring-after($tmp, '_')" />
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="//interface[@name=$tmp] or //enum[@name=$tmp]"><!-- link to interface only -->
+ <xsl:attribute name="linkend"><xsl:value-of select="@to" /></xsl:attribute>
+ <xsl:value-of select="$tmp" />
+ </xsl:when>
+ <xsl:when test="//enum[@name=$enumNameFromCombinedName]">
+ <xsl:attribute name="linkend">
+ <xsl:value-of select="concat($enumNameFromCombinedName, '__', $enumValueFromCombinedName)" />
+ </xsl:attribute>
+ <xsl:value-of select="$enumValueFromCombinedName" />
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:variable name="currentif">
+ <xsl:call-template name="getCurrentInterface" />
+ </xsl:variable>
+ <xsl:variable name="if"><!-- interface -->
+ <xsl:choose>
+ <xsl:when test="contains(@to, '#')">
+ <xsl:value-of select="$currentif" />
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="substring-before(@to, '::')" />
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="member"><!-- member in that interface -->
+ <xsl:choose>
+ <xsl:when test="contains(@to, '#')">
+ <xsl:value-of select="substring-after(@to, '#')" />
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="substring-after(@to, '::')" />
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:attribute name="linkend"><xsl:value-of select="concat($if, '__', $member)" /></xsl:attribute>
+ <xsl:variable name="autotextsuffix">
+ <xsl:choose>
+ <!-- if link points to a method, append "()" -->
+ <xsl:when test="//interface[@name=$if]/method[@name=$member]">
+ <xsl:value-of select="'()'" />
+ </xsl:when>
+ <!-- if link points to a safearray attribute, append "[]" -->
+ <xsl:when test="//interface[@name=$if]/attribute[@name=$member]/@safearray = 'yes'">
+ <xsl:value-of select="'[]'" />
+ </xsl:when>
+ <xsl:when test="//interface[@name=$if]/attribute[@name=$member]">
+ </xsl:when>
+ <xsl:when test="//enum[@name=$if]/const[@name=$member]">
+ </xsl:when>
+ <xsl:when test="//result[@name=$tmp]">
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:message terminate="yes">
+ <xsl:value-of select="concat('Invalid link pointing to &quot;', $tmp, '&quot;')" />
+ </xsl:message>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="./text()"><!-- link text given in source -->
+ <xsl:apply-templates />
+ </xsl:when>
+ <xsl:when test="$if=$currentif"><!-- "near" link to method or attribute in current interface -->
+ <xsl:value-of select="concat($member, $autotextsuffix)" />
+ </xsl:when>
+ <xsl:otherwise><!-- "far" link to other method or attribute -->
+ <xsl:value-of select="concat($if, '::', $member, $autotextsuffix)" />
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xref>
+</xsl:template>
+
+<!-- - - - - - - - - - - - - - - - - - - - - - -
+ note
+ - - - - - - - - - - - - - - - - - - - - - - -->
+
+<xsl:template match="note">
+ <xsl:if test="not(@internal='yes')">
+ <note>
+ <xsl:apply-templates />
+ </note>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template match="tt">
+ <computeroutput>
+ <xsl:apply-templates />
+ </computeroutput>
+</xsl:template>
+
+<xsl:template match="b">
+ <emphasis role="bold">
+ <xsl:apply-templates />
+ </emphasis>
+</xsl:template>
+
+<xsl:template match="i">
+ <emphasis>
+ <xsl:apply-templates />
+ </emphasis>
+</xsl:template>
+
+<xsl:template match="see">
+ <xsl:text>See also: </xsl:text>
+ <xsl:apply-templates />
+</xsl:template>
+
+<xsl:template match="ul">
+ <itemizedlist>
+ <xsl:apply-templates />
+ </itemizedlist>
+</xsl:template>
+
+<xsl:template match="ol">
+ <orderedlist>
+ <xsl:apply-templates />
+ </orderedlist>
+</xsl:template>
+
+<xsl:template match="li">
+ <listitem>
+ <xsl:apply-templates />
+ </listitem>
+</xsl:template>
+
+<xsl:template match="h3">
+ <emphasis role="bold">
+ <xsl:apply-templates />
+ </emphasis>
+</xsl:template>
+
+<xsl:template match="pre">
+ <screen><xsl:apply-templates /></screen>
+</xsl:template>
+
+<xsl:template match="table">
+ <xsl:apply-templates /> <!-- todo -->
+</xsl:template>
+
+</xsl:stylesheet>