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 at sun.com &
xwin-discuss at opensolaris.org.
[Sorry to PSARC members who got this already on the internal alias -
apparently sac_nextcase outwitted me and redirected the e-mail behind
my back - please reply to this one instead.]
-Alan Coopersmith- alan.coopersmith at 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 <sys/fbio.h> and
<sys/visual_io.h> 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