LWN.net Logo

LWN.net Weekly Edition for September 29, 2011

Papering over a binary blob

By Jonathan Corbet
September 28, 2011
Nobody likes binary blobs. When those blobs come in the form of firmware for peripheral devices, though, it is probably fair to say that most of us are able to live with their existence. Yes, it would be nicer to have the source and to be able to create modified firmware loads, but, as long as the firmware itself is distributable, Linux users usually do not worry about it. That is not true of all users, though, as can be seen from an effort underway in the GTA04 project.

GTA04 bills itself as the next-generation OpenMoko phone. The end product is intended to be a board that can fit inside an existing OpenMoko handset case but which provides a number of features the OpenMoko phone never had: 3G/HSPA connectivity, USB 2.0 on-the-go support, BlueTooth, an FM transceiver, various sensors (barometer, gyroscope, ...), and the obligatory flashlight device. Also provided will be a Debian port to make the whole thing work. The hardware design is reasonably far along, with boards from an early adopter program about to make their way to developers. There is, though, one nagging problem that the project would still like to solve.

The GTA04 uses a Marvell 8686 "Libertas" chip for its WiFi connectivity; that is the same chip used in the first generation OLPC XO laptop. That chip requires a significant firmware blob to be loaded before it can function. One of the earliest bugs filed at OLPC called for the replacement of this blob with free software, but nobody stepped up and got the job done. So, five years later, the GTA04 project, whose goal is the creation of a 100% free handset, is stuck shipping that same firmware blob.

Some projects would shrug their collective shoulders, treat the blob as part of the hardware, and move on to the long list of other problems in need of solution. Others might bite the bullet, get hardware documentation from somewhere, and write a replacement blob. Yet others might decide that Marvell's hardware is incompatible with their goals and find a different WiFi chip for their board. GTA04, though, has done none of the above.

What the GTA04 developers would like to do is documented on this project page:

The task is to develop a prototype of a microcontroller that sends an immutable firmware program through an SDIO interface into a Marvell 8686 based WLAN chip independently from the main CPU. The goal is to isolate the non-free firmware binary from the main CPU so that it becomes effectively circuitry.

The architecture we want to use this with is a TI OMAP3 with a level shifter and a Wi2Wi W2CBW003 chip connected to it. Our idea is to use a MSP430F5528IYFF controller that sits between the OMAP3 and the level shifter so that either of the MCUs can control the SDIO interface and right after reset, the firmware is injected from the MSP430 into the Wi2Wi chip.

In other words, the project proposes to add another microcontroller to its board for the sole purpose of shoving the firmware blob into the Marvell WiFi controller. By so doing, they turn the blob into "effectively circuitry" and, seemingly, no longer feel quite so dirty about it. The Free Software Foundation agrees with this goal, having apparently set it as a condition for their endorsement of the device:

The current thinking is that by removing the ability for this software to be upgraded, we can effectively treat the wireless networking hardware as a circuit, and importantly, not a malicious circuit that can be upgraded.

One might object that, if the firmware blob contains malicious code, that code will still exist even if it does not pass through the CPU as data first. The GTA04 is meant to be a free device; the operating software will be under the user's control. So one would expect that the firmware blob will not be spontaneously replaced by something nastier. If the firmware blob were somehow able to maliciously "upgrade" itself against the will of the Linux system running the phone, it would be able to do any of a number of other unpleasant things regardless of which processor loads it into the WiFi controller. Meanwhile, if Marvell comes out with a new blob offering better performance or fixing bugs, users will no longer have the option of installing it on their phones.

It is, in other words, hard to see the benefits that are being bought through this exercise.

In fact, it would seem that the GTA04 project is wanting to saddle itself with a more complex design, higher hardware costs, less flexibility in the future and increased power usage to create a system that runs the exact same binary blob on the same controller. That's a high price to pay for the comfort that comes from having swept the blob under the rug where it can't be seen. This whole thing might be humorous if it weren't for the little fact that it would really be nice to see this project succeed; more freedom in this area is sorely needed. What they are trying to do is challenging enough without the addition of artificial obstacles. It will be a sad day if the pursuit of a truly free handset is impeded by an exercise in papering over an inconvenient binary blob.

(Thanks to Paul Wise for the heads-up).

Comments (59 posted)

Integrated color management with colord

September 28, 2011

This article was contributed by Nathan Willis

Desktop Linux users used to be easily divided into two camps when it came to color management: there were the graphics geeks — who painstakingly profiled their scanners, printers, and displays and manually set up color management in each of their creative applications — and there was everyone else, who saw color management as an esoteric hobby with no practical value. The color geeks are quietly taking over, however, thanks to recent work that automates color management at the system and session level.

The root of the color management problem is that no two devices have exactly the same color reproduction characteristics: monitors and printers vary wildly in the tonal range and gamut that they can reproduce; similarly cameras and scanners vary wildly in what they can pick up. If you spend all week staring at a single display device it is easy to forget this, but anyone who has set their netbook on the desk beside a desktop LCD display recognizes immediately how different they can be. As a practical matter, when a user makes a printout and finds it too dark, or orders a piece of clothing online and is surprised at its color when it arrives, lack of color management is the problem.

But color management is essentially a solved problem that has yet to be implemented system-wide on Linux. Every display or input device can be profiled — that is, its color characteristics measured and saved in a standardized format like an ICC color profile. With profiles in hand, applications need only to perform a transformation on RGB data to map it from one profile (say, a camera's) to another (a display's). Most of the time, a mapping with a perceptual rendering intent is used, which means the final image will appear the same to the human eye on the display as it did through the camera viewfinder.

The old way

Several free software packages exist for applications to perform these transformations. By far the most popular is LittleCMS, an MIT-licensed library used by GIMP, Krita, ImageMagick, Inkscape, Scribus, and many other graphics applications. Another well-known alternative is Argyll, which is licensed under the AGPL. Argyll consists of a collection of command-line tools, however, rather than a shared library designed for use by application programs.

LittleCMS support simply gives each application the ability to perform profile-to-profile transformations. Users are still required to open the preferences dialogs in each application and specify the .icc file for each profile used in their hardware setup. As a result, "color management" came to be a feature that could be enabled or disabled on a per-application basis, since only a small percentage of users cared enough to have profiles for their displays and printers. A far better approach would be for the system to keep track of the relevant profiles (since displays, scanners, and printers tend to stay put for long periods of time), and have applications automatically retrieve them as needed — no user intervention required. That is the approach taken by both Windows and Mac OS X.

The technicolor dawn

This is where Richard Hughes's colord and Gnome Color Manager (GCM) come into play. Colord is a framework for automating the storage and retrieval of color profiles. It includes a system daemon that maintains an SQLite database to track which profiles map to which devices; it also provides a D-Bus interface for other programs to query (or in the case of GCM, add and change) profiles.

It can retrieve scanner and printer device IDs through Udev and present a simple interface with which users can select their preferred profile for each device. Multiple profiles per device are supported, to allow separate profiles for different paper stocks, ink options, flatbed and transparency adapters, and other parameters. An application can ask for the profile for a specific device using dot-separated qualifiers, such as RGB.Glossy.600dpi. If colord does not have a stored profile for the requested qualifiers, it can fall back one parameter at a time to find the best match, e.g., to RGB.Glossy.* or RGB.*.600dpi, and eventually back to RGB.*.* and the default * for a device ID.

The other half of the framework is GCM, which is a session-level process implemented as a GNOME settings daemon plug-in. GCM talks to the X.org session to retrieve the display device information through XRandR and, where possible, to set display settings such as video card gamma tables (VCGTs). The session-level process can also read ICC profile files stored in the user's home directory (as opposed to the system-wide ICC profile directories /var/share/color and /var/lib/color, which are watched by the colord daemon).

Hughes said in a recent talk that the system/session split, though it sounds confusing at first, is required for several reasons. First, the system daemon needs to talk to other system-level processes such as CUPS (for printers) and SANE (for scanners), and needs to work even when there is no active user session (consider shared printers, printers that print directly from memory cards, and GDM login screens, for example). But the session-level process also needs to be separated from privileged operations for other reasons. SELinux will not allow a system daemon to load files (in this case, ICC profiles) from a user's home directory because of security concerns, and colord would not even be able to read them if the home directory is encrypted. The separation also makes it possible for KDE, LXDE, or other environments to write their own colord-compatible session management code independent of GCM.

The application's viewpoint

The framework provided by colord and GCM is very high-level; applications must still do the color transformations using LittleCMS or another library. But by relying on colord to provide the correct profile information for a particular hardware device, there is less for the application developer to worry about.

GCM provides an interface for the user to manage his or her profiles, which alleviates the problem of manually setting the same preferences in every application. But applications do need to be updated to work with colord. At the moment, the list of colord-compatible programs is short: Hughes told Alexandre Prokoudine at Libre Graphics World that it includes CUPS, Foomatic, Simple Scan, and Compiz-CMS. The GTK+ toolkit is also compatible he said, and KDE support is on the way.

General-purpose GTK+ or KDE applications can decide to entrust colord with their entire color management workflow, but creative applications may still want to provide additional options. For example, users may want to simulate an output device with a different profile to "soft proof" before printing or rendering images. Colord can still help, because it can maintain profiles for "virtual devices" in addition to the local hardware, but of course presenting that functionality to the user requires pulling back the curtain away from the "it just works" approach favored by simple applications.

Perhaps understandably, support for colord among the already-color-aware Linux creative suite appears to be growing slowly. Krita has integration plans, but it may be a while before the other applications that already implement color management adopt colord, on the grounds that the users who already care have also already configured their software.

On the other hand, Hughes has been busy submitting patches to other projects to enable colord support. He added the colord support now found in CUPS' gstoraster filter (which converts PostScript and PDF content to raster data) and foomatic (which can directly generate printer-language files) and has reportedly been patching other tools as well. Colord debuted in 2010, and was available in GNOME 3.0, but is now a hard dependency for the imminently-due GNOME 3.2, so for the first time, application developers can count on its availability.

Where profiles come from

As a practical matter, the big lingering question for end users is where the all-important device profiles come from. After all, it makes no difference how easily the applications can retrieve the default profile for a display or printer if there is no profile available. Hughes has designed colord to support profiles from a variety of sources, and always takes the "the user is right" approach: a manually-selected profile is assumed to be better than a generic one.

The best possible profiles are those that are created with proper measuring device: a tristimulus colorimeter for displays, a high-quality target for scanners or digital cameras, or a spectrophotometer for a printer. But all of these methods involve some outlay of cash. The price of colorimeters has fallen sharply in recent years, but even the cheapest devices run close to US $100, which can sound excessive for a hardware device only used on isolated occasions. There are non-profit producers of quality IT 8.7 targets, such as Wolf Faust, but they are still not free. Spectrophotometers, which measure reflected light, remain expensive, although there are paid services to which users can mail a test printout and get a high-quality ICC profile in return. But the one-time cost of buying such a profile rises when you consider the need to have each ink and paper combination measured separately.

Still, GCM does support creating a display profile with a USB colorimeter, importing camera or scanner images of calibration targets for scanner or camera profiles, and scanning printouts to generate printer profiles. GCM uses the low-level profiling tools from Argyll for much of this process, but Hughes has also been adding native drivers for common colorimeters like the Pantone Huey.

The next rung down on the quality ladder is manufacturer-provided profiles. These vary depending on device type and quality control. An expensive film scanner might ship with an accurate profile on the accompanying CD, while an inexpensive laptop display is completely hit or miss. As Hughes explained,

I have a T61 laptop with a matte 15" screen, but as any T61 owner [who's smashed their screen] knows, the T61 can have about half a dozen different panel types from factories in a few different countries. So trying to come up with the ultimate T61 laptop profile is going to be really tricky.

Even where manufacturer-provided profiles exist, however, Linux distributions generally do not have the rights to ship them, so they are inaccessible to an "it just works" framework.

As an alternative, Hughes said, GCM can probe XRandR devices for Extended display identification data (EDID), and auto-generate a basic display profile based on it.

If (and this is a big "if") the vendor puts semi-sane data into the EDID then we can get some chromaticity and whitepoint co-ordinates which allows us to generate a profile that's certainly better than the default.

Here again, Hughes warned that the quality of the device in question correlates to the quality of the EDID data one should expect. Manufacturers who regularly swap in LCD panels from Korea, China, and Taiwan without indicating a difference in the model number are likely to burn in generic EDID data that covers the average characteristics of the product line.

Unfortunately, how useful the provided EDID data is can also depend on extraneous factors like the video driver. For example, the NVIDIA binary drivers only support XRandR 1.2, which in turn does not include support for sending separate VCGTs to multiple monitors. Thus regardless of the quality of the data, at least one display will be forced to use gamma tables that are only accurate for a different monitor. It is also possible to run into older monitors that do not provide EDID information at all, or to have KVM switches or splitters lose it en route to the video card.

Kai-Uwe Behrmann of the Oyranos project, a competing color management framework, recently undertook an effort to build an open, user-contributed database of device profiles. Called taxi, the system was developed in the 2011 Google Summer of Code by student Sebastian Oliva. There is a web front-end running at icc.opensuse.org, which returns both raw .icc files and JSON-formatted metadata about the source device. It is an interesting approach, though one with its own set of problems. Display characteristics change over time, for example, as the backlight ages, and there is no way to verify the conditions under which another person's profile was created.

In the final analysis there is no automated substitute for a good profile created with quality test materials; a fallback profile will always be better than nothing, but unpredictable. Perhaps the best thing the community at large can do if it wishes to spread good, non-generic profiling is to make sure that the distributions and desktop environments pack a colorimeter and IT 8.7 target into the "booth box" when heading to community Linux shows. It certainly would not hurt.

The future

The colord daemon and GCM session manager provide the framework on which future applications can build end-to-end, "it just works" color management for the Linux desktop environment. That future is a big step up from the recent past, where each color-aware application needed to pester the user individually for a collection of profile settings, but it is still not color nirvana. For that one needs to look ahead to full-screen color management.

Hughes outlined the situation in his interview at Libre Graphics World. A full-screen color managed system would need a color-aware compositing manager, but would also allow applications to mark specific regions of the screen to "opt out" from the transformation — UI widgets are assumed to have sRGB pixels, for example, but a photograph would have a camera profile instead. But by pushing the transformation into the compositor, it becomes possible to offload the calculations to the GPU, potentially speeding up workflow dramatically.

The compiz-cms plug-in is an attempt to do this, although an incomplete one: because the applications are not able to mark specific regions with different transformation needs, the plug-in assumes all images are sRGB. For Compiz users, however, it is an intriguing glimpse at the possibilities.

Behrmann has developed a draft specification for communicating color regions, formerly called net-color but recently renamed X Color Management (currently in the draft stage for version 0.3). Hughes has concerns about the specification for use with colord, including its network transparency and its ease of implementation for application developers, but so far there is not a competing proposal. As he told Libre Graphics World, however, he is hoping to put together a plan for GNOME 3.4 that will incorporate colord support into Mutter, the GNOME compositing manager, but it is likely to involve changes to GTK+ and other parts of the stack as well.

Color-management is not something that can be completely automated, but desktop Linux is on track toward the next best thing, that the choice of sane defaults is automated. Colord effectively moves color-awareness out of the application space and down to the session level. For most people, on modern video hardware, an automatically-detected display profile will provide a "good enough" color balanced experience. The list of applications taking advantage of it is short, but growing, but the color geeks need not frown — as was the case before, those who are interested in hand-tweaking their color matching can still dig into the details and customize the experience.

Comments (25 posted)

Control over our hardware

By Jonathan Corbet
September 28, 2011
Security is a much-discussed subject at the moment; it has become clear that security needs to be improved throughout our community - and, indeed, in the industry as a whole. But anybody who has lived through the last decade does not need to be told that many actions carried out in the name of improving security are, at best, intended to give control to somebody else. At worst, they can end up reducing security at the same time. A couple of examples from the hardware world show how "security" often conflicts with freedom - and with itself.

UEFI secure boot

LWN first wrote about the UEFI "secure boot" feature last June. At that point, the potential for trouble was clear, but it was also mostly theoretical. More recently, it has been revealed that Microsoft intends to require the enabling of secure boot for any system running the client version of Windows 8. That makes the problem rather more immediate and concrete.

The secure boot technology is not without its value. If an attacker is able to corrupt the system's firmware, bootloader, or kernel image, no amount of good practice or security code will be able to remedy the situation; that system will be owned by the attacker. Secure boot makes such attacks much harder to carry out; the system will detect the corrupted code and refuse to run it. An automated teller machine should almost certainly have this kind of feature enabled, for example. Many LWN readers would likely find that the amount of time they have to put into family technical support would drop considerably if certain family members had their systems protected in this way.

Secure boot requires trust in whatever agency applies its signature to the code. A better name for the feature might be "restricted boot," since it restricts the system to booting code that has been signed by a trusted key. The idea is sound enough, except for one little problem: who decides which keys are trusted? Hardware vendors seeking Microsoft certification will create a secure boot implementation that trusts Microsoft's keys. They need not trust any others - not even from other hardware vendors selling Windows-compatible hardware.

Secure boot would not be a big problem if users were guaranteed the right to install their own keys or to disable the feature altogether. The owner of a specific computer may well want to restrict the system to booting kernels signed by Red Hat, SUSE, or OpenBSD. They might also want to say that Windows is not a trusted system - but only as long as the driver firmware needed to boot is signed by somebody other than Microsoft. The owners may want to build their own kernels signed with their own keys. Or they may decide that secure boot is a pain that they would rather do without. With this freedom, secure boot could be a beneficial feature indeed.

But nobody is guaranteeing that freedom. The ability to disable secure boot, at least, may come standard on traditional "desktop PC" systems, but the role of those systems in the market is declining. Microsoft very much wants to push Windows into tablets, handsets, refrigerators, and other new systems. Such machines do not have a stellar record with regard to enabling owner control even now; it does not seem likely that Microsoft's certification requirements will improve that situation. Just as things seemed to be getting better in that area, we may be about to see them get worse again.

That said, loss of control over our systems is not a foregone conclusion. Microsoft will have to be very careful about monopoly concerns in the areas where it is dominant. In the areas where Microsoft has failed to gain dominance, there is no guarantee that it ever will. And, even then, users have been clear enough about their desire for access to their own systems to gain the attention of some big handset manufacturers. Lockdown via secure boot is not a foregone conclusion; in fact, it looks like a battle we should be able to win. But we must certainly keep our eyes on the situation.

Trusted botnets

The pointer to this paper by Alan Dunn et al [PDF] came via Alan Cox. These investigators have figured out a way to use the trusted platform module (TPM) found in most systems to hide malware from anybody trying to investigate it. In essence, the TPM can be used to create a trusted botnet capable of resisting attempts to determine what the hostile code is actually doing.

The TPM provides a number of cryptographic functions along with a set of "platform configuration registers" (PCRs) that can be used to make guarantees about the state of the system. As long as the boot path is trusted, the TPM can sign a message containing PCR values proving that a specific set of software is running on the system. Fears that this "remote attestation" capability would be used to lock down systems from afar have not generally come true - so far. The TPM can also perform encryption and decryption of data, optionally tied to specific PCR values.

One other TPM-supported feature is "late launch," a mechanism by which code can be executed in an uninterruptable and unobservable manner. Late launch is used to enable mechanisms like Intel TXT; it is another way of ensuring that only "trusted" code can run on a system.

The attack described in the paper requires gaining control of the TPM, an act which may or may not be easy (even after the system itself has been compromised) depending on how the TPM is being used. Once that has been done, the compromised software will be able to attest to a remote controlling node that it is in full control of the system. That node can then send down encrypted code to be run in the late launch mode. This code is limited in what it can do - it cannot call into the host operating system for anything, for example - but it can make important policy decisions controlling how the malware will operate.

Understanding - and defeating - malware often depends on the ability to observe it in action and reverse engineer its decision making. If it proves impossible to observe malware in operation or to run it in a virtualized mode, that malware will be harder to stop. The attack is not easy, but experience has shown that the world does not lack for capable, motivated, and well-funded attackers who might just take up the challenge. That would not bode well for the future security of the net as a whole.

Needless to say, the protection of botnets seems counter to the objectives that led to the creation of the TPM in the first place. It has always been clear that technology imposed in the name of "security" has the potential to cost us control over our own systems. Now it seems that technology could even hand control over to overtly hostile organizations. That does not seem like a more secure situation, somehow.

Comments (18 posted)

Page editor: Jonathan Corbet

Security

SSSD: System Security Services Daemon

September 27, 2011

This article was contributed by Marko Myllynen

Centralized identity and authentication management offers several benefits over the ancient "solution" of spreading password files across all the systems of an organization. User information can be added, modified, and deleted in one central location and the change is effective everywhere instantly. Most commonly in today's environments user identity and authentication functions are carried out with LDAP and Kerberos-based solutions. SSSD, the System Security Services Daemon, is a fairly recent client-side all-in-one component which aims to bring together all the features previously available only in several separate components while adding new ones and providing increased flexibility and robustness.

Linux client-side configuration for centralized identity and authentication stores with caching and offline support has traditionally required configuration of several independent components; the end result and operational efficiency has not always been optimal. Offline support means that previously logged-in users' password hashes and identity information are stored locally so that all operations requiring authentication or UID to username mapping can be processed locally.

Let us consider the components in a typical case where LDAP and Kerberos are used for identity and authentication and there are mobile users who roam around with their laptops between different networks. First, nss_ldap has to be configured to retrieve the user identity information from LDAP. Then pam_krb5 needs to be configured to allow for user authentication. Alas, neither of these components supports caching or offline mode. So nscd needs to be configured to cache user information. And then finally pam_ccreds is needed for caching authentication credentials while offline. Most readers would probably agree that this scheme isn't the most efficient and robust solution so there may be some room for improvement.

What SSSD does

SSSD provides several features but the most important is to provide access to identity and authentication resources through a common framework that can provide caching and offline support to the system. For offline support SSSD keeps the credentials in a local cache. When a user logs in to an organization's network with their centrally managed account on their laptop, the user information and credentials are automatically stored in the SSSD cache.

Secondly, it supports queries to multiple servers. Thus, one can query a number of different user databases. Third, the daemon has its own NSS and PAM interfaces for use by client systems. From a performance point of view, this offers advantages. Instead of needing to set up a connection for each and every application that queries the NSS LDAP database, only a single socket from SSSD to the LDAP server is required. And all these features can be configured in a single configuration file.

For users, authentication and Kerberos tickets will then work in a straightforward way: when logging in while online (i.e., a connection to the central user account service can be made), a user enters their username and password and, once verified, a Kerberos ticket for the user is automatically acquired. A successful online login also refreshes the user's cache entry without any manual steps.

When logging in while offline, authentication is done against the cached information. When SSSD observes that the system is online again (e.g., after the user has established a VPN connection), it can acquire a Kerberos ticket for the user in the background without any additional effort by the user. Kerberos tickets can be also be automatically renewed based on the SSSD configuration. If an organization has implemented single sign-on (SSO) using Kerberos then SSSD helps to provide very smooth but secure user experience.

In practical terms, SSSD has one central configuration file, /etc/sssd/sssd.conf, which contains all the configuration options needed for one or several domains, possibly with different retention policies for each domain. NSS and PAM are configured to use the SSSD modules, libnss_sss.so and pam_sss.so, respectively, and the sssd service needs to be enabled. Distributions like Fedora and RHEL have also integrated SSSD as part of their authconfig tool used to configure user information sources removing the need for manually editing NSS or PAM configuration files (also providing basic configuration for sssd.conf).

It should be noted that, in addition to sssd.conf, /etc/krb5.conf needs to be configured when using Kerberos for authentication. That is also required for applications and utilities using the Kerberos libraries directly. The manual page sssd.conf(5) provides a comprehensive overview of the available configuration options and Fedora SSSD Guide offers a complete walk-through for setting up SSSD.

In addition to identity and authentication methods like LDAP and Kerberos, SSSD also includes support for netgroups and proxied authentication (for example to be used with NIS, since a native NIS backend is not yet available, although it is in the roadmap). These might be helpful features for organizations during a transition when moving from NIS to LDAP/Kerberos. Another interesting feature is host-based access control (HBAC) using FreeIPA. HBAC rules can be used to control which users or groups can access a specific host.

Past and future

SSSD can trace its origins to the FreeIPA project. The SSSD project, originally codenamed "Bluebox" for reasons lost to history, was envisioned as the FreeIPA's primary client component. As SSSD began to take shape, it was realized that many of the enhancements that were being developed to support FreeIPA would also be valuable for users of other LDAP and Kerberos environments. Thus the long-term vision for SSSD was revised and it became a project in its own right, related to FreeIPA, but distinct. Since its introduction in Fedora 11, SSSD's user and developer community has grown rapidly. It is now available for all major distributions (Fedora, Ubuntu, RHEL, openSUSE, and others) and there are already some large enterprises which have already deployed it globally as part of their Linux installations.

Several notable new features are in the roadmap. Work is going on to use sudo's plugin interface in SSSD to make it easier to maintain centralized sudo rules that also function while offline. Another planned addition is automounter integration which would allow SSSD to retrieve LDAP served automount maps for autofs. Enhanced Active Directory integration and D-Bus based interfaces for extended user information and data are also coming. There are other interesting features planned for SSSD — additional suggestions and participation from the community is warmly welcomed.

The use of the SSSD offers many benefits, especially for administrators and mobile users. Instead of having multiple accounts, users can simply use a single account. Kerberos tickets can be automatically acquired and renewed, which makes the use of "kerberized" services seamless but secure. Offline mode can also be useful in data centers to help bridge the gap caused by a temporary failure of the LDAP or Kerberos servers. Compared with older solutions, SSSD offers far more flexible management and simplified administration for client-side identity and authentication needs.

Comments (13 posted)

Brief items

Quote of the week

So, it's no wonder that hackers can just plug something new in and nobody notices. As long as it doesn't infect five million residential banking customers then nobody is going have a description of the suspect. That is the reality of hacking today, and it has nothing to do with advanced persistent threat. It has to do with the enterprise and the complete LACK of control you have over the endpoint. When security is limited to the network perimeter, you are not in control. Oh, and what a breath of fresh air the mobile device is. A new pile of software, mostly social media, that is directly connected to thousands of strangers that are not your employees, communicating in real-time with processes running within your defensive wall. In effect, you now have thousands of potential multi-homed routers to 3G-space from your network that don't belong to you.
-- Greg Hoglund

Comments (5 posted)

Garrett: Supporting UEFI secure boot on Linux: the details

Matthew Garrett continues looking into the UEFI secure boot feature. "Summary: We don't really support secure boot right now, but that's ok because you can't buy any hardware that supports it yet. Adding support is probably about a week's worth of effort at most."

Comments (7 posted)

Garrett: UEFI secure booting (part 2)

Here's a second installment from Matthew Garrett on the UEFI secure boot feature. "Microsoft have responded to suggestions that Windows 8 may make it difficult to boot alternative operating systems. What's interesting is that at no point do they contradict anything I've said. As things stand, Windows 8 certified systems will make it either more difficult or impossible to install alternative operating systems. But let's have some more background."

Comments (61 posted)

MySQL.com Hacked to Serve Malware (PC World)

PC World reports that the MySQL.com site has been compromised. "Hackers had installed JavaScript code that threw a variety of known browser attacks at visitors to the site, so those with out-of-date browsers or unpatched versions of Adobe Flash, Reader or Java on their Windows PCs could have been quietly infected with malicious software."

Comments (17 posted)

Mozilla and Tor on the TLS attack

Messages have appeared on the Mozilla security blog and the Tor project blog regarding the recently-disclosed attack against TLS 1.0. The summary is: neither the Firefox browser nor the Tor service is vulnerable. The Tor post has a lot of information about how the attack works and why they are not worried about it. Mozilla, instead, says that some Java plugins may be vulnerable and that Java should be disabled.

Comments (9 posted)

New vulnerabilities

apt: altered package installation

Package(s):apt CVE #(s):
Created:September 23, 2011 Updated:September 29, 2011
Description: From the Ubuntu advisory:

It was discovered that the apt-key utility incorrectly verified GPG keys when downloaded via the net-update option. If a remote attacker were able to perform a man-in-the-middle attack, this flaw could potentially be used to install altered packages. This update corrects the issue by disabling the net-update option completely. A future update will re-enable the option with corrected verification.

Alerts:
Ubuntu USN-1215-1 2011-09-22

Comments (1 posted)

cherokee: multiple vulnerabilities

Package(s):cherokee CVE #(s):CVE-2011-2190 CVE-2011-2191
Created:September 26, 2011 Updated:November 25, 2011
Description: The Cherokee server admin configuration web interface is vulnerable to CSRF. If an admin is logged into the Cherokee admin interface and visits a site which runs a malicious script, Cherokee can be reconfigured to execute arbitrary commands. It is also vulnerable to use the CSRF to produce a persistent XSS. (CVE-2011-2091)

Cherokee seeds srand with a combination of the time and the PID of the admin process, after which rand() is called to generate a random password -- this is unsafe and allows for fairly easy local password guessing by a local user. (CVE-2011-2090)

Alerts:
Fedora FEDORA-2011-14660 2011-10-20
Fedora FEDORA-2011-14634 2011-10-20
Fedora FEDORA-2011-14622 2011-10-20
Fedora FEDORA-2011-12687 2011-09-14
Fedora FEDORA-2011-12698 2011-09-14

Comments (none posted)

flash-player: multiple vulnerabilities

Package(s):Flash-Player CVE #(s):CVE-2011-2426 CVE-2011-2427 CVE-2011-2428 CVE-2011-2429 CVE-2011-2430 CVE-2011-2444
Created:September 23, 2011 Updated:November 8, 2011
Description: From the openSUSE advisory:

This update resolves a universal cross-site scripting issue that could be used to take actions on a user's behalf on any website or webmail provider if the user visits a malicious website (CVE-2011-2444).

Note: There are reports that this issue is being exploited in the wild in active targeted attacks designed to trick the user into clicking on a malicious link delivered in an email message.

This update resolves an AVM stack overflow issue that may allow for remote code execution. (CVE-2011-2426).

This update resolves an AVM stack overflow issue that may lead to denial of service and code execution. (CVE-2011-2427).

This update resolves a logic error issue which causes a browser crash and may lead to code execution. (CVE-2011- 2428).

This update resolves a Flash Player security control bypass which could allow information disclosure. (CVE-2011-2429).

This update resolves a streaming media logic error vulnerability which could lead to code execution. (CVE-2011-2430).

Alerts:
Red Hat RHSA-2011:1434-01 2011-11-08
Gentoo 201110-11 2011-10-13
Red Hat RHSA-2011:1333-01 2011-09-22
SUSE SUSE-SU-2011:1063-1 2011-09-23
openSUSE openSUSE-SU-2011:1060-1 2011-09-23

Comments (none posted)

foomatic: insecure temporary files

Package(s):foomatic CVE #(s):CVE-2011-2924 CVE-2011-2923
Created:September 26, 2011 Updated:September 27, 2011
Description: From the Red Hat bugzilla

It was found that foomatic-rip filter used insecurely created temporary file for storage of PostScript data by rendering the data, intended to be sent to the PostScript filter, when the debug mode was enabled. A local attacker could use this flaw to conduct symlink attacks (overwrite arbitrary file accessible with the privileges of the user running the foomatic-rip universal print filter).

Alerts:
Fedora FEDORA-2011-11205 2011-08-19
Fedora FEDORA-2011-11196 2011-08-19

Comments (none posted)

NetworkManager: privilege escalation

Package(s):NetworkManager CVE #(s):CVE-2011-3364
Created:September 27, 2011 Updated:November 14, 2011
Description: From the Red Hat advisory:

An input sanitization flaw was found in the way the ifcfg-rh NetworkManager plug-in escaped network connection names containing special characters. If PolicyKit was configured to allow local, unprivileged users to create and save new network connections, they could create a connection with a specially-crafted name, leading to the escalation of their privileges. Note: By default, PolicyKit prevents unprivileged users from creating and saving network connections.

Alerts:
Mandriva MDVSA-2011:171 2011-11-11
Fedora FEDORA-2011-13401 2011-09-27
Fedora FEDORA-2011-13388 2011-09-27
Scientific Linux SL-Netw-20110926 2011-09-26
Red Hat RHSA-2011:1338-01 2011-09-26

Comments (none posted)

pango: arbitrary code execution

Package(s):evolution28-pango pango qt CVE #(s):CVE-2011-3193
Created:September 23, 2011 Updated:September 23, 2011
Description: From the Red Hat advisory:

A buffer overflow flaw was found in HarfBuzz, an OpenType text shaping engine used in Pango. If a user loaded a specially-crafted font file with an application that uses Pango, it could cause the application to crash or, possibly, execute arbitrary code with the privileges of the user running the application.

Alerts:
openSUSE openSUSE-SU-2011:1120-1 2011-10-12
openSUSE openSUSE-SU-2011:1119-1 2011-10-12
Red Hat RHSA-2011:1326-01 2011-09-21
CentOS CESA-2011:1324 2011-09-22
CentOS CESA-2011:1326 2011-09-22
Scientific Linux SL-qt-20110921 2011-09-21
Scientific Linux SL-qt4-20110921 2011-09-21
Scientific Linux SL-evol-20110921 2011-09-21
Scientific Linux SL-pang-20110921 2011-09-21
Scientific Linux SL-frys-20110921 2011-09-21
Red Hat RHSA-2011:1323-01 2011-09-21
Red Hat RHSA-2011:1324-01 2011-09-21
Red Hat RHSA-2011:1327-01 2011-09-21
CentOS CESA-2011:1327 2011-09-22
CentOS CESA-2011:1325 2011-09-22
Red Hat RHSA-2011:1325-01 2011-09-21
Ubuntu USN-1504-1 2012-07-11

Comments (none posted)

qt: code execution

Package(s):qt CVE #(s):CVE-2011-3194
Created:September 23, 2011 Updated:June 4, 2012
Description: A flow in how Qt handles grayscale image files could enable an attacker to force a crash or execute arbitrary code via a malicious image.
Alerts:
openSUSE openSUSE-SU-2011:1120-1 2011-10-12
openSUSE openSUSE-SU-2011:1119-1 2011-10-12
Fedora FEDORA-2011-12193 2011-09-06
Fedora FEDORA-2011-12145 2011-09-06
Scientific Linux SL-qt-20110921 2011-09-21
Red Hat RHSA-2011:1323-01 2011-09-21
Gentoo 201206-02 2012-06-03
Ubuntu USN-1504-1 2012-07-11

Comments (none posted)

quassel: denial of service

Package(s):quassel CVE #(s):CVE-2011-3354
Created:September 26, 2011 Updated:September 27, 2011
Description: From the Red Hat bugzilla:

CtcpParser::packedReply in src/core/ctcpparser.cpp in Quassel does not process certain CTCP requests correctly, allowing a remote attacker connected to the same IRC network as the victim to cause a Denial of Service condition by sending specially crafted CTCP requests.

Alerts:
Fedora FEDORA-2011-12580 2011-09-13
Fedora FEDORA-2011-12614 2011-09-13

Comments (none posted)

Page editor: Jonathan Corbet

Kernel development

Brief items

Kernel release status

The current development kernel is 3.1-rc8, released on September 27. "The diffstat is pretty tiny, with some coretemp and clock_ops patches standing out, along with a small perf-tool update and everything else being pretty much one- or few-liners. And not that many of those either." The actual 3.1 release may not happen yet for a week or so due to the kernel.org issues, but otherwise this kernel appears to be close to ready.

3.1-rc7 came out on September 21, several microseconds after the LWN weekly edition was published. Linus said:

It is becoming clear that I might as well not release the final 3.1 until after my upcoming vacation early October - otherwise the next merge window would just be total chaos. A merge window with kernel.org being off just really wouldn't work, and doing a release only to then have some chaotic merge window followed by travel seems crazy.

Among other things, that implies that the next merge window may overlap with the Kernel Summit, which could involve some craziness of its own.

Stable updates: no stable updates have been released in the last week.

Comments (none posted)

Quotes of the week

Since I've sent already a RFC about it, I am sending now a RFD. If you eager for meaning, this can then be a "Request for Doctors", since Peter [Zijlstra] is likely to have a heart attack now.
-- Glauber Costa

Here is an example of a PGA (Pin Grid Array) chip seen from underneath:

        A   B   C   D   E   F   G   H
      +---+
   8  | o | o   o   o   o   o   o   o
      |   |
   7  | o | o   o   o   o   o   o   o
      |   |
   6  | o | o   o   o   o   o   o   o
      +---+---+
   5  | o | o | o   o   o   o   o   o
      +---+---+               +---+
   4    o   o   o   o   o   o | o | o
                              |   |
   3    o   o   o   o   o   o | o | o
                              |   |
   2    o   o   o   o   o   o | o | o
      +-------+-------+-------+---+---+
   1  | o   o | o   o | o   o | o | o |
      +-------+-------+-------+---+---+

This is not tetris. The game to think of is chess.
-- Linus Walleij's pinmux pawns

We invested a year trying to be good Linux citizens, laying out our initial plans, following the rules, working transparently, folding in feedback, submitting hundreds of patches in plain sight of everyone and now folks are asking about our plan. Our plan is get the brcmsmac and brcmfmac into mainline and keep following that up with new features, new chips and continuing support.
-- Brett Rudley

Comments (1 posted)

A kernel.org status update

The developers working on putting kernel.org back together have sent out a brief status update, mostly about the management of git trees. "This new infrastructure will no longer have shell access to the git repositories; instead we will be running git using the gitolite web glue. Gitolite uses ssh keys to push into it, so we will start sending out new ssh credentials to the active developers who had kernel.org accounts before." Git trees should go back online in the near future; everything else will take longer.

Full Story (comments: 75)

Kernel development news

The forest on the move

By Jonathan Corbet
September 28, 2011
As of this writing, kernel.org remains offline, though it is to be hoped that access for git trees, at least, will be restored before too long. Linus's current plans seem to involve opening the merge window before mid-October; without a functioning kernel.org, that will not run anywhere near as smoothly as the community might like. Still, some things cannot be rushed, and it is important that kernel.org come back in a solid and secure mode.

Quite a few trees have found new homes in the mean time. Here is an updated version of the list of relocated trees:

ACPIhttps://github.com/lenb/linux.git
ALSAgit://github.com/tiwai/sound.git
ALSA drivergit://github.com/tiwai/alsa-driver-build.git
ALSA SOCgit://opensource.wolfsonmicro.com/linux-2.6-asoc.git
amd64 EDACgit://amd64.org/linux/bp.git
APMgit://twin.jikos.cz/jikos/apm
arm-socgit://git.linaro.org/people/arnd/arm-soc.git
DRMgit://people.freedesktop.org/~airlied/linux
fbdevhttps://github.com/schandinat/linux-2.6
HIDgit://twin.jikos.cz/jikos/hid
hwspinlockgit://github.com/ohadbc/hwspinlock-next.git
infiniband https://github.com/rolandd/infiniband
inputhttps://github.com/dtor/input
ipvsgit://github.com/horms/ipvs.git
kbuildhttp://repo.or.cz/w/linux-kbuild.git
kvmgit://github.com/avikivity/kvm.git
libatagit://github.com/jgarzik/libata-dev.git
linux-nextgit://github.com/sfrothwell/linux-next.git
mainlinegit://github.com/torvalds/linux.git
mmcgit://dev.laptop.org/users/cjb/mmc mmc-next
networkinggit://github.com/davem330/net
pmgit://github.com/rjwysocki/linux-pm.git
regmapgit://opensource.wolfsonmicro.com/regmap.git
SCSIgit://bedivere.hansenpartnership.com/git/scsi-rc-fixes-2.6.git
git://bedivere.hansenpartnership.com/git/scsi-misc-2.6.git
slabgit://github.com/penberg/linux.git
tipgit://tesla.tglx.de/git/linux-2.6-tip
tmemgit://oss.oracle.com/git/djm/tmem.git
trivialgit://twin.jikos.cz/jikos/trivial
utracegit://github.com/utrace/linux.git
v9fsgit://github.com/ericvh/linux.git
wirelessgit://git.infradead.org/users/linville/wireless.git
git://git.infradead.org/users/linville/wireless-next.git
git://git.infradead.org/users/linville/wireless-testing.git
xengit://oss.oracle.com/git/kwilk/xen.git

That is a substantial list of moved trees, but, as linux-next maintainer Stephen Rothwell noted on September 27, that leaves 89 trees which still only exist on kernel.org. Those trees will not have seen any updates since kernel.org went off the net. Some of them will certainly be trees that are currently idle or close to it; not every tree feeding into linux-next carries patches for every development cycle. But others presumably exist for a reason; if kernel.org does not come back soon, they will need to find a different home.

One significant tree that has not moved is the stable release tree; the last stable updates came out on August 29.

With luck, kernel.org will come back soon and the above list will become moot. But kernel.org, when it returns, may look somewhat different. It has already been announced that there will be no shell access to the machines hosting the git trees. There may be other security measures put into place as well, some possibly requiring changes in how developers operate. Making changes of that nature in the time left before the next merge window could be hard to do. The 3.2 development cycle, in other words, might be a bit more interesting and less smooth than usual.

Comments (7 posted)

A look at the 3.1 development cycle

By Jonathan Corbet
September 28, 2011
As of this writing, the final 3.1 release is probably about one week or so away. That is just a bit later than had been expected; it is, of course, a natural result of the extended outage at kernel.org. At a little past 3.1-rc7, though, this kernel is complete enough for our traditional look at what happened during the development cycle. At 8,465 non-merge changesets, the 3.1 cycle is one of the slowest of recent times, but we had participation from about the usual number of developers (1,136) representing over 180 companies. The kernel grew by just over 125,000 lines this time around.

The most active developers in the 3.1 cycle were:

Most active 3.1 developers
By changesets
Takashi Iwai1401.7%
Mark Brown1371.6%
Mauro Carvalho Chehab1271.5%
Roland Vossen1081.3%
Russell King1061.3%
Al Viro1051.2%
Arend van Spriel1051.2%
Joe Perches931.1%
Rafał Miłecki871.0%
Alan Cox851.0%
Axel Lin800.9%
Christoph Hellwig780.9%
Jon Medhurst750.9%
Ben Skeggs680.8%
Neil Brown680.8%
Wey-Yi Guy660.8%
Kuninori Morimoto650.8%
David S. Miller630.7%
Shawn Guo610.7%
Jonathan Cameron590.7%
By changed lines
Greg Kroah-Hartman12151214.8%
Ralph Metzler260433.2%
Takashi Iwai249193.0%
Vladislav Zolotarov241092.9%
Nicholas Bellinger228252.8%
Roland Vossen204722.5%
Alan Cox204292.5%
Oliver Endriss194722.4%
matt mooney168042.0%
Krishna Gudipati159201.9%
Arend van Spriel156591.9%
Chaoming Li153191.9%
Dominik Brodowski152511.9%
Mauro Carvalho Chehab129741.6%
Jonas Bonn111121.4%
Mark Brown108201.3%
Kamil Debski93111.1%
Andy Grover67530.8%
Yaniv Rosner65260.8%
Joe Perches65020.8%

Media drivers would appear to dominate the listings on the "by changesets" side. Takashi Iwai continues to be incredibly productive in the area of audio drivers; Mark Brown, too, works mostly in the audio area. Mauro Carvalho Chehab is the Video4Linux2 maintainer; all of his patches fall within that tree this time around. Roland Vossen, instead, contributed a large number of changes to the Broadcom wireless network driver. Russell King not only serves as the top-level ARM maintainer; he also made a number of changes in that tree this time.

Greg Kroah-Hartman has, once again, been the top changer of lines in the kernel. Once again, the bulk of his work is in the staging tree; this time, though, he got there by deleting a number of drivers that either were not going to make it into the mainline or were on their way out. Ralph Metzler only contributed five patches, but three of them added new drivers to the Video4Linux2 tree. Takashi Iwai shows at the top of both columns for his sound driver work, Vladislav Zolotarov contributed a single patch with a bunch of new Broadcom firmware, and Nicholas Bellinger continues to enhance the SCSI target code.

Of the 182 employers identified as contributing to the 3.1 kernel, the most active were:

Most active 3.0 employers
By changesets
(None)111113.1%
Red Hat88210.4%
(Unknown)7498.8%
Intel6167.3%
Broadcom4285.1%
Novell3804.5%
IBM3013.6%
Texas Instruments2763.3%
(Consultant)2232.6%
Freescale1822.2%
Linaro1702.0%
Samsung1621.9%
Google1501.8%
Wolfson Microelectronics1421.7%
Fujitsu1311.5%
Renesas Electronics1001.2%
Oracle821.0%
MiTAC800.9%
Nokia790.9%
(Academia)730.9%
By lines changed
Novell16258319.8%
(None)9011911.0%
Broadcom768109.4%
Red Hat582627.1%
Intel435055.3%
(Unknown)271093.3%
Metzler Brothers Systementwicklung GbR236812.9%
Samsung232382.8%
Rising Tide Systems230902.8%
IBM222312.7%
Texas Instruments211302.6%
Freescale172702.1%
Brocade165872.0%
Realsil Microelectronics158681.9%
Wolfson Microelectronics140041.7%
(Consultant)137101.7%
South Pole AB120871.5%
Linaro111291.4%
Oracle93901.1%
Nokia74500.9%

Broadcom's extensive work to move its wireless driver out of staging caused it to move to a higher than usual position on both lists. Also notable is the continued slow climb by companies like Texas Instruments and Samsung; Nokia, instead, appears to be about to fall out of the top 20. The handling of Linaro deserves an explanation: contributions by Linaro assignees is normally credited back to their home companies. Nonetheless, Linaro makes an appearance on its own here as the result of the work of an increasing number of engineers employed by the organization itself.

Finally, here is a plot showing the number of changesets merged for each stabilization release (those after -rc1) for the last few development cycles:

[chart]

The dark blue line represents the 3.1 development cycle; as might be expected, the number of changesets merged drops significantly after 3.1-rc4, which is when the kernel.org outage started. Both 3.1-rc5 and 3.1-rc6 were smaller than usual releases, but 3.1-rc7 has made up for some of the slowdown. It would appear that the subsystem maintainers affected by the outage have mostly managed to find new places to host their trees. The kernel development show manages to go on, even with the loss of its primary repository hosting site.

Comments (none posted)

A new approach to opportunistic suspend

By Jonathan Corbet
September 27, 2011
"Opportunistic suspend" is the power management technique used by Android devices. Rather than trying to put the various system components into a low-power state, opportunistic suspend works by simply suspending the entire device whenever it is determined that nothing interesting is going on. Managing power consumption in this way is controversial, but the real problem has to do with the determination that it is a good time to suspend. Android's mechanism for controlling opportunistic suspend has been called "wakelocks" or "suspend blockers"; either way, it has had a bumpy ride whenever attempts have been made to merge it into the mainline. John Stultz has just proposed an alternative to suspend blockers that is guaranteed an equally bumpy ride, but it is interesting to look at regardless.

Suspend blockers are a way for either the kernel or user space to tell the system that it is not a good time to suspend; the use of suspend blockers from user space is a privileged operation. To work properly, suspend blockers must be supported by any device that can wake up the system. Drivers for such devices will, when a wakeup event occurs, acquire a suspend blocker and wake any user-space process waiting on the event; once that process reads the event, the suspend blocker will be released. The key is that said user space process, if it is sufficiently privileged, can acquire a suspend blocker of its own before reading the event that woke it up. The overlap between the acquisition of the user-space blocker and the release of the kernel-space blocker allows for reliable system wakeups without the risk of suspending before a wakeup event has been processed.

One of the things John didn't like about this mechanism was the implicit suspend blocker API between user space and wakeup-capable devices. So he has come up with something a bit different, even if the core idea is quite similar.

The whole point of suspend blockers is to allow "important" processes to keep the device awake even if it would otherwise choose to suspend itself. So, John asked, why not just mark the important processes as such? His patch adds a new scheduler option:

    sched_setscheduler(0, SCHED_STAYAWAKE, &param);

Any time that a process has been marked in this way, the kernel simply will not suspend the system. That is true even if the given process blocks; otherwise, a disk I/O operation or page fault would be enough to put the system into an untimely sleep.

Of course, life is not quite so simple; there are times when it is desirable to suspend the system even with "important" processes on it. One of those is whenever the important process blocks on a device that is capable of generating wakeup events. Enabling suspend at such times requires tweaking the relevant drivers; in essence, a line like:

    sched_deboost_task_active_count(current);

must be added to remove the blocking process's "important" status just before putting it to sleep. When that device wakes the blocked process, its special status will be returned to it.

The only remaining problem is, once again, keeping the system from re-suspending before the important process gets its status back. That is handled by placing calls to __pm_stay_awake() and __pm_relax() around the code that wakes blocked processes. John also had to change the suspend code to make __pm_stay_awake() a bit less advisory than it is in current kernels. With that in place, the device will not suspend before any important processes have had the chance to reclaim their status.

As of this writing, the only feedback on the patch set has come from scheduler maintainer Peter Zijlstra. Suffice to say he didn't like it. According to Peter, opportunistic suspend is an attempt to paper over a problem that should be solved in user space; unimportant processes, he says, simply should not be running in the first place. That view, in turn, is unlikely to be popular in the Android camp. So, even though John's approach simplifies the wakelock idea, it does not seem likely to put an end to the debate over that approach to power management.

Comments (21 posted)

Patches and updates

Kernel trees

Core kernel code

Development tools

Device drivers

Documentation

Filesystems and block I/O

Memory management

Architecture-specific

Miscellaneous

Page editor: Jonathan Corbet

Distributions

CentOS and updates

September 28, 2011

This article was contributed by Joe 'Zonker' Brockmeier.

Many users and organizations have turned to CentOS as a replacement for Red Hat Enterprise Linux (RHEL). While the quality of the CentOS distribution as a RHEL substitute seems unquestioned, the speed of releases and updates is another matter entirely. The project is taking some steps to address this with continuous release repositories, but it's not entirely clear yet how those will work out.

The continuous release (CRs) repositories are relatively new to CentOS. The CRs include RPMs that will be included in the next CentOS point release. For instance, a repository for 5.6 will contain the RPMs for 5.7 until 5.7 is released. The CRs have to be added manually, they're not added by default — even though CentOS project leader Karanbir Singh strongly recommends using the CRs for security and bugfix releases.

Users will want to exercise caution, though. Though CRs are the sole option to users wanting updates before ISOs are released, the CR description warns that CR packages have been "less comprehensively reviewed" at the stage when they enter the CR repository.

To get CRs, admins will need to install the "centos-release-cr" package. Announcements about the updates that land in the CRs are sent to a separate mailing list. While users are waiting for the next CentOS release, updates go into the CR repository. When the next release is available, the repository is "emptied" and starts receiving updates for the next release.

CentOS released the CR repository for 5.6 on August 15, with a note from Singh saying "we hope to have the 5.7 Release ready in the next 7 to 10 days." The 5.7 release was actually announced on September 13, just under two months after RHEL 5.7 was released. The CR for 6.0 was promised "within the next 48 hours" in the release announcement for 6.0 by Singh. That was on July 10, when CentOS 6.0 was released eight months after RHEL 6.0. But CentOS 6.0 CR was finally announced on September 27, well more than two months after the 48-hour promise.

The delay and apparent absence of updates has been of concern for many users of CentOS. Consider, for instance, the update to fix the recent DoS for Apache. The advisory was released on August 24, and Red Hat issued an update on August 31. If you look on the CentOS update list, it doesn't appear that any update was released for CentOS 5.x or 6.x. However, when asked on the CentOS discussion list, Singh replied that it was already pushed and should be on the mirrors - in the continuous release repository, where few users had seen it.

Looking over the CentOS users list, it appears the concept and existence of CRs has not made its way to quite a few CentOS users. Even after the CR repositories for 5.x were announced, plenty of users were still asking about updates for that release on the CentOS list. Note that few CentOS users ever actually visit the lists. Many users get CentOS from hosting providers, or just hear that it's a good RHEL replacement and go on their way. They don't get deeply involved in the community and sign up for mailing lists, so it's not surprising that many users fail to notice a new and not well-advertised feature.

In other words, while there is no way to really know what percentage of CentOS users have taken the extra step to use the CR repository, one has to assume that it is quite low.

Meanwhile, if you're thinking of complaining to the CentOS list about the speed of updates and releases, be forewarned that complaints will likely be met with advice to purchase a RHEL subscription. Indeed, that is one option that users have if they're dissatisfied with CentOS. While the CR repository looks to be a better solution than simply waiting for point releases to get updates, there's still no promise as to how long it will take for updates to reach CentOS users - unsurprising, since those users have not paid for any such promises. Some of the updates have been almost immediate, such as the nspr update released one day after the upstream release. Others, such as this RHEL Qt update from September 21, have not yet been seen in CentOS as of this writing one week later.

Users might also consider Scientific Linux or another RHEL clone, if they can't afford or do not wish to pay subscription fees for RHEL. While Scientific Linux is not as committed to being an exact clone of RHEL, it comes very close. And the project provides a steady stream of updates that follow RHEL, seemingly in a more timely manner.

Having the continuous release repositories is a positive step for CentOS, but it still seems to fall short of providing the kind of timely updates that many production users are likely to want. Providing timely security updates is hard - even, seemingly, when another company is doing the work of actually fixing the code involved. Users who are concerned about updates will want to consider what the CentOS community appears to be able to do and come to their own conclusions as to whether the addition of CR improves things enough to meet their needs.

Comments (3 posted)

Brief items

Distribution quote of the week

For me to be elected to the CC would be another way for me to help the Ubuntu Community, but also another way to give back what I already believe in, working in the Ubuntu community promoting Ubuntu and helping the community grow is what I do truly want to do and I'm good at it. I'm good at getting things done, organising and getting things in motion, sometimes through no fault of anyone, things can sometimes fall on the long finger, I'm cattle herder and I tend to push things along and if I was fortunate to be elected, the cattle prod would be used at times to push things along that are brought to our attention.
-- Laura Czajkowski (runs for Ubuntu Community Council)

Comments (none posted)

CentOS 6.0 continuous release available

The CentOS project has announced the availability of the continuous release repository for the 6.0 release. That means that 6.0 users, who have been without security updates since July, can finally get "most of the updates" without waiting for 6.1 to come out. See the CentOS CR page for details.

Full Story (comments: none)

Ubuntu 11.10 Beta 2 (Oneiric Ocelot) Released.

The Ubuntu team has announced the release of Ubuntu 11.10 Beta 2. There are several new features in the release, including a new set of community supported ARM architecture images.

Full Story (comments: none)

Distribution News

Debian GNU/Linux

Bits from dpkg developers - dpkg 1.16.1

The Debian dpkg developers have released dpkg 1.16.1 to unstable. "It comes with several disruptive changes that you need to be aware of. Please read carefully. This mail also includes a list of features and important changes since our last announcement for dpkg 1.15.7."

Full Story (comments: none)

delegation for the Debian NM Front Desk

Stefano Zacchiroli has announced that Jan Hauke Rahm has joined the New Maintainer Front Desk team. "As a reminder for those of you who might be lost in the gory details, the NM front desk is the team that runs the NM process and helps DAM in keeping it smooth."

Full Story (comments: none)

Newsletters and articles of interest

Distribution newsletters

Comments (2 posted)

Page editor: Rebecca Sobol

Development

An introduction to creating GCC plugins

September 27, 2011

This article was contributed by Matt Davis

The free and open source community is largely based on extensibility, sharing, and modularity, so projects will often provide an API that allows users to add functionality. One way to accomplish that is via plugins to the base project, which allows a user to customize the project to their needs and easily share the result with others who might also see utility in such a modification. Such a framework was recently implemented in GCC.

As of version 4.5 of GCC, a user can create a plugin that provides extra features to the compiler, which they can further pass around as a shareable module. GCC plugins provide developers with a rich subset of the GCC API to allow them to extend GCC as they see fit. Whether it is writing an additional optimization pass, transforming code, or analyzing information, plugins can be quite useful.

In this article we will learn how to develop a GCC plugin by creating one that can be used for spell checking read-only strings in an executable. What is the reason for doing so, one might ask? Well, it's a lesson on plugins, and this example provides a nice way to investigate this aspect of GCC.

Creating a plugin

A plugin is just a shared object file, following an API defined by GCC. To get started cooking up a plugin we will need to obtain a version of GCC, 4.5 or later. After your GCC is built, you are ready to get your hack on. Create a development directory "mkdir myplugin" and "cd myplugin" From there we will create the source file which will be our plugin: myplugin.c.

Plugin preparation

The first step in creating a plugin is to fill out some of the structures that the plugin API provides. These allow GCC to properly call the plugin, provide the GCC user some "help" information, and verify that the plugin is able to run on the version of the compiler that is trying to use the plugin. Before I introduce the plugin API, take a peek at it for yourself, the easiest way to figure out where the API header is located is to run the GCC that you are targeting your plugin for:

    gcc -print-file-name=plugin   

The files in there are the GCC API accessible to your plugin. If, however, the command simply prints the word "plugin", that means those files are not installed on your system. Of interest right now is the boiler-plate stuff, located in gcc-plugin.h. The following structures are provided by the API, and their fields are documented in gcc-plugin.h.

  • struct plugin_name_args:
    • Contains information GCC deduces about the plugin that is being called.
    • We do not fill this structure out, rather GCC passes us an instance of it when our plugin's initialization routine is called. We can also get arguments for the plugin that were passed via the command line, such as: -fplugin-arg-myplugin-foo=bar. All plugin arguments are prefixed with the "basename" of the plugin, which is the name of the plugin shared object file that results after compilation but without the .so extension.

  • struct plugin_info:
    • Version and help string for your plugin, what gcc -v will display.
    • Must be registered upon initialization of your plugin
    • Optional

  • struct plugin_gcc_version:
    • Ensures that your plugin will operate on the appropriate version of GCC.
    • Gets passed as input to the plugin via initialization. We can use this to verify version information.
    • Optional

Now to get started. Using your favorite text editor, create a file called myplugin.c and include the headers for the basic GCC API.

    #include <gcc-plugin.h>  

The next thing we must define is a variable called plugin_is_GPL_compatible. When plugins are being loaded, the symbols in the resulting object file are examined, and before the plugin will actually be usable, GCC makes sure that there is a symbol called plugin_is_GPL_compatible. If this symbol exists, then your plugin is deemed to have the proper license.

    int plugin_is_GPL_compatible = 1;  

Next, let's define some metadata about the plugin; that is done by instantiating an instance of struct plugin_info in case the user asks for help (via gcc -v and/or gcc -v --help) with the plugin loaded. This is not required but can be helpful. Also, to make this effective, during initialization GCC must be handed this structure:

    static struct plugin_info myplugin_info =
    {
        .version = "42",
        .help = "Not yet...",
    };

Next, we will define an instance of plugin_gcc_version so that, during initialization, we can verify that our plugin and GCC can dance together nicely.

    static struct plugin_gcc_version myplugin_ver =
    {
        .basever = "4.6",
    };

Note that every field of this structure (basever, datestamp, devphase, revision, and configuration_arguments), all of which are strings, must match that of the version of GCC you are using when you let GCC determine if the version matches, e.g. via a call at initialization to plugin_default_version_check(). You can use your own version check method instead, which is ideal, as I doubt that your configuration options would exactly match those of your plugin's users. In short, do your own version checking unless you are bundling your plugin as part of a GCC release where the configuration options and datestamps, etc. will match.

If you are curious, the 'plugin-version.h' has the data for the basever, datestamp, devphase, revision, used when you built GCC (or when your distribution package maintainer built it). For our example, we will just validate against the base version string of GCC and will handle the version check ourselves. For our purposes we only care about any GCC version 4.6 and are ignoring the micro version number, e.g. the '0' in 4.6.0.

Plugin initialization

By now we have provided a bunch of info about the plugin, but there is one more piece of information that is required by GCC: the routine that actually initializes the plugin and registers callbacks to occur during the compilation of a program. This is another symbol the plugin framework will pluck out of the file, so it must be named plugin_init(). Our plugin is going to operate as a GIMPLE pass, allowing us to analyze (and transform if we wish) GCC's middle-end representation of the program being compiled. There are a couple of other options available. IPA_PASS is an interprocedural pass where the developer parses the control flow graph of the program and optimizes code that is dependent across functions, such as function inlining. The RTL_PASS is the last pass the compiler performs. This type of pass operates on a RTL (register transfer layout) representation of the program. RTL is what maps the gcc GIMPLE code into the register of a machine (machine description).

In order to do that, we need to define the proper struct and pass it information to the plugin framework, which will then call our callback handler once for each function in the source file. There are a number of other things that can be accomplished via plugins. These things are called "events" and are enumerated values in the plugin.def file. The .def files in GCC represent enumerations and are translated to source code when GCC is being compiled. These are then included into GCC's source for plugin.c:

    #include "plugin.def"

This makes using ctags kind of tricky, because it does not inspect .def files, nor does it know how to parse them. On the other hand, cscope works well if tell it to look for .def files.

Below is the data structure we use when our plugin is asked to initialize itself.

    /* See tree-pass.h for a list and descriptions for the fields of this struct */
    static struct gimple_opt_pass myplugin_pass = 
    {
        .pass.type = GIMPLE_PASS,
        .pass.name = "myplugin", /* For use in the dump file */
    
        /* Predicate (boolean) function that gets executed before your pass.  If the
         * return value is 'true' your pass gets executed, otherwise, the pass is
         * skipped.
         */
        .pass.gate = myplugin_gate,  /* always returns true, see full code */
        .pass.execute = myplugin_exec, /* Your pass handler/callback */
    };

Please note that there are many more options we can specify for our pass, but to keep things simple, we are just going to have a basic pass with a gate and execution callback. myplugin_exec() is the function that is called back given the conditions specified in the optimization pass we define below. Here are the pieces for all three parts of the optimization pass (the source code for the full plugin can be found here):

Now that we have a structure defining how we want our pass to act, let's finally write the required plugin_init() function:

    /* Return 0 on success or error code on failure */
    int plugin_init(struct plugin_name_args   *info,  /* Argument information */
                    struct plugin_gcc_version *ver)   /* Version info of GCC  */
    {
        /* 
         * Used to tell the plugin-framework about where we want to be called in the
         * set of all passes.  This is located in tree-pass.h
         */
        struct register_pass_info pass;
        printf("Plugin initialized...\n");
        
        /*
	 * We could call: plugin_default_version_check() to validate our plugin, but
         * we will skip that.  Instead, as mentioned it can be more useful if we
         * validate the version information ourselves
         */
         if (strncmp(ver->basever, myplugin_ver.basever, strlen("4.6")))
           return -1; /* Incorrect version of GCC */
    
        /*
	 * Setup the info to register with GCC telling when we want to be called and
         * to what GCC should call, when it's time to be called.
         */
        pass.pass = &myplugin_pass.pass;
    
        /*
	 * Get called after GCC has produced the SSA representation of the program.
         * After the first SSA pass.
         */
        pass.reference_pass_name = "ssa";
        pass.ref_pass_instance_number = 1;
        pass.pos_op = PASS_POS_INSERT_AFTER;
    
        /* Tell GCC we want to be called after the first SSA pass */
        register_callback("myplugin", PLUGIN_PASS_MANAGER_SETUP, NULL, &pass);
    
        /*
	 * Tell GCC some information about us... just for use in --help and
         * --version
         */
        register_callback("myplugin", PLUGIN_INFO, NULL, &myplugin_info);
       
        /* Successful initialization */ 
        return 0;
    }  

The above ties everything together. The first thing we need our plugin to do is to visit each statement in the source code that is being compiled and identify the read-only data. As an SSA pass, the compiler will hand our plugin GIMPLE, GCC's intermediate language, a set of basic blocks per function. Since all frontends (C, C++, Go, Fortran, etc) produce GIMPLE, gcc can effectively optimize just the GIMPLE code, rendering all optimizers capable of working on any language that GCC can parse. Likewise, when a developer writes a pass for the GIMPLE gcc intermediate language, it becomes language agnostic and can be applied to any language GCC parses. Using a three-address code, GIMPLE represents each statement in the input language as a statement consisting of two operands and a result value. In the case of an assignment statement with an addition operator, we have something like:

    lhs = op1 + op2

Where lhs, op1, and op2 are the three address codes that make up the assignment statement.

Read-only identification

There might be an easier way of finding read-only data in a program, however our approach here allows one to understand how to traverse basic blocks and statements in the program. We are more concerned with learning than functionality for this tutorial.

When a function gets passed to our plugin we need to do something with it, mainly analyze it and identify read-only data. The following is our callback we registered previously myplugin_exec():

   
    static unsigned myplugin_exec(void)
    {
       unsigned i;
       const_tree str, op;
       basic_block bb;
       gimple stmt;
       gimple_stmt_iterator gsi;

       FOR_EACH_BB(bb)
         for (gsi=gsi_start_bb(bb); !gsi_end_p(gsi); gsi_next(&gsi))
         {
             stmt = gsi_stmt(gsi);
             for (i=0; i<gimple_num_ops(stmt); ++i)
               if ((op = gimple_op(stmt, i)) && (str = is_str_cst(op)))
                 spell_check(stmt, str);
         }

       return 0;
    }

FOR_EACH_BB operates on a global variable in GCC which represents the current function being processed, cfun. The gsi is a GIMPLE statement iterator. In short, this loop traverses each basic block in cfun and visits each statement in that function. We look at each statement in the basic block via the gsi interface. Finally we look at each operand that makes up the GIMPLE statement. The is_str_cst() is a predicate function that we will define below. This function determines if the operand we plucked from the statement represents a string constant. If it does we will spell check that string.

In GCC, every construct in the source code is essentially a tree. A tree node could represent constants, variables, functions, etc. Often these tree instances are wrapped multiple times. For instance the tree node might be encapsulated in an SSA_NAME instance for the SSA representation. Under that might be a POINTER_TYPE and under that an INTEGER_CST for a constant integer. Note that these node types are defined in tree.def. Helper functions in tree.h can help to identify and peel off these layers, such as with TREE_CODE() and TREE_OPERAND() respectively. Also, TREE_TYPE() is useful for peeling off the layers. The debug_* functions can help better understand this layering, particularly debug_tree(). The following routine is what we will start off with for identifying STRING_CST:

    static const_tree is_str_cst(const_tree node)
    {
       const_tree str = node;

       /* Filter out types we are ignoring */
       if (TREE_CODE(str) == VAR_DECL)
       {
           if (!(str = DECL_INITIAL(node))) /* nop expr  */
             return NULL_TREE;
           else if (TREE_CODE(str) == INTEGER_CST) /* Ignore single chars */
             return NULL_TREE;

           str = TREE_OPERAND(str, 0); /* addr expr */
       }
       else if (TREE_CODE(str) == ADDR_EXPR)
           str = TREE_OPERAND(str, 0);

       /* We only deal with readonly stuff */
       if (!TYPE_READONLY(str) && (TREE_CODE(str) != ARRAY_REF))
           return NULL_TREE;
      
       if (TREE_CODE(str) != STRING_CST) 
           str = TREE_OPERAND(str, 0);

       if (TREE_CODE(str) != STRING_CST)
           return NULL_TREE;
       else
           return str;
    }

As you can see, we detect the type of node to be processed. If we are initially presented with a declaration node (which one might get if the node were a parameter instance) we look at the declaration of it via DECL_INITIAL(). If we get an address, we peel off that variant and look at what it is an address expression of. If the node isn't read-only we assume that it's probably not a hard-coded string so we just ignore it. There is probably a better way of handling this, such as just placing the node in a loop around operand checks, but I'll leave other methods of peeling the types as an exercise for the reader.

Conclusion

Plugin passes are quite powerful, as can be seen above. I hope this brief jaunt down "pass" lane has been helpful. But before I leave you to your plugin hacking I want to give a few more tips that can aid learning the GCC internals. Use a debugger. If you built GCC and your plugin with debugging symbols, you can learn a lot by stepping through the code. When debugging via gdb, make sure you use the actual binary for compiling the language you want, for go the binary is gocc and for C you probably want to use xgcc instead of GCC. xgcc is located in the object directory where you built GCC, in the gcc subdirectory. Use that for debugging C related code. One other useful tip in learning the GCC internals is to actually trace the code that is used for printing and dumping data from the passes, such as debug_gimple_stmt(), debug_generic_stmt(), and debug_tree() these will help you see how GCC structures the objects because everything is a tree.

Comments (8 posted)

Brief items

Quotes of the week

The more I think about it, the more I think the cloud may portend the rise of a new kind of experience: parental computing. It will mean the end of personal computing, which itself evolved out of the vastly different computing paradigm that preceded it
-- Alexis Madrigal

I don't think it's right to demand unfinished work. We really want to give our work away, for free, and we always do. We are a community project, but like it or not, CM is also a brand. We have every right to hold off on releasing code and protecting pre-release builds until they have reached something that we'd consider respectable enough to call a release. It's not that we enjoy doing it, we just want to keep the quality high when our work is reused and remixed in other projects.
-- Steve "Cyanogen" Kondik

Comments (none posted)

Banshee 2.2 released

Version 2.2 of the Banshee music player is out. The headline feature appears to be integration with the eMusic store; they have also added support for a number of new devices. See the release notes for details.

Full Story (comments: 55)

New versions of Firefox are available

Mozilla has released Firefox 3.6.23 which fixes several security issues. The release notes contain more information. Version 7.0 is also available. Those release notes are here.

Full Story (comments: 6)

GNOME 3.2 released

The GNOME 3.2 release has been announced. "GNOME 3.2 is the first major update of the GNOME 3 platform. It builds on the foundations that we have laid with 3.0 and offers a much more complete experience. The exciting new features and improvements in this release include new contacts and documents applications, a new login screen, an on-screen keyboard, color management support, and many more." See the release notes for more information.

Full Story (comments: 76)

GTK+ 3.2.0

Version 3.2.0 of the GTK+ toolkit is out. New features include theming improvements, new Wayland and HTML5 backends, a better font selector, and more.

Full Story (comments: none)

Mozilla ponders long(er)-term support releases

The Mozilla project is currently pondering creating an occasional Firefox release with longer support. "Since moving to a faster release process, Mozilla understands that some organizations are facing challenges in deploying Mozilla products in a managed environment. The faster release cadence makes gives organizations a shorter period of time to certify and use new releases, and the lack of maintenance on older releases can expose organizations using them to security risks." The proposal for "extended support releases" (ESRs) envisions a 42-week support period, with 12-week overlaps between successive ESRs.

Full Story (comments: 23)

PacketFence 3.0 released

PacketFence is a network access control system; the 3.0 release has just been announced. "In a nutshell, we have a redesigned captive portal, complete guest management including self-registration of devices by email activation or SMS and pre-registered guest creation by administrators. Also added a new feature to allow PacketFence to secure network access on unmanageable (consumer) devices (so-called inline enforcement). Bandwidth tracking with RADIUS accounting, RedHat Enterprise Linux (RHEL) / CentOS 6 support and several usability improvements are in there as well. Finally we took the big three-point-ohh opportunity to fix several things that annoyed us but that were breaking changes." There is a screenshot tour available for the curious.

Full Story (comments: 2)

PulseAudio 1.0 released

The PulseAudio project has finally reached 1.0 - a milestone which, they say, doesn't actually mean anything. New features include a D-Bus control protocol, the ability to control the volume on capture streams, direct pass-through of compressed audio data to devices that can handle it, echo cancellation, and more. See the release notes for details and future plans.

Full Story (comments: 4)

PyTables 2.3 released

PyTables is "a library for managing hierarchical datasets and designed to efficiently cope with extremely large amounts of data with support for full 64-bit file addressing. PyTables runs on top of the HDF5 library and NumPy package for achieving maximum throughput and convenient use." The 2.3 release has just been announced; the headline change would appear to be the incorporation of PyTables Pro under a free license; that brings a lot of performance improvements and the OPSI indexing engine.

Full Story (comments: none)

Newsletters and articles

Development newsletters from the last week

Comments (none posted)

Richard Hughes on color management in Linux and GNOME (Libre Graphics World)

Libre Graphics World has posted a lengthy interview with Richard Hughes on color management in GNOME. "This is pretty much what I do at conferences - find a designer, calibrate the screen and watch their jaw drop to the floor when they realize that all their previously created artwork was wrong."

Comments (23 posted)

Poettering: systemd for Administrators, Part X

The tenth installment of Lennart Poettering's "systemd for Administrators" series is available. "Most services on Linux/Unix are singleton services: there's usually only one instance of Syslog, Postfix, or Apache running on a specific system at the same time. On the other hand some select services may run in multiple instances on the same host. For example, an Internet service like the Dovecot IMAP service could run in multiple instances on different IP ports or different local IP addresses. A more common example that exists on all installations is getty, the mini service that runs once for each TTY and presents a login prompt on it. On most systems this service is instantiated once for each of the first six virtual consoles tty1 to tty6. On some servers depending on administrator configuration or boot-time parameters an additional getty is instantiated for a serial or virtualizer console. Another common instantiated service in the systemd world is fsck, the file system checker that is instantiated once for each block device that needs to be checked. Finally, in systemd socket activated per-connection services (think classic inetd!) are also implemented via instantiated services: a new instance is created for each incoming connection. In this installment I hope to explain a bit how systemd implements instantiated services and how to take advantage of them as an administrator."

Comments (3 posted)

Poettering: systemd for Administrators, Part XI

Lennart Poettering has released the eleventh installment of the 'systemd for Administrators' series. The one looks at converting inetd services into systemd units. "One of the core feature of systemd (and Apple's launchd for the matter) is socket activation, a scheme pioneered by inetd, however back then with a different focus. Systemd-style socket activation focusses on local sockets (AF_UNIX), not so much Internet sockets (AF_INET), even though both are supported. And more importantly even, socket activation in systemd is not primarily about the on-demand aspect that was key in inetd, but more on increasing parallelization (socket activation allows starting clients and servers of the socket at the same time), simplicity (since the need to configure explicit dependencies between services is removed) and robustness (since services can be restarted or may crash without loss of connectivity of the socket). However, systemd can also activate services on-demand when connections are incoming, if configured that way."

Comments (26 posted)

Page editor: Jonathan Corbet

Announcements

Brief items

MeeGo + LiMo = Tizen

A new project called Tizen has announced its existence. It is essentially the amalgamation of the MeeGo and LiMo projects, directed by Samsung and Intel. "Tizen will support multiple device categories, such as smartphones, tablets, smart TVs, netbooks, and in-vehicle infotainment devices. The Linux Foundation will host the project, where Tizen development will be completely open and led by a technical steering team composed of Intel and Samsung." The first release is due in the first quarter of next year.

Comments (59 posted)

Articles of interest

FSFE: Fellowship Interview with Stefan Kangas

The Free Software Foundation Europe blog has an interview with Stefan Kangas. "Stefan Kangas is studying his third year of his bachelors degree in Computer Science at the University of Gothenburg. He is currently the president of the recently started Fripost: the free e-mail association."

Comments (none posted)

Upcoming Events

Linux Users' Group of Davis, October 17 meeting

The Linux Users' Group of Davis [California] (LUGOD) will be holding a meeting on October 17, 2011 with a presentation by Ariel Waldman on "Hacking Space Exploration and Science".

Full Story (comments: none)

Events: October 6, 2011 to December 5, 2011

The following event listing is taken from the LWN.net Calendar.

Date(s)EventLocation
October 4
October 9
PyCon DE Leipzig, Germany
October 6
October 9
EuroBSDCon 2011 , Netherlands
October 7
October 9
Linux Autumn 2011 Kielce, Poland
October 7
October 10
Open Source Week 2011 Malang, Indonesia
October 8 PHP North West Conference Manchester, UK
October 8 FLOSSUK / UKUUG's 2011 Unconference Manchester, UK
October 8
October 9
PyCon Ireland 2011 Dublin, Ireland
October 8
October 9
Pittsburgh Perl Workshop 2011 Pittsburgh, PA, USA
October 8
October 10
GNOME "Boston" Fall Summit 2011 Montreal, QC, Canada
October 9
October 11
Android Open San Francisco, CA, USA
October 11 PLUG Talk: Rusty Russell Perth, Australia
October 12
October 15
LibreOffice Conference Paris, France
October 14 Workshop Packaging BlankOn Jakarta , Indonesia
October 14
October 16
MediaWiki Hackathon New Orleans New Orleans, Louisiana, USA
October 15 Packaging Debian Class BlankOn Surabaya, Indonesia
October 17
October 18
PyCon Finland 2011 Turku, Finland
October 18
October 21
PostgreSQL Conference Europe Amsterdam, The Netherlands
October 19
October 21
13th German Perl Workshop Frankfurt/Main, Germany
October 19
October 21
Latinoware 2011 Foz do Iguaçu, Brazil
October 20
October 22
13th Real-Time Linux Workshop Prague, Czech Republic
October 21 PG-Day Denver 2011 Denver, CO, USA
October 21
October 23
PHPCon Poland 2011 Kielce, Poland
October 23
October 25
Kernel Summit Prague, Czech Republic
October 24
October 25
GitTogether 2011 Mountain View, CA, USA
October 24
October 25
GStreamer Conference 2011 Prague, Czech Republic
October 24
October 28
18th Annual Tcl/Tk Conference (Tcl'2011) Manassas, Virgina, USA
October 26
October 28
Embedded Linux Conference Europe Prague, Czech Republic
October 26
October 28
LinuxCon Europe 2011 Prague, Czech Republic
October 28
October 30
MiniDebConf Mangalore India Mangalore, India
October 29 buildroot + crosstool-NG Developers' Day Prague, Czech Republic
October 31
November 4
Ubuntu Developer Summit Orlando, FL, USA
October 31
November 4
Linux on ARM: Linaro Connect Q4.11 Orlando, FL, USA
November 1
November 3
oVirt Workshop and Initial Code Release San Jose, CA, USA
November 1
November 8
2011 Plone Conference San Francisco, CA, USA
November 4
November 6
Fedora Users and Developer's Conference : India 2011 Pune, India
November 4
November 6
Mozilla Festival -- Media, Freedom and the Web London, United Kingdom
November 5
November 6
Technical Dutch Open Source Event Eindhoven, The Netherlands
November 5
November 6
OpenFest 2011 Sofia, Bulgaria
November 7
November 11
ApacheCon NA 2011 Vancouver, Canada
November 8
November 12
Grace Hopper Celebration of Women in Computing Portland, Oregon, USA
November 10
November 12
Clojure/conj 2011 Raleigh, NC, USA
November 11
November 12
Zentyal Summit Zaragoza , Spain
November 11
November 13
Free Society Conference and Nordic Summit 2011 Gothenburg, Sweden
November 12 London Perl Workshop 2011 London, United-Kingdom
November 12 Emacsforum 2011 Copenhagen, Denmark
November 14
November 17
SC11 Seattle, WA, USA
November 14
November 18
Open Source Developers Conference 2011 Canberra, Australia
November 17
November 18
LinuxCon Brazil 2011 São Paulo, Brazil
November 18 LLVM Developers' Meeting San Jose, CA, USA
November 18
November 20
Foswiki Camp and General Assembly Geneva, Swizerland
November 19
November 20
MediaWiki India Hackathon 2011 - Mumbai Mumbai, India
November 20
November 22
Open Source India Days 2011 Bangalore, India
November 24 verinice.XP Berlin, Germany
November 28 Automotive Linux Summit 2011 Yokohama, Japan
December 2
December 4
Debian Hildesheim Bug Squashing Party Hildesheim, Germany
December 2
December 4
Open Hard- and Software Workshop Munich, Germany
December 4
December 7
SciPy.in 2011 Mumbai, India
December 4
December 9
LISA ’11: 25th Large Installation System Administration Conference Boston, MA, USA

If your event does not appear here, please tell us about it.

Page editor: Rebecca Sobol

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