The code here may be used/distributed under the terms of the standard XFree86 license.
Note: This project is no longer actively maintained. If you're interested in taking ownership of this code, contact David Crosby (crosby@atomicobject.com).
VMWareFB is an OpenStep display driver written to support the virtual display hardware in VMWare. It was originally written and tested against VMWare Workstation 3.0 on Linux, Windows 2000 and Windows XP.
The driver works very well on Linux, especially in full screen mode. There are some problems with initialization of the device on Windows XP, but once running, it seems very stable.
Support for other versions of VMWare is unknown. Please report any experiences with the Express and Server versions.
VMWareFB can be built using Project Builder on NextStep 3.3. It will NOT compile on OpenStep! Make sure to build for a i386 architecture if compiling on a non-Intel architecture.
Note: The Makefiles in this distribution have been updated to support compilation on Rhapsody Developer Release 2 / Darwin 0.x systems using the DriverKit/Mach kernel framework. These changes may have broken compatibility with the original NextStep 3.3 Project Builder environment. If building on NextStep 3.3, you may need to revert to the original Makefile structure.
Build Environment: This updated driver was built and tested on Rhapsody Developer Release 2 running under VMware Fusion 13.5.
Important: If you encounter linker errors during compilation, you may need to install the patched kl_ld linker included with this distribution. See KL_LD_PATCH.md for detailed installation instructions.
You can download a precompiled driver as a compressed config from http://github.com/atomicobject/VMWareFB_OpenStep/downloads
The VMWare Display Driver installs just like any other OpenStep display driver. The quick-start method is:
- Open /NextAdmin/Configure.app and remove the current display driver. Save. Confirm the warnings. Quit.
- Double-click on VMWareFB.config, and confirm the installation (or update) of the driver.
- Select the Display tab. The Add Display Devices... panel should pop up automatically (if not, click Add). "VMWare Display Adapter" should automatically be detected. Click Add.
- Click Select to choose your display resolution. All the modes are shown as 32-bit depth, but the actual depth used will depend on the host system on which VMWare is running. The driver has only been successfully tested at a maximum of 1280x1024x32bpp. Higher resolutions should work, though.
- Save and reboot. YOU MAY NEED TO REBOOT TWO OR THREE TIMES IF OPENSTEP CRASHES. Let it reboot, rather than powering off and on the virtual machine when it crashes. When it eventually boots successfully, it should be stable.
-
Panics on startup. Occasionally, usually after first installing the driver, OpenStep will crash with a panic just after the driver finishes initializing. The specific crash is usually a problem with "pmap_remove_range 2". These crashes have rarely occurred on Linux or Windows 2000. On Windows XP the crashes happen very often (every cold power on). After one or two reboots it does work, even on XP.
Once booted up OpenStep seems to run just fine. It is recommended that you use the Suspend and Resume to start and stop the VM.
-
Limitations on host color depth. OpenStep (or at least this driver) can only handle 12/16, 15/16 or 24/32 depth/bits-per-pixel. Because the VMWare display must run at the same depth as the host, this limitation may require you to change the display properties of the host. On Linux, this usually involves running X at 15 or 24 bpp. On Windows, 32 and 15 depth should always work, 24 or 16 depth might, depending on the specific video hardware (whether 24bpp is actually 3 bytes per pixel or 4, and if 16 uses a 555 or 565 color weight).
The driver will give up if it finds itself on an unsupported depth, and the Default VGA driver will be used. The reason will be logged.
8-bit pseudocolor mode is currently unsupported.
The driver now supports multiple acceleration modes configurable via the Default.table file:
- None - No hardware acceleration (original behavior)
- FIFO - FIFO graphics acceleration only
- Cursor - Hardware cursor acceleration only (recommended)
- Both - Combined FIFO graphics and cursor acceleration
Cursor acceleration provides the best stability and performance. FIFO graphics acceleration has been implemented with modern synchronization techniques but may experience compatibility issues on some host systems.
Additional configuration options are available in Default.table:
- Debug - Set to "yes" to enable debug logging messages
- Verbose - Set to "yes" to enable detailed operational logging
These options help with troubleshooting driver issues and understanding driver behavior during initialization and operation.
As of 1.1.0, Video modes now supported (all @60Hz, with color space RGB:888/32):
480 x 640
600 x 800
768 x 1024
864 x 1152
720 x 1280
768 x 1280
800 x 1280
960 x 1280
1024 x 1280
768 x 1366
900 x 1440
1200 x 1600
1050 x 1680
1080 x 1920
1200 x 1920
1440 x 2560
1600 x 2560
1773 x 2364
The driver code has been extensively refactored and modernized while maintaining C90 compatibility for historical build systems:
- Modular architecture with clean separation of concerns
- Helper methods for initialization, display setup, and acceleration
- Modern VMware driver improvements including memory barriers and enhanced logging
- Proper FIFO memory mapping using real VMware FIFO memory addresses
- Comprehensive error handling and logging throughout
- Resolved Objective-C method resolution errors that caused kernel panics
- Fixed acceleration configuration parsing that had been disabled since 2002
- Corrected memory mapping to use actual FIFO memory instead of VGA memory
- Fixed configuration key case mismatches preventing acceleration parsing
- Implemented proper C90 variable declarations and macro compatibility
- Implemented "Both" acceleration mode for simultaneous FIFO and cursor acceleration
- Added proper FIFO synchronization and memory barriers
- Enhanced cursor acceleration with modern bypass techniques
- Improved FIFO command queuing with bounds checking and wraparound handling
- David Crosby (crosby@atomicobject.com)
- Bill Bereza (bereza@atomicobject.com)
- © 2002-2011 Atomic Object
- More Atomic Object open source projects
- This work wouldn't have been possible without Laurent Julliard and his website describing how to install OpenStep in VMWare: http://www.moldus.org/~laurent/GNUstep/OS42_Install.html
- Alex and Jeremy at VMware (http://www.vmware.com) were great resources for any questions we had.
- Thanks to Andreas Grabher and others at www.nextcomputers.org for rounding up knowledge and submitting the patch for increased video mode support above 1024x768.
- Valley City Linen (http://www.vcl.com) funded the development of this driver.
- Modern VMware driver improvements derived from the xf86-video-vmware XFree86/Xorg driver project.