Tuesday April 11, 2006
alanc @ sun.com
Alan Coopersmith’s blog
Random thoughts of a disorganized mind...
(and though it should be obvious, while Sun pays me to think about things, they disclaim any responsibility for these thoughts, nor do I claim what I say matches in any way what Sun thinks)
The First SPARC OpenSolaris distro with Xorg
Only last week I had suggested that an interesting project for a community member would be to figure out what it would take to make Xorg run on OpenSolaris SPARC with a graphics device for which Xorg has drivers for other platforms, such as the PGX-series boards based on ATI Mach64 or the XVR-100 based on ATI Radeon 7000. I figured this would take a little while and a bit of work for someone to figure out. I guess I was wrong.
Martin Bochnig announced yesterday that not only had he done just that, he'd gone ahead and built a LiveCD distro using it - marTux. He's promised ISO's later this week and there's several people here waiting to see it now with high hopes.
[Technorati Tags: Xorg, X11, SPARC, Solaris, OpenSolaris]
Posted at 03:19PM Apr 11, 2006 by Alan Coopersmith in X11 |
Security hole in Xorg 6.9/7.0
[CVE-2006-0745] X.Org Security Advisory: privilege escalation and DoS in X11R6.9, X11R7.0
X.Org announced this morning a security hole in the Xorg 6.9 & 7.0 releases that allows a local user to create or overwrite files as root or to run code as root. More details can be found in the X.Org Security Advisory.
This bug affects Solaris users who have installed Xorg 6.9 or 7.0, either on their own or from Sun's releases. Xorg 6.9 is included in Solaris 10 patches 118966-14 and later and in Nevada builds 28 and later, which have been released via the Solaris Express programs.
The fix for Solaris 10 is available in a preliminary T-patch from the SunSolve web site - it's the same we plan to release as the permanent fix, it just hasn't finished the QA cycles required for official release yet. See SunAlert 102252 for details and the links to the patch. The fix for Solaris Express was integrated into Nevada build 36, which should be out via the SX: Community Edition in a couple of weeks.
There's also a simple workaround you can apply now to make it impossible to exploit the bug - remove the setuid bit from the /usr/X11/bin/Xorg binary. X servers on x86 need root access for accessing the video hardware directly - but it only has to be setuid root if you want a non-root user to be able to start the X server directly, such as via the xinit program. Most Solaris installs that use X don't do this, but have a display manager such as gdm or dtlogin start X with a login screen. Since those programs run as root, they can start the X server with the needed privileges without having the Xorg binary be setuid root.
Behind the Hole: The Untold Story of this Bug
A couple of weeks ago, the CTO of Coverity sent mail to the X.Org Developers offering access to the results of a code scan of the X.Org code base by their Coverity Prevent code scanner (which is based on the Stanford Checker project). Their scan of the entire X11R6.9 code base found 1681 potential issues, so about a dozen of us have been working our way through the list, triaging the real bugs from the false alarms, and determining which need to be fixed.
While I was working on this one day, I got tired of looking at yet another memory leak (there are tons in programs like xset, xauth, xhost, etc. - but since the programs only run for less than a second before exiting, how much do you care?), and went to the menu to search by report type to see what other bugs it had found. One of the bug types was "BAD_COMPARE" which I hadn't see yet so I went to look at what it found. Someone had already triaged 3 of these as false alarms and 2 as actual bugs, so I went to look at one of the bugs. It showed (and this is a very cut down version of what the actual report looks like in the browser, displayed in the context of the full source file):
1378 /* First the options that are only allowed for root */
| Event func_conv: Suspicious implicit conversion to function pointer: "&geteuid != 0"; did you intend to call the function? |
While I remember looking at the code around here a couple of times during the Xorg 6.9 release cycle, I had never before noticed that the parentheses were missing from the geteuid call. I think my brain simply subconciously autocorrected and inserted the parentheses for me when I read it. Fortunately, the Coverity checker has no subconcious to fool it, and automated attention to detail, so it found what we hadn't seen. Since without the parentheses, the code is simply checking to see if the geteuid function in libc was loaded somewhere other than address 0 (which is pretty much guaranteed to be true), it was reporting it was safe to allow risky options for all users, and thus a security hole was born.
So far that's the only security hole we've found in the Coverity reports - but we're only a little over half way through triaging the reports so far. (Of the 1681 potential issues found, our developers have determined 688 are actual bugs compared to 191 false alarms. Memory leaks are the biggest category, with NULL pointer comparison issues probably second. 63 bugs are already marked as fixed in the coverity reports, and anyone watching the xorg-commit traffic the last couple of weeks has seen a number of those fixes going into CVS for inclusion in the upcoming Xorg 7.1 release.)
P.S. Congratulations to the team at Red Hat and the members of the Fedora community on the release of Fedora Core 5 today, with the Xorg 7.0 modular codebase included. I know having a release-day security advisory isn't how you wanted to celebrate the FC5 launch, but I hope you're finding the new Xorg modular release model is making it much easier to get the fix out for it.
[Technorati Tags: Xorg, Solaris, OpenSolaris, security, Coverity, CVE-2006-0745 ]
Posted at 04:51PM Mar 20, 2006 by Alan Coopersmith in X11 | Comments[2]
Xorg 6.9.0 released for Solaris 10 and beyond
Patches were released on SunSolve late last week to upgrade the Xorg server for Solaris 10 on x86/x64 platforms from Xorg 6.8.2 to 6.9.0. We've been testing the 6.9.0 release candidates in our Nevada [1] builds since early November, and have worked out the few big problems we've found, so have now backported to our Solaris 10 update release branch, which also generates patches for earlier releases of Solaris 10. There are three patches in total:
- 118966-15: Xorg server & drivers
- 121044-02: Mesa libraries & GLX extension[2]
- 120202-02: Xorg client libraries
Also today, after a few weeks of unrelated delays, build 33 of Solaris Express: Community Edition was released, which is the first Solaris Express release to contain the final version of Xorg 6.9.0, so now you can have the new Xorg on either Solaris 10 or Express. (It was actually in build 32 as well, but that didn't go out as a Solaris Express release. As always, you can see the X changelogs for Nevada builds to see what we actually changed in each biweekly build.)
There are no groundbreaking new features in 6.9.0, just a lot of bug fixes, new hardware support, and minor improvements. The Changes since Xorg 6.8 page in the community wiki has a list of many of these, and the detailed changelog is also available, though only changes that affect the X server and drivers will be reflected in our current deliveries, since we haven't finished migrating the X libraries and clients in Solaris from our current X11R6-forked tree to the current Xorg sources.
Acer Ferrari 4000 laptop owners may be happiest, since with the Xorg 6.9 release for Solaris 10, they can finally run Xorg in Solaris 10 on their laptops (Nevada users got an early pull of the ATI Radeon x700 support from Xorg CVS around the middle of last year, but it hadn't been backported to Solaris 10 until now). Other newly supported devices in Solaris 10 include:
- ATI Radeon XPRESS 200/200M IGP
- ATI Radeon X700, X850
- ATI ES1000
- XGI Volari V3, V5, V8, Z7
[1] "Nevada" is the code name for the next full release of Solaris currently under development. It's what is released as the Solaris Express monthly snapshots / experimental releases for those who want to try our code as we get it ready.
[2] The Mesa patch to update Mesa requires you already have the SUNWxorg-mesa package installed, which was not included in Solaris 10 3/05, but was added in the Solaris 10 3/05 HW2 and Solaris 10 1/06 releases.
[Technorati Tags: Xorg, X11, Solaris, OpenSolaris]
Posted at 06:53PM Feb 14, 2006 by Alan Coopersmith in X11 | Comments[2]
X.Org Developer Conference presentation links
For those not here to follow along, I've been saving the links people give to view their presentations under the xdevconf2006 tag in my del.icio.us bookmarks. They're also being added next to the presenter names in the XDevConf agenda wiki.
[Technorati Tags: Xorg, X11, XDevConf]
Posted at 04:22PM Feb 08, 2006 by Alan Coopersmith in X11 |
X11 Forwarding 102
Chris Gerhard wrote a post last week he called “X11 Forwarding 101” on using xauth to grant permissions to your X display when you su to root. I was all ready to write a response about how the complex steps he'd shown could be replaced by a simple, yet secure, command in Solaris 10 [1]:
xhost +si:localuser:rootbut before I could, I got a mail from Casper asking why that feature wasn't working the same in Xsun as in Xorg. A few more e-mails exchanged and he had narrowed it down to it working with Xorg with all connection types, and Xsun with local TCP connections (“localhost:0”), but not with Xsun using Unix domain sockets (“unix:0”) or named pipes (“:0”)[2].
It turns out there was a bug in local connection type handling that I'd fixed when porting the localuser code from Xsun to Xorg for Xorg 6.8.0, but forgot to backport to Xsun. It was processing the list of hosts first, then exiting before checking the ServerInterpreted types so never saw the localuser type as allowable. I've filed this in Sun's bug database as 6380709 and am putting a fix into Nevada build 34.
Until that fix is out, I guess you'll have to stick with Chris' instructions for Xsun, unless you want to use the slower TCP transport for local connections, but if you are using Xorg on Solaris 10 or Nevada, you can try “xhost +si:localuser:username” when you want to grant another user on the same machine (in the same zone if on a multi-zone machine in Solaris 10) access to your display.
[1] Actually any OS with both Xorg 6.8.0 or later and support for a secure method of determining the identity of the user on the other end of a local connection, such as Solaris 10's getpeerucred or a similar interface such as getpeereid or SO_PEERCRED.
[2] At the level authentication is done, the shared memory transport in Solaris is treated as a named pipe connection, since that it how the connection is established.
[Technorati Tags: Xorg, X11, Solaris, OpenSolaris]
Posted at 11:01AM Feb 05, 2006 by Alan Coopersmith in X11 | Comments[1]
Today's desktop meeting
I still have to finish my slides for my talk at Sun's Desktop Summit tomorrow, so I'll write later about the Solaris xmag CPU hogging bug a couple of people found at the summit today which I was able to get fixed for this afternoon.
Instead for now I'll just note that it appears an interesting meeting was also held a few hundred miles to the north the last few days - I've been reading this summary of the OSDL Desktop Architects meeting and see they're looking into many of the same issues we've been looking at ourselves here.
For now, if you're looking for more on the Sun Desktop Summit, see the blogs from Glynn and John.
[Technorati Tags: Xorg, X11, Solaris, OpenSolaris, Linux Desktop.]
Posted at 09:37PM Dec 06, 2005 by Alan Coopersmith in X11 |
Busy week
Seems like I've been going non-stop all week - I just realized the entire weekend had disappeared as well. It didn't help I started it sick, since my cousin brought his cold to Thanksgiving dinner, and I seem to have taken some of his leftover germs home with me.
From there I had to prepare special builds of the Solaris Xorg server for our Sun Desktop Summit performance testing we'll be doing this next week - I started with the Xorg tree used for Solaris Nevada build 29 (including Xorg 6.9 RC2), used the new Sun Studio 11 compilers, included the Xserver DTrace provider, and built an additional 64-bit version for AMD64 machines.
The summit started Wednesday and has been great. Last week was the Usability portion, and next week covers Performance. It's been wonderful meeting all the people we've been working with for years from the JDS team, as well as new people from the User Experience Design ("xDesign"), "Keep It Simple Solaris" (KISS), Java, and other teams working on the Solaris desktop experience.
But Friday I was also supposed to be helping with the release of the third release candidates of Xorg 6.9 & 7.0 - though between the summit and previously scheduled plans with my wife and some friends I didn't get to much until late in the evening, but kem and ajax had been hard at work already getting it ready. We slipped a little later than we originally planned, but did get RC3 out over the weekend.
Now for a week of trying to find out where we can squeeze more performance out of our desktop - whether it be in X or GNOME or Mozilla/Firefox. Hopefully I'll finish my slides before my presentation slot scheduled for Wednesday morning.
[Update: *sigh* apparently I was so busy, I even forgot to hit post on this last night. Oh well...]
[Technorati Tags: Xorg, X11, Solaris, OpenSolaris.]
Posted at 08:40PM Dec 05, 2005 by Alan Coopersmith in X11 |
Which compiler to build Xorg with on Solaris
In yesterday's post, I mentioned how to tell the Xorg monolith which compiler to use, Sun Studio cc or GNU gcc. Figuring out which one you wanted to use used to be somewhat clear - if you had paid all that money for Sun Studio cc, you probably wanted to use it, otherwise gcc was free. Things got a bit murkier a few months ago, when Sun Studio compilers were made available for free to members of the OpenSolaris community, and now this week, Sun Studio 11 was released with a free-to-use license for everyone.
So now both compilers can be used without having to pay anyone - which one should you use to compile Xorg?
First the easy one - though the Sun compilers now support Linux, neither the Xorg monolith or modular builds
work with it yet on Linux. To get the 6.9 monolith working, much of the #if HasSunCC bits from sun.cf would probably
need to be replicated into the linux.cf Imake configuration and gcc-specific bits replaced in linux.cf and xorg.cf. For 7.0, I tried a couple of months ago with the Sun Studio cc beta and found that autoconf couldn't yet handle building with the Sun compilers - it was able to recognize that it wasn't gcc or any other known compiler, but couldn't quite get the options set right. This patch to autoconf's config.guess got me a little farther, but I still couldn't build it all:
--- config.guess.orig 2005-08-17 15:56:41.000000000 -0700 +++ config.guess 2005-08-17 15:57:31.000000000 -0700 @@ -964,7 +964,7 @@ LIBC=gnulibc1 # endif #else - #ifdef __INTEL_COMPILER + #if defined(__INTEL_COMPILER) || defined(__SUNPRO_C) LIBC=gnu #else LIBC=gnuaout
On Solaris though, both the Sun & GNU compilers should work well. As mentioned before, I build the Xorg CVS trees regularly with both and try to fix problems as I find them, but I haven't had a chance to do any comparative performance benchmarking yet. (I know conventional wisdom used to be that gcc had better performance than Sun compilers on x86, and Sun compilers made faster binaries than gcc on SPARC - but a lot of work has gone into the x86/x64 compilers in recent Sun Studio releases, and the Sun Studio team have posted a number of record benchmark scores with the Studio 11 version.)
gcc has an advantage in some areas because it's the compiler most of the Xorg developers use and most other vendors build with, so gcc extensions are commonly used - for instance, the MMX optimization code in libfb for accelerating alpha-blending and anti-aliasing in Xorg still requires gcc (the new MMX intrinsics support in Studio 11 comes close, but isn't completely compatible, though the code probably could be ported with a little effort). A number of areas use #ifdefs and support both Sun Studio cc & gcc - for instance, the new macros in Xfuncproto.h to control symbol visibility use gcc attributes and Sun Studio's __hidden/__global keywords. (There's basically three compilers we know of that are still used somewhat regularly and well supported in Xorg - in order of support/popularity, they'd be gcc, Sun Studio, and USLC for Unixware/OpenServer. There's support in the Imake configs for Intel's compiler, but there are reported bugs against it, and I don't know if it currently works.)
So which compiler should you use? I guess that depends on what you're trying to do. Of course, we use Sun Studio tools for the Solaris builds (though we're still on Studio 10 for the official Nevada builds, but are testing with Studio 11 and preparing to switch to those soon), so if you're trying to match our builds, that's the way to go. Otherwise, the best answer I can give is to try both out, play with the different optimization tuning flags, and see which works best for you.
On the other hand, for the rest of the toolchain, I definitely find I'm more productive with the Sun Studio tools - perhaps that's partially because I know Sun dbx much better than gdb, but dbx features like the integrated Korn shell and memory leak/access checking (though access checking works better on SPARC than on x86) are ones I miss when I have to use gdb. I haven't seen anything in the GNU toolchain to even compare to the Performance Analyzer.
[Technorati Tags: Xorg, X11, Solaris, OpenSolaris. Sun Studio]
Posted at 12:34AM Nov 16, 2005 by Alan Coopersmith in X11 |
Xorg 6.9 & 7.0 Release Candidates 2
The second release candidates of the Xorg 6.9 (monolith) and 7.0 (modular) releases have been announced and you can download the sources to build and try it out yourself.
Of course, I've been doing that multiple times a day for months, on our Solaris x86 & SPARC systems, and since I've integrated RC2 into our Xorg builds for Solaris Nevada (the next release of Solaris, currently under development), will continue to do so for a while.
Some tips if you want to do the same on Solaris with the 6.9 source tree:
- If you want to use the VUID mouse protocol (USB mice or mice using the virtual mouse device in recent Solaris kernels), be sure to apply this patch (or just pull the latest CVS source which has this patch integrated already). [This actually applies to both 6.9 & 7.0 releases.]
- The Solaris builds default to assuming you have the Sun Studio compilers installed and included in your $PATH environment variable. If you'd rather use gcc, you can create a xc/config/cf/host.def file
with this line in:
#define HasSunC NO
If you're using the gcc 2.95 from the Sun Companion CD in /opt/sfw/ you may need to additionally add:#define HasGcc2 YES #define CplusplusLibCDir /opt/sfw/lib
- The Solaris builds also default to building everything in 32-bit - if you want to build it all in 64-bit,
add this to your host.def for x86/x64/AMD64:
#define AMD64Architecture
or for SPARC:#define Sparc64Architecture
And just as for any other platform, check out the xc/BUILD file in the source tree for more information about the build, other options you can set in host.def, and some important changes since 6.8.2 in how dependencies like FreeType, expat, and zlib are handled.
The 7.0 modular tree is a whole different ball of wax of course, and I'll write about that in a bit.
[Technorati Tags: Xorg, X11, Solaris, OpenSolaris]
Posted at 10:25PM Nov 14, 2005 by Alan Coopersmith in X11 |
Xorg 6.9 & 7.0 Release Candidate 1
I meant to blog about this earlier but have been busy lately, so I'm going to cheat and copy from the post I sent to the OpenSolaris X Window System community mailing list last week.
Xorg 6.9 & 7.0 Release Candidate 1 has been released by the
X.Org Foundation. The announcement and pointers to sources can
be found at:
http://lists.freedesktop.org/archives/xorg/2005-October/010668.html
Highlights of changes in this release are found at:
http://wiki.x.org/wiki/ChangesSince68
Detailed change logs for those who want gory levels of detail can be
found at:
http://cvs.freedesktop.org/xorg/xc/ChangeLog?rev=1.1448&view=markup
Particularly interesting things to test on Solaris include:
- Changing keyboard driver from deprecated "keyboard" to new "kbd" (newly supported on Solaris in this release - shouldn't result in any really noticable functionality changes)
- Audio Bell - in InputDevice section for your keyboard in xorg.conf, add:
Option "BellDevice" "/dev/audio" - The new EXA acceleration architecture for some chipsets from ATI, SiS, and XGI - see http://wiki.x.org/wiki/ExaStatus for details. (At least on the ATI Radeons in the Ferrari's it seems to make the torture test of rolling the mouse over the different areas on the right side of the top section on the www.sun.com home page a little smoother at updating the big picture, though that may be my imagination since I don't have a good benchmark to measure it with.)
Also, while I've been regularly building both the 6.9/imake-based and 7.0/autoconf-based trees on Solaris 10 on SPARC and x86, those who want to run on older OS releases may want to check to make sure everything still builds and runs well on them.
I've integrated it with our Solaris Xorg sources, and made test packages available inside Sun, but unfortunately can't release on opensolaris.org right now - if all goes well, they should be integrated into an upcoming Nevada build and distributed via Solaris Express.
These will also form the basis of our initial X source release via OpenSolaris, which is still planned for later this quarter.
[Technorati Tags: Xorg, X11, Solaris, OpenSolaris]
Posted at 09:28PM Oct 26, 2005 by Alan Coopersmith in X11 |
Solaris Nevada X Consolidation Change Logs posted
[Also posted to OpenSolaris X Window System forum/mailing list.]
To help whet your appetite while waiting for our source release, I've posted the change logs for the X Consolidation for the Nevada builds so far, so you can see what's changed since Solaris 10 already:
http://opensolaris.org/os/community/x_win/changelogs/
For now, this is just a list of bug ids included in each build - once we get the source up, we can start including which files are changed for new builds.
As for the source release, we're still waiting on the X.Org community 6.9 RC 1 release - work on that seems to be going well at this point, and it may be out in the next two weeks. It will take some time after that to prepare our source release based on it, so we're probably looking at the end of October at the earliest, but it's hard to say exactly when just yet.
[Technorati Tags: Xorg, X11, Solaris, OpenSolaris]
Posted at 02:30PM Sep 30, 2005 by Alan Coopersmith in X11 |
X.Org Community & OpenSolaris X release plans
I had to write up a proposal recently for releasing the source from the X Window System consolidation [1] in Solaris to the OpenSolaris program, based on the ideas we had discussed in the X group and with our management chain for how to handle this. It's a sizeable writeup, so it follows a bit later in this blog entry. There's a problem with the schedule I prepared as part of this plan though - it was based on the X.Org Community Release Plans, which called for Xorg 6.9/7.0 to be released on this approximate schedule:
- XX Aug 2005: Release Candidate 1 (features & bug fixes)
- XX Sep 2005: Release Candidate 2 (bug fixes only)
- XX Sep 2005: Release Candidate final (critical bug fixes only)
- XX Oct 2005: X11R6.9/X11R7 Release (Documentation changes only)
In the past we've found that the Release Candidate 1 phase is about the same quality as our integration criteria for Solaris - features finished, major bugs fixed, documentation mostly done except for some cleanup work - and so we've integrated those into our builds for testing, to help find problems early, hopefully in time so they can be fixed in the final release from the community as well as in our release.
Unfortunately, as you may have noticed, it's now September and the RC1 release hasn't come out yet from X.Org. The X.Org release managers recently posted a message[2] on this to the Xorg mailing list with details on what needs to be finished before the RC1 release can happen. There's a number of ways interested people can help to get the Xorg community releases ready for all platforms, and for those who want to see the Solaris X sources released via OpenSolaris, helping with that is the best way to help our release plans move forward too. Ways you can help include:
- Building all the 7.0 modules and reporting any problems you find. Add configure.ac tests to replace any of the old Imake options or platform definitions.
- Setting up a tinderbox to continually build on a specific platform, so we can find out as soon as possible if a change breaks the build on that platform.
- Looking through the documentation to see what needs to be updated, especially because of the modularization/autotooling project.
- Testing bugs in the Xorg products in freedesktop.org bugzilla to see if they're still reproducible with the latest code from CVS
- Testing the proposed EXA patches for your hardware (if there are any yet) and reporting any bugs you find to the authors.
The xorg mailing list on freedesktop.org is the best place to ask if you have any questions about this. (If you try mailing me directly or responding here, don't expect a quick response, since I'm going to be out all week, and may not be near net much.)
So, remembering that the dates are probably slipping a few weeks, and that this is still just a proposal and not yet the fully approved plan, so still subject to change, here's the draft of our X for OpenSolaris release plans (slightly abridged for public release):
This open source offering will include code from the X Window System ("X") Consolidation for Solaris "Nevada" source gate. X source code will be released in stages.
This initial stage of X software consists mainly of software based on the open source Xorg software release from the X.Org Foundation, which Sun has modified for use on Solaris and incorporated into our Solaris packages, including the Xorg X server, graphics and input device drivers, and supporting files, and client libraries and programs for Xorg extensions. It will also include Sun's modifications to, and build and packaging infrastructure for several related software packages:
- FreeType font software from the FreeType Project (www.freetype.org)
- Bitstream Vera fonts, released by Bitstream in co-operation with the GNOME Project (www.gnome.org/fonts)
Future stages will include replacing existing components of Sun's X Window System, where possible, with the equivalent sources from the latest X.Org Foundation release. The existing X Window System in Solaris, and the X.Org Foundation software, are both derivatives from the original X Window System release X11R6 from the X Consortium at MIT, but both have diverged greatly from the original X11R6 in different ways. Between now and the Solaris Nevada release. we will be investigating each software module in our current software to determine what changes have been made to Sun's version, and if those changes are not present in the current X.Org version, whether we can and should contribute them to X.Org and then use the resulting X.Org open source release as the basis for our Solaris versions going forward. The remaining sources which are not based on components in the X.Org open source release will then be evaluated to determine if they can and should be released as open source, and if so whether to release via OpenSolaris or the X.Org Foundation, or both.
The software in this stage is all currently built by taking the unmodified community sources, applying Sun's changes, and then compiling. As such, to reduce the amount of work needed to release the software, we will only be releasing Sun's changes and the build and packaging environment needed. Users will be instructed to download both our sources and the original community sources from the community sites. The build scripts we provide will then combine the two into the sources used in Solaris.
The X consolidation sources in Solaris are also currently maintained in two separate gates, the main X gate, which contains all the sources to the X software released in Solaris 9 and before, and an Xorg gate, which was created in April 2004 for the project of porting the Xorg tree to Solaris. Because the Xorg gate is a new gate, based on open source software, we are going to begin our OpenSolaris releases by releasing all of this gate except for the closed-src directory. We will also be releasing selected components from the main X gate which also came from open source releases in recent times and were purposely kept in a separate subdirectory. The bulk of the main X gate is unfortunately a mix of open source and proprietary code that has been mixed and evolved over 15 years and as such needs more work before we can release it, so it will be reserved until future stages of our OpenSolaris release plans.
Those future stages will include replacing existing components of Sun's X Window System, where possible, with the equivalent sources from the latest X.Org Foundation release. The existing X Window System in Solaris, and the X.Org Foundation software, are both derivatives from the original X Window System release X11R6 from the X Consortium at MIT, but both have diverged greatly from the original X11R6 in different ways. Between now and the Solaris Nevada release. we will be investigating each software module in our current software to determine what changes have been made to Sun's version, and if those changes are not present in the current X.Org version, whether we can and should contribute them to X.Org and then use the resulting X.Org open source release as the basis for our Solaris versions going forward. The remaining sources which are not based on components in the X.Org open source release will then be evaluated to determine if they can and should be released as open source, and if so whether to release via OpenSolaris or the X.Org Foundation.
The initial release should contain the source for these packages:
Packages for both SPARC & x86: SUNWxorg-client-docs SUNWxorg-clientlibs SUNWxorg-devel-docs SUNWxorg-client-programs SUNWxorg-compatlinks SUNWxorg-headers SUNWfontconfig SUNWfontconfig-docs SUNWfontconfig-root SUNWfreetype2 SUNWxwxft Packages currently delivered only for x86: SUNWxorg-cfg SUNWxorg-headers SUNWxorg-xkb SUNWxorg-doc SUNWxorg-mesa SUNWxorg-graphics-ddx SUNWxorg-server
The one exception will be the code from the closed-src directory used to build part of SUNWxorg-server.
It will not contain any of the sources for these packages:
SUNWi1of SUNWxwdem SUNWxwfs SUNWxwman SUNWxwplr SUNWxwslb SUNWstsf SUNWxwdim SUNWxwfsw SUNWxwmod SUNWxwplt SUNWxwsrc SUNWstsfr SUNWxwdxm SUNWxwhl SUNWxwoft SUNWxwpmn SUNWxwsrv SUNWxwacx SUNWxwfa SUNWxwice SUNWxwopt SUNWxwpsr SUNWxwsvr SUNWxwcft SUNWxwfnt SUNWxwinc SUNWxwpft SUNWxwrtl SUNWxwxst SUNWxscreensaver-hacks SUNWxscreensaver-hacks-gl
Sources for most, but not all, of the contents of those packages are expected to become available in later phases.
With only the sources in the initial release, users will have:
- An X server for x86 hardware (Xorg)
- Libraries and programs for extensions supported in Xorg but not Xsun
- The font software used by the JDS/GNOME stack.
They will not have:
- An X server for SPARC hardware, or the older Xsun server for x86.
- The base X libraries needed by all X, CDE, and GNOME applications.
- Support for input and output methods for various languages
- Fonts other than Bitstream Vera
- Base X clients such as xhost, xauth, xterm, etc.
- The Xscreensaver used by GNOME
Many of those may be obtained from the open source X.Org software distribution, but they are not completely compatible drop-in replacements for the Solaris versions, and will not provide an X server usable on SPARC hardware. For now, users will still need to use the binaries provided in Solaris Express to get SPARC graphics support, libraries compatible with applications compiled against Solaris releases, accessibility support in Xscreensaver, and the full set of applications and fonts provided by Solaris, or bug fixes and enhancements we have not yet contributed back to the open source community.
The Xorg software in Solaris 10 and Nevada is currently based on Xorg 6.8.2, to which Sun has applied changes, fixed bugs, and brought back individual changes on an as-needed basis from the Xorg community CVS branch for the upcoming Xorg 6.9 branch, such as support for new models of graphics devices from ATI, nVidia, and Intel. Currently, we modify almost 300 files from the community release to build our sources - moving our baseline release to the Xorg 6.9 release will remove over 50% of those changes as we have either contributed the changes back that we made, or will be getting the newer versions of the files that we use directly from the Xorg baseline release.
Because of this, we are basing our OpenSolaris release plans on the schedule planned for the Xorg 6.9 release from the community. The community is actually working on two parallel releases right now - Xorg 6.9 & 7.0. The releases will contain the same code base, but are organized differently and use different build systems. Xorg 6.9 follows the style used by previous X11 releases, where the entire release is built and released as one monolithic source tree, of just over 15,000 files, built using the Imake build system X has always used, but few other projects have adopted. Xorg 7.0 breaks the tree down into individual modules, which can be built and released separately, to allow a more managable release process, and converts to using the GNU autoconf toolchain used by most other open source projects. To allow us to move faster to the new code line, we will first move to the Xorg 6.9 release, allowing us to adopt the new features utilizing our existing build infrastructure and without the additional risk of having to convert both our code base and our build system at the same time. This then needs to "soak" in Nevada to allow backporting to a Solaris 10 Update release.
In parallel, once Xorg 7.0 is released, we will start using the individual module sources to replace existing components of the main Solaris X11 tree, which is currently a mix of X11R6.0, X11R6.4, X11R6.6, XFree86 4.3, X11R6.8, Sun enhancements and 3rd-party code. Each module will be analyzed and we can determine then if there are any changes to our source not present in the open source versions. When differences are found, we will analyze them to see if they should be maintained or removed, and if we maintain them, whether we can contribute our changes back to X.Org for future releases. This is expected to be a gradual process occuring over the lifetime of the Solaris Nevada development cycle, slowly increasing the amount of the Solaris X source which is available via OpenSolaris and decreasing the amount of differences between our releases and the community releases.
The current proposed dates for the community 6.9 & 7.0 releases (which as you can see are still a bit rough) are:
* XX Aug 2005: Release Candidate 1 (features & bug fixes)
* XX Sep 2005: Release Candidate 2 (bug fixes only)
* XX Sep 2005: Release Candidate final (critical bug fixes only)
* XX Oct 2005: X11R6.9/X11R7 Release (Documentation changes only)
* April 2006: X11R7.1 Release (tentative)
(see http://wiki.x.org/wiki/X11R6970ReleasePlan for details)
Given that, our proposed schedule for integration into Solaris Nevada and
release of source via OpenSolaris is:
- Now:
- Work on contributing Sun changes from Solaris XORG tree to X.org community CVS for 6.9 release to minimize the number of Sun-custom changes we have to carry forward for 6.9.
- Nevada Build 24 (X code changes from 8/30-9/12)
- Integrate Xorg 6.9 RC1. First build to have source released via OpenSolaris - will consist of XORG tree (except closed-src directory) and open-src directory of XSUN tree.
- Nevada Build 25 (X code changes from 9/13-9/26)
- Integrate Xorg 6.9 RC2
- Nevada Build 26 (X code changes from 9/27-10/10)
- Integrate Xorg 6.9 Release. Begin integrating library & client packages from Xorg 7.0 Release into open-src directory of XSUN tree to replace existing code.
- Sometime in Q2 CY2006 (depending on Xorg 7.1 community schedule)
- Integrate Xorg 7.1 into XSUN open-src tree, including all bits currently in XORG tree. Close Nevada XORG tree permanently.
[1] For those not familiar with the Solaris terms, a "consolidation" is a set of related software packages built and integrated into the OS together. The initial OpenSolaris release was from the "OS/Networking", or "ON", consolidation, consisting of the kernel and core utilities. I work on the Solaris X Window System consolidation, usually known as "X" for short, which consists of the software you'ld find in the X.Org tree, plus similar custom software from Sun. It does not include CDE/Motif, JDS, or the Xsun graphics card modules, which all come from their own consolidations.
[2] Solaris fans should note that there's only two OS'es listed as fully supported in the modular release, and our favorite OS is one of them! Fans of other OS'es should note this is mainly because Sun's X engineering group is putting in the time to make this happen, and all you need to do to add your OS to the list is to respond to the call for volunteers to help out on other OS'es. Some work has been put in towards supporting the various BSD flavors, CygWin, and MacOS X, but not enough to be ready to claim full support yet.
[Technorati Tags: Xorg, X11, Solaris, OpenSolaris]
Posted at 11:21AM Sep 04, 2005 by Alan Coopersmith in X11 | Comments[3]
Recent Solaris code contributions to X.Org
As posted earlier today to the OpenSolaris X Window System Community Mailing List/Forum...
We're still working through the process to get our Solaris Xorg build trees up on opensolaris.org, but that hasn't stopped us from integrating more of our changes directly into the X.Org community CVS for inclusion in Xorg 6.9, so that you can access them now directly from the X.Org CVS on freedesktop.org.
Recent contributions:
- Solaris support for the new "kbd" driver which is replacing the older "keyboard" driver in Xorg.
- A port of the Xsun audiobell feature to the Solaris keyboard code in Xorg (known for now as Option "BellDevice" "/dev/audio")
- utmpx handling code from Solaris integrated into sessreg (used to log xdm sessions into the utmpx & wtmpx files)
- Solaris Imake config files set to use -z combreloc & -B direct linker options to match flags used when we build on Solaris
- Fixes to make Mesa 6.3.1 build properly on Solaris with Sun Studio compilers
- xman default man path set correctly for Solaris
- xload builds on Solaris switched from libkvm to libkstat so it works with both 32-bit and 64-bit kernels, and without group kmem
- numerous Solaris build fixes for Xorg 7.0 autoconf conversions
- support for using walkcontext() on Solaris in new code to log stack traces into Xorg.0.log on crashes
(Nothing really big or earth-shattering, just a bunch of small steps towards our goal of reducing the diffs between our Solaris X sources and the X.Org community sources. Some of these features aren't even in the main Nevada branch of our Xorg Solaris builds yet, but will get merged in as we move towards the upcoming Xorg 6.9 release.)
To see what else is going into X.org CVS for the next release, you can check out http://cvs.freedesktop.org/xorg/xc/ChangeLog?view=markup .
[Technorati Tags: Xorg, X11, Solaris, OpenSolaris]
Posted at 11:50PM Aug 15, 2005 by Alan Coopersmith in X11 |
X11R6.9 & 7.0 Release Candidates Zero
The “zeroth” release candidates of X11R6.9 and 7.0 have been released and are in need of people like you to download them, build them, test them, and report back any problems you find. These are numbered zero because they're not quite to the point of a normal release candidate, but are to the point where we want people to try them, especially the 7.0 builds. As you can guess from the version number, 6.9 is not a major leap from the current 6.8.2, but does bring the usual collection of new features, driver updates, and bug fixes. 7.0 takes the same code and delivers it in a whole new way, breaking the giant X.Org source tree into individual modules for each library, program, and driver module, and building it all via the GNU autoconf, automake, libtool, and pkgconfig tools instead of the classic Imake used in past X.Org releases since the dawn of X11.
So while 6.9 should build on pretty much the same set of platforms as 6.8.2 did, 7.0 started over with a clean slate and may need work to build on many platforms. The current modular developers have worked mainly on recent releases of Linux, Solaris, and BSD on x86 platforms, with some additional work done on other architectures for those OS'es, including AMD64, IA64, and SPARC, plus MacOS X and Cygwin. For instance, I've built all the libraries and applications on Solaris 10 for both SPARC and x86 architectures, and built the Xorg server on Solaris 10/x86. Older releases and other platforms and architectures need to be tested to find out if we need to adjust the autoconf tests for them, and various build time options still need to be converted to autoconf flags, plus lots of documentation needs to be written to explain it all.
[Technorati Tags: Xorg, X11, Linux, Solaris, OpenSolaris]
Posted at 11:56PM Aug 01, 2005 by Alan Coopersmith in X11 | Comments[1]
DDC Talk: "Peeking under the Hood"
I've just finished my tutorial presentation on tools for tracing X server/client interactions here at the Desktop Developer's Conference in Ottawa. I've posted both the slides from my talk and the DTrace probes and scripts I showed as one of the tools.
Unfortunately, I didn't get to cover all the tools I wanted to (mostly because I spent a lot more time in the last week on getting the Xorg 6.9 & 7.0 releases ready for their slightly delayed Release Candidate Zero milestones than on my presentation). There are some tools we've developed for our own use in the X group in Sun I was hoping to be able to release before the talk and cover, but didn't get around to - such as a tool that uses the X-Record extension to generate statistics on the number of times each request is called, which we used when switching from CDE to GNOME to determine which parts of the server needed more optimization attention now (Motif & GTK have very different call profiles - for instance, GTK is much more image/pixmap based than Motif was, while Motif use lots of filled rectangles and straight lines to draw it's window decorations and widgets).
About half the talk, and most of the interest though, was in the dtrace probes in the X server (which I wrote about in previous posts). A lot of what I showed was doable before, and in many cases, has been done before, but took much more work. For instance, the X Record program I wrote earlier, and an even older program that post-processed xscope output to produce call counts, both gave counts of the number of times a function was called, but they were a lot more work to write than the simple requests.d script. And that script was easily extended to time-requests.d to instead print the average CPU time the X server took to process each request.
Tip for giving presentations using StarOffice 7 in JDS 3 on Solaris 10: When you want to switch from slide show mode to another window to run a demo, exit slide show mode first in StarOffice, and then switch apps. Trying to Alt-Tab directly did amuse my audience (especially the author of an alternative window manager watching from his comfy spot on the couch), but discovering StarOffice/Metacity interaction bugs during a presentation to a less forgiving audience may not be the best demo of our "integrated" desktop. Fortunately, pkill soffice worked well in the terminal window I had switched to.
[Technorati Tags: Xorg, dtrace, DesktopCon, Solaris, OpenSolaris]
Posted at 07:54AM Jul 19, 2005 by Alan Coopersmith in X11 | Comments[1]
