LWN.net Logo

Leading items

Development process latency

By Jonathan Corbet
December 5, 2007
Your editor recently reached a point where a replacement of his main desktop system became imperative. The old one was showing certain signs of hardware flakiness, coupled with a basic inability to run some of the software your editor is trying to play with for a future article. Let's just say that the grumpy editor was becoming more so than usual. But, being a good US citizen, your editor knows how to deal with a bad mood: go shopping. So it seemed like maybe a good time to put a bit of money where the keyboard was and have a look at those Ubuntu-based systems being sold by Dell.

That plan did not go too far, unfortunately; it would seem that those systems, while seeming like nice boxes, contain NVIDIA graphics adapters. Buying hardware which needs proprietary drivers was most emphatically not on the agenda. Fortunately, it was not necessary to look too far to find a no-system-installed box with integrated Intel graphics. Said box is now being used to write this article; the simple difference in noise levels between this one and its predecessor is enough to make your editor almost cheerful.

The Intel chipset in this box, as it turns out, is quite new, to the point that not all distributions support it. But Fedora 8 was able to use everything installed on this box from the very beginning, and some early experiments showed that Ubuntu 7.10 was just as happy. Once upon a time, full support for very-new hardware was a rare surprise. Now, one can almost just take it for granted. This happy result comes from a combination of factors:

  • The hardware vendor (Intel) is strongly committed to shipping free drivers for its products as soon as those products become available. Your editor can now definitively say that this policy is responsible for at least one sale for that vendor.

  • The "new" (since 2005) kernel development model is strongly focused on a short release cycle and getting code out to users quickly. Prior to 2.6.x, new kernel code could take years to get into an official stable kernel release. Now three months is sufficient in many cases. So Intel's drivers became immediately available with no need to hassle with backports, driver disks, or other such inconveniences.

  • Contemporary distributions, at least outside of the "enterprise" category, have gotten very good at packaging, integrating, and stabilizing leading-edge software. So those fresh kernels, along with a lot of other goodies, end up in a supported distribution surprisingly quickly.

The end result is that, increasingly often, things Just Work. It is hard to get grumpy about that.

Of course, not everything Just Worked. Many years ago, your editor spent some hours experimenting with the available bitmap fonts for X in the search for the one which provided the optimal combination of information density and readability. The resulting choice (one of the 75dpi Adobe Courier fonts) served well for a long time, even as various components on the desktop moved to more sophisticated font engines. In recent times, only Emacs was still using that font. Emacs is an important part of your editor's desktop, however, so this one remaining user was a crucial one.

That font vanished when the new system came in, with the result that editor windows could no longer simultaneously fit into their assigned screen space and provide highly readable text. Your editor became grumpy again.

What followed was a brief effort to figure out where the special font had gone, and why it did not appear to render the same way even when the requisite font files were brought over from the old system. But even your editor, who can be somewhat slow on the uptake, eventually asked himself: why, exactly, was it necessary to chase down bitmapped fonts from the early 1990's - fonts which he first used on a diskless Sun 3 system - in 2007?

In fact, it's not necessary to mess with those archaic fonts - as long as one isn't tied to the concept of stable releases. Support for the Xft font library in Emacs exists, and has for a while; here's a description in a weblog entry from 2005. This support is, even, in the Emacs code repository on Savannah. But it is not in the Emacs 22 release. It's not even in the development trunk yet.

With a bit of digging, your editor found this page which describes how to check out and build a version of Emacs with proper font support. The results are striking. Here's what standard emacs looks like:

[emacs with bitmapped font]

And here is what the Xft-enabled version can do instead:

[emacs with Deja Vu font]

Your editor is wishing he had investigated this code some time ago; perhaps it would not have been necessary to buy those new, stronger eyeglasses after all.

Building crucial tools directly from development repositories brings a certain thrill; it's part of the free software experience. This version of Emacs has not, yet, exploded in real use. But, all of that notwithstanding, there is something warm, fuzzy, and comforting about getting things like text editors in a stable, supported form from one's distributor. So one might well wonder: when are we likely to see Emacs 23, which will contain the Xft support (along with a lot of other things like proper Unicode support, the multi-term patches, etc.), in a stable form?

The history here is not encouraging: the Emacs 22 release was five years in the making. Richard Stallman, who still keeps a firm hand on Emacs development, is famously averse to making guesses about release dates, so there is little point in asking him when the next release might happen. But it is worth noting that there has been no public discussion of release timelines, or of any desire to tweak the process to get the next version out in less than five years. There is some very nice code sitting in the unicode-2 branch of the GNU Emacs repository; it has been there for a while, but most users may well not see it before the end of this decade.

Different free software projects have different management styles, and nobody would argue that things should be otherwise. Experience has shown that each project needs to develop in its own way. But experience has also shown, over quite a few years now, that confining useful code to development repositories for years on end brings little benefit to anybody. There is value in getting features into stable releases and out where people can make use of them.

Comments (53 posted)

Book review: Linux System Programming

By Jake Edge
December 5, 2007

"System programming" is not easily defined, but is typically considered to consist of programming at a lower level than regular application programming. As Robert Love points out in the introductory chapter of Linux System Programming, there is no technical difference between the two – the same system calls are used – it is more of a difference between programs that implement the infrastructure and programs that use it. Programmers faced with either task will find that understanding how to best use the system call interface is very important. Love sets out to provide that understanding in his book.

The book is organized into ten chapters: an introduction, three on I/O, two on process management, and one on each of file and directory handling, memory management, signals, and time handling. Each chapter does a good job of covering the subject matter at a level that will help programmers make good choices in the various trade-offs available. The main focus of each chapter is the system calls that Linux provides to perform tasks specific to that area.

The history of each call is described, along with information about which members of the UNIX family make it available, so that the right choices can be made for portability. Also, various historical (perhaps vestigial is more accurate) calls are documented, with readers being warned away from using them. Each call itself is given a treatment similar to a man page, but with greater detail. Where the book really shines is in its comparisons of "similar" system calls.

The trade-offs between using select() and poll() or the advantages and disadvantages of using mmap() vs. traditional file I/O mechanisms are just two of the comparisons presented. For example, after listing five bulleted advantages of poll(), select() gets its due:

The select() system call does have a few things going for it, though:
  • select() is more portable, as some Unix systems do not support poll().
  • select() provides better timeout resolution: down to the microsecond. Both ppoll() and pselect() theoretically provide nanosecond resolution, but in practice, none of these calls reliably provides even microsecond resolution.
Superior to both poll() and select() is the epoll interface, a Linux-specific multiplexing I/O solution that we'll look at in Chapter 4.

This is the kind of information that only comes with experience; this book will help a programmer get to that point more quickly. Even for experienced programmers, the comparisons will help crystallize some thoughts that have been floating around. It is definitely one of the better features of the book.

The book is not without its faults, though, especially in the example code. For each system call, a small example of calling it is provided, but the code snippets are simplistic and do not really provide much meat. There are very few code examples that tie together the various concepts. Had Love done that, there might have been complaints about the size of the resulting book, but the benefit to budding system programmers would be huge.

There are other problems with the book; for instance, the pirate motif in the examples did not seem to provide anything useful. More seriously, some of the major problems faced by system programmers: race conditions, concurrent data access synchronization, reentrant code, etc. were not covered in much detail. These topics are certainly something a system programmer will need to understand, but they will have to be found elsewhere.

The back cover of the book describes it as "an insider's guide to writing smarter, faster code" – it lives up to some of that, but not all. It is a useful book, however, that will find a home on the bookshelf of many Linux programmers. For those who are relatively new to the topic, there will be a wealth of information. But, even for those who are old hands, there will be useful tidbits, system calls that had escaped notice, and lots of reference material.

Comments (9 posted)

Enterprise realtime and cooperative development

By Jonathan Corbet
December 5, 2007
At the end of November, LWN posted a pointer to Novell's announcement for its SUSE Linux Enterprise Realtime offering. The resulting comments were surprisingly negative. Some readers took exception to the language of the release - though it really is just the standard tortured English which is seemingly required for press releases. But others question the need for realtime response in "enterprise" settings. Anybody who is still wondering about the value of that product will be doubly confused now that Red Hat has announced a realtime distribution service of its own. Clearly somebody sees a need for deterministic response in big corporate deployments.

What's going on here is that corporate operations are, increasingly, being run by automated systems. One immediate example is in the financial trading field, where automated systems execute customer trades and, often, make the decisions to perform the trades in the first place. Often the conditions that make a particular trade advantageous last for very short periods of time - perhaps only as long as it takes for the first interested party to arrive on the scene. So predictably fast response to trading decisions is an absolute requirement. Losing too many milliseconds in the execution of an order can cost real money.

It does not take much imagination to see that, as these systems become more capable, more corporate dealings will happen via automatic agents which require lightning-fast response. So enterprise realtime has the look of a growth industry. It's not surprising that the two companies most interested in selling Linux-related services into the enterprise market have announced offerings within a week of each other.

What is surprising is the amount of silly sniping which has come with these releases. Consider this quote from the Red Hat side:

"Till last week, Novell sold a Real Time system that forked their kernel," said Scott Crenshaw, VP of Red Hat's infrastructure business unit, on a visit to London today. Last week, Novell announced SUSE Linux Enterprise Real Time (SLERT), using open source Linux code that Crenshaw says was "80 percent" written by Red Hat people. "We welcome Novell to the real-time community," he said, slightly stingingly: "We look forward to them making contributions to it."

Or from the Novell side:

Note to Red Hat: this is open source, remember? Novell is shipping tested and enterprise-hardened Linux with real time capabilities. Just because Red Hat is again late to market (see enterprise Linux desktop, Xen virtualization, etc.) doesn't mean Linux contains "beta code."

Despite their competitive relationship, Linux distributors have traditionally dealt with each other in a friendly, even cooperative manner. At the development level, things are still that way: developers for a given project work together and only very rarely does anybody care about who a given developer's employer is. Developers, it seems, are more polite than managers and PR people.

So who is forking the kernel? In fact, both distributors will be shipping something which is pretty far from the mainline. Back in October, LWN looked at the contents of the realtime tree, finding some 400 patches which have not yet made it into the mainline. Anybody who is shipping a true realtime kernel will have to include the bulk of those patches, and probably some others as well. In recent years, much work has been done to enable distributors to ship kernels which are much closer to the mainline, but these realtime offerings are a step in the opposite direction. They are, for all practical purposes, forked kernels.

That statement should not be taken as a criticism; there is no other way to ship realtime Linux at this point. While much of the realtime code has been merged, some of the deepest, most necessary components remain outside of the mainline. The process of getting those patches merged has taken quite a bit longer than anybody would have expected; among other things, some of the core realtime developers have been distracted by small side projects like the i386/x86_64 architecture merger. Until the process of Every attempt to take Unix and add hard real time to it has been a failure.
(Larry McVoy, 2004).
getting the realtime patches into the mainline runs its course - something which could happen over the next year - anybody shipping realtime distributions will necessarily have to roll their own kernels.

More than almost any other area of kernel development, the realtime code has been the subject of recurring debates over who deserves the credit for the work. See this LWN article from 2005 for an example. This time around, Red Hat would appear to be claiming ownership of the realtime work. In fact, much of this work, including the crucial low-level preemption work which got the current realtime effort going, was done at Red Hat. But other components have come from companies like MontaVista, Linutronix, TimeSys, and, yes, Novell (and others, of course). For these two companies to be arguing about credit is a little silly; both are clearly significant contributors to the kernel (and beyond).

We may see more of this kind of talk, though. This market looks like it could be big, so the companies working in that area are going to make a serious effort to be successful there. The result may well be that Linux ends up as the dominant system in the fast-moving, agent-driven world where much of corporate operations appears to be heading. That cause will be helped, though, if the relevant managers and spokespeople take a clue from the developers who are making all of this work actually happen. We are all building this system together; pointless mud slinging can only get in the way.

Comments (35 posted)

Page editor: Jonathan Corbet
Next page: Security>>

Copyright © 2007, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds