Subject: PSARC FastTrack [01/29/2007]: Xorg server upgrade to 7.2 I am sponsoring this fasttrack for myself, with a timeout of January 29. The release binding is Patch/Micro. Note that I have set this to be an externally visible case, with mail going to psarc-ext@sun.com. -Alan Coopersmith- alan.coopersmith@sun.com Sun Microsystems, Inc. - X Window System Engineering Template Version: @(#)sac_nextcase %I% %G% SMI Copyright 2007 Sun Microsystems, Inc. 1. Introduction 1.1. Project/Component Working Name: Xorg server upgrade to 7.2 1.2. Name of Document Author/Supplier: Author: Alan Coopersmith 1.3 Date of This Document: 22 January, 2007 4. Technical Description Xorg server upgrade to 7.2 ========================== This project upgrades the Xorg server in Solaris from X11R6.9 to X11R7.2, and adds several new features which were not previously included in the Solaris builds. Upstream architectural changes from Xorg community: --------------------------------------------------- Xorg command line changes: Several changes have been made to the Xorg command line options since 6.9: Added to all Xorg-based servers: -wr sets the default root window to solid white instead of the standard root weave pattern. -ardelay milliseconds sets the autorepeat delay (length of time in mil- liseconds that a key must be depressed before autorepeat starts). -arinterval milliseconds sets the autorepeat interval (length of time in mil- liseconds that should elapse between autorepeat- generated keystrokes). -ardelay was formerly known as -ar1, -arinterval was -ar2 - the old names are still accepted by the code to preserve compatibility, but are no longer documented in the manual page or usage message. Added to Xorg only: -showDefaultModulePath Print out the default module path the server was compiled with. -showDefaultLibPath Print out the path libraries should be installed to. Removed from all Xorg-based servers: bc disables certain kinds of error checking, for bug compatibility with previous releases (e.g., to work around bugs in R2 and R3 xterms and toolkits). Deprecated. -xkbdb filename uses filename for default keyboard keymaps. -noloadxkb disables loading of an XKB keymap description on server startup. Removal of LBX extension: The LBX (Low-Bandwidth X) extension supported in previous versions of the Xorg server has been removed. The community suggests using either ssh -X with compression or the NX project from www.nomachine.com. This project only removes LBX from the extensions supported by Xorg and leaves the client side support intact (lbxproxy command and functions in libXext) in Solaris. Removal of CID font support: The Xorg server no longer supports CID-keyed PostScript Type 1 Fonts. These were originally created to support East Asian character sets in Type 1 fonts, but have since been replaced almost universally by TrueType and OpenType fonts. Removal of CID fonts in Solaris was listed as a future EOF in the Solaris 9 release notes, and the last known CID fonts shipped in Solaris were removed in s10_48. Removal of getconfig: Previous versions of Xorg, when run without a config file, ran a perl script at startup time to map discovered PCI device id's to driver names to load. Starting a perl interpreter at Xorg startup added to the startup time, and the flexibility offered was not really used, so Xorg has replaced this with a table built into the X server in the 7.2 release. The only use of getconfig on Solaris was a override file provided by the accelerated drivers from Nvidia to load their "nvidia" instead of the open source "nv" driver when their kernel module was installed. For this release, the hardcoded mapping in the Xorg server has been updated to prefer the nvidia driver when it is installed. A future project is planned to develop a more flexible method to map VIS_GETIDENTIFIER ioctl results to driver modules for mapping Solaris kernel frame buffer drivers to Xorg driver modules in a way that works on SPARC, x86, and Sun Ray, but without the overhead of starting a perl interpreter. XACE (X Access Control Extension) API: XACE is not an actual extension to the X protocol, but a framework inside the X server to be used by other extensions. It was originally developed by the SELinux team at the NSA, and integrated into Xorg 7.2 by Sun & NSA engineers who made sure it could serve as a common framework for both SELinux and Solaris Trusted Extensions. http://people.freedesktop.org/~ewalsh/xace_proposal.html describes XACE as: The XACE (X Access Control Extension) is a set of generic "hooks" that can be used by other X extensions to perform access checks. The goal of XACE is to prevent clutter in the core dix/os code by providing a common mechanism for doing these sorts of checks. The concept is identical to the Linux Security Module (LSM) in the Linux Kernel. XACE is a generalization of the "Security" extension, which provides a simple on/off trust model, with untrusted windows being restricted in certain areas. Most of XACE consists simply of replacing the Security-specific checks in the dix/os layer with generic callback lists. However, the framework is flexible enough to allow for hooks to be added or deprecated in the future. LSARC 2004/109 added similar hooks to the Xorg server for the Xtsol extension module to be able to insert security checks when loaded. These hooks were a Project Private interface between the Xorg binary delivered via the X consolidation and the Xtsol module delivered via the TLC consolidation (aka the Trusted Extensions product). To avoid cross-consolidation coordination issues, this project will allow the Xtsol extension to use the existing interfaces to install their hooks into the XACE callback lists. A future project will work on migrating the Xtsol extension from its Project Private interfaces for installing callback functions to using the standard XACE functions to register callbacks. Supported architectures: ------------------------ Solaris currently only includes 32-bit x86 binaries for Xorg 6.9. This project adds 64-bit x86 and 64-bit SPARC binaries for the Xorg server and loadable modules as well. 64-bit versions are provided since Sun has had multiple customer requests for X servers that can address more than 4 gb worth of address space in order to allow storing large amounts of pixmap and other data in the X server instead of making the X clients retransmit them. Additionally, with video cards now shipping with 1gb of on-board video RAM and roadmaps showing increases still coming in the future, 64-bit addressing is needed to be able to address all the VRAM on multi-card systems now, and potentially in the future on a single frame buffer. Since current Solaris releases feature only a 64-bit kernel on SPARC, and there are no current SPARC Xorg modules to retain compatibility with, there is no reason to ship a 32-bit Xorg server on SPARC, while on x86 both 32-bit & 64-bit CPU's are supported. Thus on SPARC platforms, /usr/X11/bin/Xorg will be a SPARCv9 binary. On x86 platforms, this project will deliver the Xorg server as both /usr/X11/bin/i386/Xorg /usr/X11/bin/amd64/Xorg When integrated into a minor release of Solaris on x86, this project will deliver /usr/X11/bin/Xorg as a link to /usr/lib/isaexec to automatically pick the bit-size matching the current kernel. When integrated into a patch release of Solaris on x86, this project will deliver /usr/X11/bin/Xorg as a link to /usr/X11/bin/i386/Xorg to preserve compatibility with existing 3rd-party Xorg modules. (Currently, the project team is aware of only one existing 3rd-party module for Xorg on Solaris - the nvidia driver from Nvidia. We are working with Nvidia to have them provide a 64-bit version of this driver for Solaris as they already do on Linux. When available, the 64-bit driver will be delivered in Solaris Nevada and in future Solaris 10 updates, but existing Solaris 10 users may have a 32-bit version only installed, so switching to a 64-bit default Xorg in a patch would break those users.) Customers on either release who wish to override the default may do so by changing the server property of the x11-server SMF property to specify /usr/X11/bin/i386/Xorg or /usr/X11/bin/amd64/Xorg. Driver differences per architecture: ------------------------------------ The 32-bit x86 Xorg will continue to include the same drivers currently provided in Xorg 6.9 (with updates to add new hardware support to some). The 64-bit x86 Xorg will provide a subset of those drivers, not including support for older hardware unlikely to be found in AMD64/EM64T-capable machines. Graphics device driver modules which will be included in 64-bit x86 Xorg: ati_drv.so - wrapper for atimisc/radeon/r128 atimisc_drv.so - ATI Mach64, early Rage models radeon_drv.so - ATI Radeon 7000->X850 r128_drv.so - ATI Rage 128 vesa_drv.so - VESA standard fallback vga_drv.so - VGA standard fallback ast_drv.so - Aspeed Tech remote KVM (used in Sun AMD64 servers) i810_drv.so - Intel i810->i965 mga_drv.so - Matrox nv_drv.so - nVidia GeForce/Quadro trident_drv.so - Trident (on-board graphics chip in Sun V20z) via_drv.so - VIA vmware_drv.so - VMWare simulated display For comparison, these are the ones we ship 32-bit versions of that we've skipped 64-bit versions of: apm_drv.so - Alliance Promotion (production ended 1998) ark_drv.so - Ark Logic chips_drv.so - Chips & Technologies cirrus_alpine.so - Cirrus Logic cirrus_drv.so - Cirrus Logic cirrus_laguna.so - Cirrus Logic cyrix_drv.so - Cyrix MediaGX glint_drv.so - 3Dlabs/TI glint i128_drv.so - Number Nine Imagine 128 (bankrupt 2000) i740_drv.so - Intel i740 neomagic_drv.so - NeoMagic (mid-late 90's laptops) nsc_drv.so - National Semiconductor rendition_drv.so - Rendition Verite (Windows support dropped after Win98/NT4) riva128.so - nVidia Riva/TNT s3_drv.so - S3 (not ViRGE or Savage) s3virge_drv.so - S3 ViRGE & Trio3D savage_drv.so - S3 Savage siliconmotion_drv.so - Silicon Motion sis_drv.so - SiS, XGI Volari tdfx_drv.so - 3Dfx (bankrupt 1999) tga_drv.so - DEC 21039/TGA tseng_drv.so - Tseng Labs There is no known architectural reason why additional drivers from the 32-bit only list could not be provided in 64-bit format should a business case arise (or no reason a user/community member couldn't build their own from the X.Org open source release and use them without Sun support). For SPARC, the only graphics driver that will be provided by this project in SUNWxorg-graphics-ddx is wsfb_drv.so, which uses and ioctls to map /dev/fb and treat it as a dumb frame buffer, on frame buffer devices in which the Solaris kernel driver supports such access. Later projects from the SPARC Graphics team in the Systems Group will deliver device-specific Xorg driver modules for SPARC frame buffers. The dummy_drv.so used to provide a Xvfb-like memory-based non-displayed screen will also be provided with Xorg on SPARC. For input devices, Xorg on SPARC will include only the driver modules kbd_drv.so (Keyboard), mouse_drv.so, and void_drv.so (input placeholder module for when it is desired to run without keyboard or mouse). Other differences per archictecture: ------------------------------------ As an OpenGL architecture is already provided for SPARC by the SPARC Graphics group, Mesa will not be delivered with Xorg on SPARC. On x86/x64 platforms, Xorg is installed setuid root. The 64-bit Xorg for x86 will be installed setuid root as well. On SPARC platforms, Xorg will be installed setgid root, as Xsun has always been on SPARC. X servers currently need either gid 0 or uid 0 to get the privilege levels necessary for these operations: - Power Management via /dev/pm (both platforms) - priority control of processes in IA class via priocntl() (both platforms) X servers currently need uid 0 to get the privilege levels necessary for these operations: - access to PCI bus registers and mappings via /dev/xsvc (x86/x64 only) - ability to set I/O Privilege Level (IOPL) via sysi86 (x86/x64 only) When started via a display manager such as dtlogin or gdm, Xorg is started as uid 0 by the display manager, and once the user logs in via the display manager, it sets it's uid to the logged in user. (This is after initializing the hardware, setting the IOPL and mapping /dev/xsvc, so uid 0 is no longer needed at that point.) Non-hardware based X servers: ----------------------------- Xnest is an X server which displays in a window on another X server, for uses such as running a full remote desktop session inside your current X session, or for running a session as another user, as gdmflexiserver does. Xvfb is an X server which renders to an in-memory frame buffer but does not display itself anywhere, which is often used for graphics applets on web servers to do rendering which is then shipped via http to a web browser, or for running X applications unattended. Solaris currently includes Xnest & Xvfb X servers based on the Xsun code, shipped in /usr/openwin/bin. (Xvfb is actually just a shell script which calls Xsun with appropriate arguments [PSARC/2002/282].) Thus, when Xsun is EOF'ed, replacements will be needed for those X servers. This project adds two additional X server programs to Solaris: Xephyr and Xorg-based Xvfb. Both will be built out of the Xorg tree, and will be shipped in /usr/X11/bin/ via the SUNWxorg-server package on both SPARC & x86. Xvfb will be mostly a drop in replacement for the existing Xvfb, though with the Xorg command line syntax and supported extension set instead of those of Xsun. Xephyr is somewhat of a hybrid between Xnest & Xvfb, displaying in a window on another X server as Xnest does, but doing all the rendering itself to an in memory framebuffer like Xvfb that it then displays as a bitmap image. This allows it to support extensions like Xrender and Xcomposite even when the underlying X server does not, as well as avoiding several of the design issues that have long plagued Xnest, such as mismatches between the font sets supported by the Xnest server vs. the underlying X server. We are intending it to serve as the replacement for Xnest. On SPARC, Xvfb & Xephyr will be delivered as 64-bit binaries to be able to share private libraries with the Xorg server. On x86, Xvfb & Xephyr will be delivered as both 32-bit & 64-bit binaries, with the main bin directory having an isaexec wrapper to choose the bit-size matching the current kernel. (Similar to the Xorg on x86 in minor release layout described above.) Imported interfaces ------------------- isaexec Stable [Committed] PSARC 1997/220 Xorg CLI External [Volatile] PSARC 2004/187 Exported interfaces ------------------- Xorg CLI changes Volatile Xvfb Volatile Xephyr Volatile LBX extension Obsolete Previously Standard (PSARC 1998/299) /usr/openwin/bin/Xnest Obsolete Previously Standard (PSARC 1998/299) /usr/openwin/bin/Xvfb Obsolete Previously Standard (PSARC 1998/299) getconfig Removed Previously External (PSARC 2004/187) 6. Resources and Schedule 6.4. Steering Committee requested information 6.4.1. Consolidation C-team Name: X Consolidation - Desktop C-Team 6.5. ARC review type: FastTrack