LWN.net Weekly Edition for July 15, 2010
Free software in production use on Ben Franklin Day
The Journal Register Company (JRC) owns newspapers around the United States, and like many print media companies is looking to adapt its business and news-gathering models for the Internet era. On July 4th, 18 of JRC's papers published print and online editions using a "free" and "open" workflow, in homage to the Independence Day holiday. Dubbed the Ben Franklin Project, the effort combined crowdsourcing, interactive news gathering, and free software.
JRC's Vice President of Content Jon Cooper provided an overview of the processes used by the various papers, including letting citizens suggest story ideas and improvements, posting story budgets, incorporating interactive online content, and using social media tools to gather news, not just to publicize it. That dimension focused mostly on engaging the local community with the newsroom staff, in a sense opening the process of producing the news. Of more interest to LWN readers, perhaps, was the decision to only use a free toolchain to produce the final product.
Slashdot picked up a blog post from one of the papers, The Saratogian, which outlined the use of the desktop publishing tool Scribus, the SeaShore image editor (a Mac OS X raster editor based originally on GIMP code), WordPress, and Google Docs. The story submitter and several commenters seemed to come away from the post with the impression that the newspaper found the software not-ready-for-prime-time, latching on to a quote four paragraphs in that said: "The proprietary software is designed to be efficient, reliable and relatively fast for the task of producing a daily newspaper. The free substitutes, not so much.
"
Scribus and other free software applications
When you look at the reports of all of the participating papers and JRC itself, however, it is clear that the above comment is not to be taken too seriously. All eighteen participating papers published their Scribus-built editions on time, and with positive results.
To be sure, a few encountered trouble along the way. The Delaware County Times live-blogged page layout, noting at one point that the program was crashing whenever the editor attempted to import a particular image, and mentioning the time involved in finding specific fonts, but the staff ultimately finished the issue. The Saratogian noted that the most time-consuming process was reproducing the paper's page templates in Scribus. But the New Haven Register, Oneida Dispatch, the Daily Local News, the other papers, and JRC management reported that the experiment was a success.
The papers spent a month prior to Ben Franklin Day training
staff on Scribus, both with the official documentation and with third-party
online tutorials.
Editor Jack Kramer of the New Haven Register said that the staff
adapted to Scribus "pretty quickly
", but that, although the
documentation was important, what proved more important were the in-house
training and support groups that the paper formed, which worked together and "
perfected the program usage
".
Karl Sickafus of the Daily Local called Scribus "arguably, the single most valuable find of the Ben Franklin project
" and wrote that his staff even went so far as to write custom scripts to import content from the paper's database directly into Scribus. He then speculated that such a system could easily replace the proprietary ad tracking, advertising, and editorial systems JRC uses today.
Kramer and several of the other editors mentioned using both GIMP and
SeaShore for image editing, though Kramer noted that his photo editor was
not "totally satisfied
" with SeaShore. All of the
participating papers published their content to a mirror site running
Wordpress in addition to their regular web site. In an interesting
footnote, the Slashdot debate veered into an argument over the oft-cited
issue that the name "The Gimp" (though the project uses "GIMP" these days) is off-putting or offensive, and drives potential users away without even trying it. When asked whether anyone at the New Haven Register was bothered by the name, Kramer replied simply "not at all.
"
Google Docs and other missing pieces
Some of the papers (such as The Morning Sun) used Open Office for story writing, but Google Docs was widespread. Predictably, in the Slashdot story and in several of the comment threads on the individual newspaper sites, free software advocates took issue with the decision to use Google Docs in a "free software" experiment, noting accurately that the tool is not open source or free software.
Indeed, several of the papers blur the line between "free to use" and "software freedom," a mistake certainly not limited to this particular field. An anonymous New Haven Register staffer provided more background on that decision in a comment on the paper's blog, saying "We ordinarily write our stories in a content-management system that costs money for us to use, and its purpose is to manage content for the print edition only — not our website.
"
Because it was used to replace a content management system (CMS), presumably the critical feature of Google Docs was collaborative editing in this case, so the lack of it in the other open source tools led to Google Docs adoption. That includes WordPress, which the papers used to publish their online editions. Although multi-user editing is possible in WordPress, the newsrooms evidently found it lacking. The newsroom-oriented CMS Campsite may simply have been overlooked.
It is also interesting to note what other free-to-use proprietary applications were selected; this is real-world feedback that the open source community should take note of. Most of the papers used existing social networks like Facebook and Twitter to solicit feedback from the local community. Almost all used video, but chose proprietary video editing and hosting tools. Finally, though the papers used SeaShore to edit photographs, it appears that none used a free raw conversion tool — perhaps because, as SeaShore indicates, the photo staff is equipped with Mac OS X, for which the free raw converters do not provide regular builds.
News for tomorrow
Having read all of the available accounts of open source's performance on Ben Franklin Day (some papers have yet to publish results online), Scribus and the other applications seem to have performed well. What happens next is the challenge. Sickafus observed:
He advocates devoting financial resources that would be spent on proprietary content management and ad systems instead to adapting open source solutions. Reporter Ron Nurwisah recommends essentially the same thing, looking at the cost of dozens of licenses for Adobe products. Neither position would surprise long-time free software advocates; still, it is refreshing to witness an industry realize the potential of open source software.
JRC has kept its Ben Franklin Project WordPress site active since July 4th, posting discussions on where the company needs to go next, and exploring other open source applications. In addition, Cooper recently wrote to the Scribus mailing list to initiate a dialog with the development team about what the papers had learned. There is still no official announcement from any of the papers about the permanent addition of open source to their newsrooms. Based on the results so far, though, an announcement like that may not be all that far off.
[ Our thanks to Jay R. Ashworth for pointing us in the direction of this topic. ]A guide to successful FOSS conference presentations
We just wrapped up the Ohio LinuxFest call for presentations, so pitching presentations is on my mind. Regional, volunteer-run conferences are not only a good way for people without a travel budget to see some big names in open source, they're also a way for first-time or inexperienced speakers to hone their presentation skills. Regional conferences also provide an excellent forum to educate users about your favorite project or topic.
But competition for speaking slots can be fierce. Established conferences like SCALE, Ohio LinuxFest, and others receive many more proposals than available slots. For example, the 2010 call for presentations for Ohio LinuxFest received about 120 proposals for less than 30 speaking slots. Some of the talks for regional conferences will quickly go to experienced speakers who have presented at the show before and/or have established a name for themselves as a topic expert and competent presenter. But most presentation committees for community shows also try to select local talent who are new to presenting, and those slots will go to the speakers with the best proposals.
Pitching your Proposal
"Submit early and often" is a good rule of thumb. Speakers should develop at least two presentation ideas, and submit them as early as possible — certainly well before the deadline. It's usually a bad idea to wait until the last minute to submit a proposal. In some cases, the committee takes note of which talks come in early. Even if that isn't the case, waiting until right before the deadline usually means that the proposal you submit will not be of the same quality as a proposal developed over the space of a few days. Submitting multiple talks boosts your chances if the committee likes you as a speaker, but doesn't like one of your topics or has to choose between you and another speaker who submitted a similar topic.
Presentation titles should be descriptive, short, and ideally something that will grab the attention of the presentation committee. A title like "Improving Kernel Contributions" is good, but "Anatomy of a Failure" was likely to garner more attention.
No matter how good the presentation title, the abstract has to live up to it, provide the committee with enough information to understand what the talk is about, and convince them that you'll put in the preparation time. There's little confidence that a prospective speaker who submits a one-sentence proposal is going to put in the time necessary to deliver a really excellent talk. And that is the goal of any good presentation committee: filling the schedule with talks that are not merely adequate, but ones that are excellent.
An excellent abstract explains what the topic is, the scope of the talk, and what the audience will learn during the presentation. The last is particularly important. Many submissions merely describe the topic, but the best submissions explain what the audience will gain from attending the talk.
Most calls for presentations will also seek a biography. Writing a biography is often an unpleasant exercise, but it's the best opportunity to show the presentation committee that you are actually the right person to present a given topic. Or not. If two people submit an "Introduction to Fedora" presentation, one of them being Paul Frields, guess who's most likely to be awarded the slot? This is another reason to think hard about your topic, pitch more than one idea, and try to choose something unique.
Feel free to contact the chair of the presentation committee if they're listed on the Web site and you need clarification on what the committee is looking for.
Preparing the Talk
Don't make the mistake of starting with slides when preparing a presentation. In fact, you probably shouldn't be at the computer at all when preparing the first draft of your presentation. Instead of firing up OpenOffice.org Impress or creating slides using LaTeX's Beamer class, grab a stack of index cards and head off to somewhere quiet.
For most presentations, you should have an introduction that describes what the audience will learn and the key ideas or information you want to impart. For a standard 60-minute slot, you should focus on no more than three to five major ideas.
Once you've mocked up your talk on paper, then it's time to start preparing slides. Use whatever tool you're most comfortable with but avoid writing out the entire talk on your slides. Your audience is not there to read your presentation, they're there to watch and hear you. Many presenters tend to cram slides with information and then stand in front of the audience reading the slides. This is a sure sign of a talk that will put the audience to sleep. If your audience can glean as much information from the slides as your actual presentation, you're not doing your job as a presenter.
With some exceptions, such as highly technical talks that require code examples or other supporting text, your slides should be uncluttered and only contain the basic ideas of what you're saying. Slides exist to support the speaker, not the other way around.
Also, a word of advice about technical problems. Come prepared to give your talk with no slides at all. If your laptop fails, the projector dies, or any other audio/visual catastrophe occurs, you should be able to give a talk with no slides at all. The best bet is to have index cards or a bulleted list of ideas that you can use to refresh your memory if showing the slides fails for some reason. Again, if by the day of your presentation you're not ready to do the presentation sans slides, you have failed to prepare adequately.
This is a lesson I learned the hard way at FOSDEM. Giving a talk on openSUSE, I was too used to referring to the slides and not comfortable giving the talk extemporaneously — despite knowing the topic cold. The projector and sound system developed a major glitch, so I was forced to work with no slides. I gave a substandard talk because I didn't have adequate paper backup and hadn't practiced the talk enough. Max Spevack followed my talk and had the same A/V problems that I had, but was able to do a fine talk using his notes. That was the last time I walked into a room to present without being fully prepared to give a talk with no slides at all.
The more practice you have, the better. Don't simply read through slides at the computer. Stand up and practice delivering your presentation out loud, preferably while looking at a mirror. If you have a willing audience, practice in front of them. Focus on making eye contact, smiling, and speaking at a slower pace than usual.
Remember that people are far more likely to remember the overall tone of the talk and general topics than details. If you're hoping to impart every detail of developing with Django in 60 minutes, you'll probably fail. Emphasize a few key concepts that you'd want attendees to remember, and focus on delivering an enjoyable presentation.
Timing is extremely important. Practice the timing so that you have enough material to fit the time, minus time for questions and answers, and no more. A common mistake is to show up with far more material than is possible to present in the time allotted. This not only robs the audience of the chance to ask questions, but also means you probably won't do a good job of presenting all of the material.
Presenting
The other reason to practice extensively is to calm your nerves. Most people find public speaking unsettling to some degree, but knowing the presentation (and topic) backwards and forwards goes a long way towards making public speaking more comfortable. See Scott Berkun's Confessions of a Public Speaker for some excellent anecdotes and rationale why people find public speaking so uncomfortable, as well as expansive advice on improving speaking skills.
It's important to remember that most audiences are friendly and wish to see a good talk. They do not expect you to be a great entertainer or to exhibit unnatural brilliance. Focus on making eye contact, speak slowly, and pause from time to time to gather your thoughts. Don't be afraid of a moment or two of silence.
Do be conversational and vary your tone; try to engage the audience. Don't be afraid to ask questions, as it's a good idea to try to get the audience to focus on you rather than the slides or (worse) their cell phones and laptops.
Giving a good presentation is not rocket science, or even kernel development. It is, however, a fair amount of work. Expect to spend at least ten to fifteen hours developing and practicing a good presentation. If it's your first, you might want to put in even more time.
This might sound like a lot of work for an hour in front of an audience, but it's well worth it. You'll find that you learn a great deal about a topic, even one you're an expert in, by preparing to deliver a presentation.
Author interview: UNIX and Linux System Administration Handbook
One of the best references for Linux and UNIX system administrators over the years has been the "Handbooks" (either Linux Administration Handbook (LAH) or UNIX System Administration Handbook (USAH) at various points). But the last edition was published in 2000 (as USAH), and included information on then-current Red Hat Linux 6.2 and FreeBSD 3.4. A new, updated version, UNIX and Linux System Administration Handbook, Fourth Edition (ULSAH), is due out any day now, and the principal authors, Evi Nemeth, Garth Snyder, Trent R. Hein, and Ben Whaley, agreed to answer some questions for LWN readers. Below are their answers on the book, the impact of Linux, the future for UNIX and Linux, and more.
LWN: Could you all please introduce yourselves? What are you working on when you're not writing system administration books?
Ben: I wear a bunch of different hats as an engineer at AppliedTrust in Boulder. In addition to consulting on architecture and operations in UNIX and Linux environments, I think a lot about next generation technologies. Virtualization (in its myriad forms), application security, and the adoption of open source are all of interest. I also have a interest in the history of computing generally, and of UNIX and Linux in particular. Outside of computing, I enjoy the republic of Boulder as much as possible.
Garth: I was one of the original authors of the UNIX book lo these many years ago, but I've spent time on a variety of projects since then. Over time, I've actually done more software development than administration.
Evi: I'm Evi Nemeth, former Computer Science faculty at the University of Colorado. I'm now out of the UNIX/Linux/CS world altogether; I retired, bought a sailboat, took off and am currently in French Polynesia, half way across the Pacific en route to New Zealand. I'm working on making my boat single-hander-friendly for when I run out of crew. I do have email on the boat via my ham radio; it's like uucp at about 100 characters per minute.
Trent: I'm a scientist at heart, and I love understanding all the layers of a system. When I'm not writing, I'm deep in the trenches working on IT infrastructure issues that range from low-level technical issues to policy and management.
LWN:
The new version of the Linux Administration Handbook is on its way. When
can we expect it, and what are you most excited about in this edition?
Ben: We anticipate a mid to late July shelf date. There is loads of new material in this combined UNIX and Linux edition, including new chapters on virtualization, scripting, and green IT practices. I'm very pleased with the new set of cartoons and cover art. Also, I'm thrilled to be included as a new author after contributing to the 2nd edition of the Linux book.
Garth: Many of the existing chapters have had near-complete rewrites as well. You might think that long-standing, basic technologies like disk storage and email would be relatively stable, but that's not true at all. The way that most sites manage these resources has changed completely just in the last five years or so.
Evi: LAH and USAH have merged back together. It's due out sometime soon (July 2010). I'm most excited that it's finally done; I left the boat in Panama and came back to Colorado for a year to work full time on the book — it's a huge amount of work.
Trent: It better be in bookstores in the next 2 weeks!! I'm super excited about the new Green IT section — it presents opportunities for sysadmins to make a huge difference to our planet.
LWN: What led to the decision to combine the UNIX and Linux versions of the book?
Ben: Linux is recognized as an enterprise-grade operating system that has proven its capabilities throughout the explosion of computing in the last twenty years. It has significant momentum behind it, much more so than other leading UNIX variants. One could argue that UNIX lives on but looks to Linux as its leader. It has enough in common with traditional UNIX that it make sense to cover it all in one place.
Garth: One factor that's helped make it possible to reintegrate is the dramatic shakeout in the UNIX market. There simply aren't as many major versions of Unix around as there were ten years ago. We've seen a similar consolidation in the Linux arena as well, with most activity consolidating around a few major distributions.
Evi: Personally, I'm not sure we should ever have separated UNIX and Linux into 2 books. We thought that conditional text (if Linux, blah, blah, else ...) would make it easy to manage both books with minimal effort. Not true. We also feel that this is probably the last edition that will be on paper and maybe the last edition period, so if we are doing one last book, let's cover all the systems we can. I'm sorry we didn't manage to include MacOS too.
Trent: Combining the books makes sense because system administrators manage both UNIX and Linux systems ... organizations shouldn't be separating duties for these platforms since they're so similar.
LWN: A lot of old-time Unix folks were taken by surprise when Linux hit the scene. You've seen a lot of Unix variants come and go; what, do you think, accounts for the way that Linux has been able to displace Unix in so many settings?
Evi: I think the fact that Linux ran on PCs instead of the special vendor specific hardware of most UNIX systems gave Linux a leg up. University students ran Linux on their PCs, graduated, and went to work in corporate America (Europe, etc.). Linux also embraced (or tolerated) Windows more than the UNIX vendors and found ways for the systems to co-exist peacefully.
Trent: The community. It's a lot easier to support Linux these days because if there's any issue, there are hundreds or thousands of people to turn to on the 'net for help. It's a lot easier than sitting on hold with a vendor's call center for hours.
LWN: What do you think is the future of "true" Unix?
Ben: In the near term I believe that UNIX environments will continue as they have, serving as venerable, tenured systems with proven stability and some powerful capabilities. Most of the UNIX systems I work with run heavy databases or specific enterprise applications. OpenSolaris is an impressive system with advanced features that don't exist elsewhere. In the longer term, it seems to me that Linux will displace UNIX. All the major vendors contribute to Linux's development (as LWN's own data suggests) and even promote standardization.
Garth: Traditional Unix vendors don't have the resources to compete against Linux on every front, so they've had to pick their battles and concentrate on distinguishing themselves through enterprise features such as database or filesystem performance. However, the number of domains in which it's possible to demonstrate a proprietary advantage over Linux is continuously shrinking. I don't see any reason for the current trends to change, so I'm pessimistic about the future of traditional Unix.
Evi: UNIXes that run on PC hardware will survive in niches — FreeBSD in embedded systems, OpenBSD in security conscious spots, Open Solaris if Oracle leaves it alone, etc., but systems on proprietary hardware (AIX, HP-UX, Solaris) will continue to decline in market share. Note that each of these three vendors is hedging their bets with a Linux product or with a Linux that runs on their hardware.
Trent: There's such a large installed base that I think Unix is going to be around for a very long, long time. But, I can tell you that almost all the new infrastructure I build is on Linux.
LWN: Is the success of Linux a good thing? Or would we be better off now if some version of Unix had established itself more strongly in the open-source era?
Ben: I was introduced to Linux before UNIX, and I suspect that I wouldn't be on the same path that I'm on today without it. In fact, I grew up from adolescence using Linux and today I look at closed systems as a broken, legacy model of development. I love the creativity and community that open systems offer. To me it's a great thing that has kept UNIX alive.
Garth: In some ways, this is like asking, "The rise of humanity: good or bad?" Linux has warts, but so do the alternatives. It's not the solution so much as the context in which other things happen.
Outside of a thousand minor differences, there really isn't a dime's worth of difference between the various Unix-like operating systems. They are all basically the same. (Well, except perhaps for AIX. Whatever else one might say about it, it's definitely not the same.) Fundamental, game-changing advances — such as Solaris's ZFS filesystem — are few and far between.
Evi: Yes, the success of Linux is a very good thing. Each open source "Unix" has strengths. Linux is quick to see a cool idea in another system, re-engineer it, and voila, it's part of Linux too.
Trent: Linux is great!! In a way, Linux is really UNIX for the people. We needed that. It's forced the entire industry to be more open, which I'm not sure a more established open-source UNIX would have achieved because it's inspired a shift in mindset.
LWN: If you could command the Linux development community to do one thing that would make life easier for system administrators, what would it be?
Ben: Settle on a few more standards, such as log formats, command line arguments, configuration file syntax, and extensibility. As always, the more documentation, the better. Active communities where developers and users interact are extremely valuable.
Garth: Unix and Linux developers have traditionally designed software to be as flexible and configurable as possible. A good example of this approach is the original sendmail, which knew practically nothing about email addressing or transport until you manually programmed that knowledge into its configuration file. Many common systems still take that general approach: here's the tool kit, build whatever you like. Have fun!
This approach has its advantages, but it also imposes a cognitive burden on everyone downstream of the developers. I'd like to see more focus on simplicity and predictability in Linux distributions and less concern about hypothetical scenarios and edge cases. A Linux server may be a lot more complicated than an iPhone, but it surely doesn't need to be 1000 times more complicated, as it currently is.
Unfortunately, it's especially hard to promote simplicity and clarity in the open source world. It's easy to accept patches that add incremental features but hard to remove anything or break compatibility. Reaching design consensus on future developments is hard enough without revisiting the messes of the past.
Evi: Standardize! Make command names, arguments, and behavior the same. Get rid of the not-invented-here attitude.
Trent: Keep it simple. The early success of both UNIX and Linux can be attributed to their simple, modular approach. Too often these days folks are developing packages that are like a giant corn maze (but I won't name any names!). We'll all get farther if the development community is focused on simplicity and modularity.
LWN: The world is now full of Linux users and administrators who have never touched a traditional Unix machine. What lesson from Unix do these folks risk missing in a Linux-only world?
Garth: The Linux community has put a lot of effort into strip-mining the UNIX systems of the past and digging out the nuggets of value that weren't nailed down. So no, I don't think administrators unfamiliar with traditional UNIX systems are missing too much. On the other hand, we do seem to be stuck in about 1990 with respect to our basic idea of what an operating system should be. Look at all the incredible developments we've seen over the last 20 years in application and web development; software is completely different now. I hope the triumph of UNIX and Linux don't lock us into the POSIX API indefinitely.
Evi: This generation of Linuxites have used UNIX, Linux is a UNIX system. It has commands that you type to a shell instead of driving thru a zillion menus, it has all the important concepts of UNIX, like pipes and input output redirection, it has man pages, ...
Trent: Process adherence. In the UNIX world of yesterday, we had giant machines that filled an entire room, and dozens or hundreds of users shared them. In order to achieve a reasonable service level, system administrators had to be very process-focused, else they would impact many users if a mistake occurred. Today, a single user may have dozens of systems, physical and virtual. System administrators still need to have a well-developed, well-followed set of processes to maintain them to provide an even higher level of service.
LWN: The world is also full of energetic new developers for whom open source has always just been part of the environment. These developers will be creating our next generation of systems. What kind of operating systems do you hope they will build, and what advice would you offer them on their way?
Ben: The cloud is clearly the direction that is currently leading the pack, and I'm anxious to see what happens next in the space. I hope that open source development continues to thrive. It will also be interesting to see what happens with security. People are paying a lot of attention to it these days, and we're well positioned to fix the less secure, trust-based models of earlier systems.
Evi: A fundamental principle of UNIX-ish operating systems is that they provide commands that do one thing well and then the plumbing to hook them together to get a final result. Windows-ish operating systems try to think of everything a user might want to do and make a command or option for it. If the Windows developer didn't think of the thing you need to do, you are out of luck. Next generation operating systems need the UNIXy approach. Keep things simple, take small steps, but do it well.
Trent: I hope they build operating systems that perform well. Back in the day, we had to optimize for every last cycle, because cycles were few. Some new OS developers have had the luxury of hardware being abstracted from them, and it's easy to forget what really happens at that layer. It's easy to fall into a pattern of slapping layer upon layer, resulting in a lot of kernel and application bloat. Keep it simple, and think about how to optimize for performance.
LWN: Anything else you would like to say to LWN's readers?
Ben: I'm a lurker on LWN and I've learned a lot from both the articles and the comments. I appreciate the active open source community on the site. Thanks for reading.
Garth: I'm excited about Btrfs and really looking forward to its debut as a production system. Check it out!
Evi: I need crew. Is there anyone out there (between jobs maybe) who isn't busy between September and November 2010? We share expenses on consumables; I pay for boat maintenance.
Trent: I hope in UNIX and Linux System Administration Handbook (4th Edition) we teach folks how to be good system administrators and find answers on their own, rather than providing every possible answer for them. System administrators need knowledge acquisition and problem solving skills more than anything.
We would like to thank Evi, Garth, Trent, and Ben for taking the time to answer our questions.
Security
An interesting DNSSEC amplification
A recent report clearly demonstrates that computer security is not exempt from the "law of unintended consequences". As DNSSEC (Domain Name System Security Extensions) is rolled out, we will likely see various kinds of unanticipated problems in that system which is meant to secure the internet name resolution process. One of the concerns about DNSSEC has always been the amount of additional traffic it would generate, as well as the processing burden on DNS servers—both of those came into play here.
The report from Cisco reads a bit like a detective story. A particular DNS server saw a sudden 2-3x increase in its traffic, which at first glance appeared to be some kind of denial of service (DoS) attack. Further investigation showed that the query rate jumped from tens of queries per second (qps) to around 3000 qps. Because it was a DNSSEC signed zone, each query required two responses—a key resource record (DNSKEY RR) and a signature RR (RRSIG RR)—totaling more than 1K in size. That led to response traffic of 35 megabits per second (3000+ queries x 1K+ bytes).
When a small amount of data can be sent that generates a much larger response, there is an "amplification" effect going on. That means that an attacker can use much less of a resource, bandwidth say, than the victim must use to respond. So, a small bandwidth investment, spread out over a large number of attackers (in a DDoS, distributed DoS), can easily cause a victim to generate more traffic than it can handle. Because DNS typically uses UDP to eliminate the connection establishment overhead of TCP, it also makes it easier for attackers, as they don't need to use state-tracking resources on their end. These kinds of amplification attacks are well-known for the existing DNS. It is also understood that DNSSEC adds other amplification possibilities, but those known cases were not the cause of the problem that Cisco investigated.
In analyzing the data from this event, it was determined that a very small fraction of clients (1,000 out of 500,000-1,000,000 daily unique clients) were making repeated queries for the same DNSKEY RR. It could have been from some kind of bug in certain DNS clients, but because the event was so sudden, it suggested that there was some kind of "external trigger". An obvious trigger would be a change to the DNS information being served and that was in fact the case: the cryptographic keys had been changed on the day of the traffic increase.
Normally, a key rollover is handled by keeping both keys around for an overlap period and signing resource records with both keys during that time. Either key can be used to verify the signature during the overlap, and eventually the old key can be deprecated and then removed. Keys are signed by a parent server's key (i.e. example.com's key is signed by the .com server's key), all the way up to the key used to sign the root keys. Today, those root keys are often stored locally by the client as "Trust Anchor". If a client cannot verify a signature with a key that it has in its cache, it will request a new key from the parent, because it assumes the key has changed.
Before it requests a key from the parent, though, it re-requests the key from the server it is talking to, because it assumes that it is getting bogus responses from some kind of attack. If it really were an attack, that would be the right response, but if there were some misconfiguration on the part of the client, it would just make the problem worse. It turns out that some clients were distributed with a static set of Trust Anchors. Once those keys were rolled over, those clients were out of date and could no longer resolve names associated with those parts of the DNS hierarchy.
But, the amplification turns out to be quite a bit larger than just a handful of retries for an affected server. When a client cannot verify a signature, it will do a depth-first search of the alternative name servers, querying each server to try to find keys that it can use. There are 14 .com name servers, and potentially several name servers for example.com. This leads to a combinatorial explosion of sorts, where a query for a single host name (test.example.com for example) in a simple configuration (two example.com name servers) leads to 844 separate queries.
Other, much worse, scenarios are described in the report. It is interesting that perfectly reasonable behavior by clients who have ended up with outdated information can lead to such a huge increase in the traffic that DNS servers, especially the root servers, may have to handle. The conclusion from the Cisco report is certainly eye-opening:
This aspect of a qualitative change of the DNS is unavoidable, and it places a strong imperative on DNS operations and the community of the 5 million current and uncountable future DNS resolvers to understand that "set and forget" is not the intended mode of operation of DNSSEC-equipped clients.
The last paragraph is particularly worrisome. One would guess that a few years down the road, most clients will be DNSSEC-equipped. And most will be in the hands of users who know nothing about key rollover, amplification, DoS, or, for that matter, DNS or DNSSEC. It will be up to the vendors and distributors to ensure that the "forget" part of "set and forget" doesn't happen. It is not hard to envision some kind of nasty apocalypse lurking for DNSSEC if that's not the case.
Brief items
Quotes of the week
Why would we want to terrorize our own population by doing exactly what we don't want anyone else to do? And a national emergency is precisely the worst time to do it.
New vulnerabilities
abrt: unnecessary setuid
Package(s): | abrt | CVE #(s): | |||||
Created: | July 8, 2010 | Updated: | July 14, 2010 | ||||
Description: | From the MeeGo advisory: The file /usr/libexec/abrt-hook-python is setuid as the abrt user. As there is no explicit reason to be setuid as the abrt user, this violates best known practices for security; specifically by not using the principles of least privilege and unintentionally expanding the attackable surface area of MeeGo. | ||||||
Alerts: |
|
cups: multiple vulnerabilities
Package(s): | cups | CVE #(s): | CVE-2010-2431 CVE-2010-2432 | ||||||||||||||||||||||||||||||||
Created: | July 8, 2010 | Updated: | October 10, 2011 | ||||||||||||||||||||||||||||||||
Description: | From the Pardus advisory: CVE-2010-2431: The cupsFileOpen function in CUPS before 1.4.4 allows local users, with lp group membership, to overwrite arbitrary files via a symlink attack on the (1) /var/cache/cups/remote.cache or (2) /var/cache/cups/job.cache file. CVE-2010-2432: The cupsDoAuthentication function in auth.c in the client in CUPS before 1.4.4, when HAVE_GSSAPI is omitted, does not properly handle a demand for authorization, which allows remote CUPS servers to cause a denial of service (infinite loop) via HTTP_UNAUTHORIZED responses. | ||||||||||||||||||||||||||||||||||
Alerts: |
|
ghostscript: multiple vulnerabilities
Package(s): | ghostscript | CVE #(s): | CVE-2009-4270 CVE-2009-4897 CVE-2010-1628 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Created: | July 14, 2010 | Updated: | August 19, 2010 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description: | From the Ubuntu advisory:
David Srbecky discovered that Ghostscript incorrectly handled debug logging. If a user or automated system were tricked into opening a crafted PDF file, an attacker could cause a denial of service or execute arbitrary code with privileges of the user invoking the program. (CVE-2009-4270) It was discovered that Ghostscript incorrectly handled certain malformed files. If a user or automated system were tricked into opening a crafted Postscript or PDF file, an attacker could cause a denial of service or execute arbitrary code with privileges of the user invoking the program. (CVE-2009-4897) Dan Rosenberg discovered that Ghostscript incorrectly handled certain recursive Postscript files. If a user or automated system were tricked into opening a crafted Postscript file, an attacker could cause a denial of service or execute arbitrary code with privileges of the user invoking the program. (CVE-2010-1628) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Alerts: |
|
gnomine: unnecessary setgid
Package(s): | gnomine | CVE #(s): | |||||
Created: | July 8, 2010 | Updated: | July 15, 2010 | ||||
Description: | From the MeeGo advisory: The /usr/bin/gnomine binary is setgid for the games group. There is no explicit reason to be setgid and this violates best known practices for security; specifically by not using the prinicples of least privilege and unintentionally expanding the attackable surface area of MeeGo. | ||||||
Alerts: |
|
gv: multiple vulnerabilities
Package(s): | gv | CVE #(s): | CVE-2010-2055 CVE-2010-2056 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Created: | July 9, 2010 | Updated: | February 6, 2012 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description: | From the Red Hat bugzilla:
a deficiency in the way gv handled temporary file creation, when used for opening Portable Document Format (PDF) files. A local attacker could use this flaw to conduct symlink attacks, potentially leading to denial of service (un-athorized overwrite of file content). (CVE-2010-2056) From the Red Hat bugzilla: A security flaw was found in the way gs handled its initialization: 1, certain files in current working directory were honored at startup, 2, explicit use of "-P-" command line option, did not prevent ghostscript from execution of PostScript commands, contained within "gs_init.ps" file. A local attacker could use this flaw to execute arbitrary PostScript commands, if the victim was tricked into opening a PostScript file in the directory of attacker's intent. (CVE-2010-2055) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Alerts: |
|
kernel: multiple vulnerabilities
Package(s): | kernel kernel-pae | CVE #(s): | CVE-2010-1641 CVE-2010-2071 CVE-2010-2066 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Created: | July 8, 2010 | Updated: | March 8, 2011 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description: | From the Pardus advisory: CVE-2010-1641: The do_gfs2_set_flags function in fs/gfs2/file.c in the Linux kernel before 2.6.34-git10 does not verify the ownership of a file, which allows local users to bypass intended access restrictions via a SETFLAGS ioctl request. CVE-2010-2071: The btrfs_xattr_set_acl function in fs/btrfs/acl.c in btrfs in the Linux kernel 2.6.34 and earlier does not check file ownership before setting an ACL, which allows local users to bypass file permissions by setting arbitrary ACLs, as demonstrated using setfacl. CVE-2010-2066: If the donor file is an append-only file, we should not allow the operation to proceed, lest we end up overwriting the contents of an append-only file. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Alerts: |
|
kernel: multiple vulnerabilities
Package(s): | kernel | CVE #(s): | CVE-2010-2478 CVE-2010-2495 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Created: | July 9, 2010 | Updated: | March 28, 2011 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description: | From the Red Hat bugzilla:
On a 32-bit machine, info.rule_cnt >= 0x40000000 leads to integer overflow and the buffer may be smaller than needed. Since ETHTOOL_GRXCLSRLALL is unprivileged, this can presumably be used for at least denial of service. (CVE-2010-2478) From the Red Hat bugzilla: When transmitting L2TP frames, we derive the outgoing interface's UDP checksum hardware assist capabilities from the tunnel dst dev. This can sometimes be NULL, especially when routing protocols are used and routing changes occur. This patch just checks for NULL dst or dev pointers when checking for netdev hardware assist features. (CVE-2010-2495) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Alerts: |
|
libmikmod: arbitrary code execution
Package(s): | libmikmod | CVE #(s): | CVE-2009-3996 | ||||||||||||||||||||||||||||||||||||
Created: | July 8, 2010 | Updated: | October 11, 2010 | ||||||||||||||||||||||||||||||||||||
Description: | From the MeeGo advisory: Heap-based buffer overflow in IN_MOD.DLL (aka the Module Decoder Plug-in) in Winamp before 5.57, and libmikmod 3.1.12, might allow remote attackers to execute arbitrary code via an Ultratracker file. | ||||||||||||||||||||||||||||||||||||||
Alerts: |
|
libtiff: denial of service
Package(s): | libtiff | CVE #(s): | CVE-2010-2598 | ||||||||||||||||
Created: | July 8, 2010 | Updated: | March 15, 2011 | ||||||||||||||||
Description: | From the Red Hat advisory: An input validation flaw was discovered in libtiff. An attacker could use this flaw to create a specially-crafted TIFF file that, when opened, would cause an application linked against libtiff to crash. (CVE-2010-2598) | ||||||||||||||||||
Alerts: |
|
libtiff: multiple denial of service flaws
Package(s): | libtiff | CVE #(s): | CVE-2010-2481 CVE-2010-2483 CVE-2010-2595 CVE-2010-2597 | ||||||||||||||||||||||||||||||||||||||||||||||||
Created: | July 8, 2010 | Updated: | March 15, 2011 | ||||||||||||||||||||||||||||||||||||||||||||||||
Description: | From the Red Hat advisory: Multiple input validation flaws were discovered in libtiff. An attacker could use these flaws to create a specially-crafted TIFF file that, when opened, would cause an application linked against libtiff to crash. (CVE-2010-2481, CVE-2010-2483, CVE-2010-2595, CVE-2010-2597) | ||||||||||||||||||||||||||||||||||||||||||||||||||
Alerts: |
|
opera: multiple vulnerabilities
Package(s): | opera | CVE #(s): | CVE-2010-0653 CVE-2010-1993 | ||||||||||||||||||||
Created: | July 14, 2010 | Updated: | August 2, 2010 | ||||||||||||||||||||
Description: | From the openSUSE advisory:
CVE-2010-0653: Opera permits cross-origin loading of CSS style sheets even when the style sheet download has an incorrect MIME type and the style sheet document is malformed, which allows remote HTTP servers to obtain sensitive information via a crafted document. CVE-2010-1993: Opera 9.52 does not properly handle an IFRAME element with a mailto: URL in its SRC attribute, which allows remote attackers to cause a denial of service (resource consumption) via an HTML document with many IFRAME elements. | ||||||||||||||||||||||
Alerts: |
|
pam: local root privilege escalation
Package(s): | pam | CVE #(s): | CVE-2010-0832 | ||||||||
Created: | July 8, 2010 | Updated: | October 26, 2010 | ||||||||
Description: | From the Ubuntu advisory: Denis Excoffier discovered that the PAM MOTD module in Ubuntu did not correctly handle path permissions when creating user file stamps. A local attacker could exploit this to gain root privilieges. | ||||||||||
Alerts: |
|
python-cjson: denial of service
Package(s): | python-cjson | CVE #(s): | CVE-2010-1666 | ||||||||||||
Created: | July 12, 2010 | Updated: | July 21, 2010 | ||||||||||||
Description: | From the Debian advisory:
Matt Giuca discovered a buffer overflow in python-cjson, a fast JSON encoder/decoder for Python. This allows a remote attacker to cause a denial of service (application crash) through a specially-crafted Python script. | ||||||||||||||
Alerts: |
|
python-mako: cross-site scripting
Package(s): | python-mako | CVE #(s): | CVE-2010-2480 | ||||||||||||||||||||||||
Created: | July 8, 2010 | Updated: | September 29, 2010 | ||||||||||||||||||||||||
Description: | From the Fedora advisory: Fix potential single-quoting XSS vulnerability. | ||||||||||||||||||||||||||
Alerts: |
|
qt: multiple vulnerabilities
Package(s): | qt webkit | CVE #(s): | CVE-2009-2841 CVE-2010-1766 CVE-2010-1772 CVE-2010-1773 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Created: | July 13, 2010 | Updated: | March 2, 2011 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Description: | From the Red Hat bugzilla:
A security flaw was found in the way WebKit used to handle media elements
(audio and video tags). A remote attacker could provide a specially-crafted
document, requesting loading of sub-resources (such as remote URLs),
which would be normally disallowed by the callback function(s). (CVE-2009-2841)
From the Red Hat bugzilla: An off by one memory corruption issue exists in WebSocketHandshake::readServerHandshake(). This issue is addressed by improved bounds checking. (CVE-2010-1766) From the Red Hat bugzilla: A use after free issue exists in WebKit's handling of geolocation events. Visiting a maliciously crafted website may lead to an unexpected application termination or arbitrary code execution. This issue is addressed through improved handing of geolocation events. (CVE-2010-1772) From the Red Hat bugzilla: An off by one memory read out of bounds issue exists in WebKit's handling of HTML lists. Visiting a maliciously crafted website may lead to an unexpected application termination or the disclosure of the contents of memory. This issue is addressed through improved bounds checking. (CVE-2010-1773) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Alerts: |
|
scsi-target-utils: denial of service
Package(s): | scsi-target-utils | CVE #(s): | CVE-2010-2221 | ||||||||||||||||||||||||||||
Created: | July 8, 2010 | Updated: | June 21, 2011 | ||||||||||||||||||||||||||||
Description: | From the Red Hat advisory: Multiple buffer overflow flaws were found in scsi-target-utils' tgtd daemon. A remote attacker could trigger these flaws by sending a carefully-crafted Internet Storage Name Service (iSNS) request, causing the tgtd daemon to crash. (CVE-2010-2221) | ||||||||||||||||||||||||||||||
Alerts: |
|
w3m: man-in-the-middle attack
Package(s): | w3m | CVE #(s): | CVE-2010-2074 | ||||||||||||||||||||||||||||||||
Created: | July 9, 2010 | Updated: | October 19, 2012 | ||||||||||||||||||||||||||||||||
Description: | From the CVE entry:
istream.c in w3m 0.5.2 and possibly other versions, when ssl_verify_server is enabled, does not properly handle a '\0' character in a domain name in the (1) subject's Common Name or (2) Subject Alternative Name field of an X.509 certificate, which allows man-in-the-middle attackers to spoof arbitrary SSL servers via a crafted certificate issued by a legitimate Certification Authority, a related issue to CVE-2009-2408. | ||||||||||||||||||||||||||||||||||
Alerts: |
|
znc: denial of service
Package(s): | znc | CVE #(s): | CVE-2010-2448 | ||||
Created: | July 12, 2010 | Updated: | July 14, 2010 | ||||
Description: | From the Debian advisory:
It was discovered that znc, an IRC bouncer, is vulnerable to denial of service attacks via a NULL pointer dereference when traffic statistics are requested while there is an unauthenticated connection. | ||||||
Alerts: |
|
Page editor: Jake Edge
Kernel development
Brief items
Kernel release status
The current development kernel is 2.6.35-rc5, released on July 12. "And
I merged the ARM defconfig minimization thing, which isn't the final word
on the whole defconfig issue, but since it removes almost 200 _thousand_
lines of ARM defconfig noise, it's a pretty big deal.
" We looked at the ARM defconfig
issue a few weeks back, and Linus has pulled from Uwe Kleine-König's tree that provides a
starting point for the defconfig cleanup. The short-form changelog is
appended to the announcement, and all the details are available in the full changelog.
Five stable kernels were released on July 5: 2.6.27.48, 2.6.31.14, 2.6.32.16, 2.6.33.6, and 2.6.34.1.
Quotes of the week
Kernel development news
Kernel development statistics for 2.6.35
In the tradition of summarizing the statistics of the Linux kernel releases before the actual release of the kernel version itself, here is a summary of what has happened in the Linux kernel tree over the past few months.
This kernel release has seen 9460 changesets from about 1145 different developers so far. This continues the trend over the past few kernel releases for the size of both the changes as well as the development community as can be seen in this table:
Kernel Patches Devs 2.6.29 11,600 1170 2.6.30 11,700 1130 2.6.31 10,600 1150 2.6.32 10,800 1230 2.6.33 10,500 1150 2.6.34 9,100 1110 2.6.35 9,460 1145
Perhaps our years of increasing developer activity — getting more developers per release and more changes per release — has finally reached a plateau. If so, that is not a bad thing, as a number of us were wondering what the limits of our community were going to be. At around 10 thousand changes per release, that limit is indeed quite high, so there is no need to be concerned, as the Linux kernel is still, by far, the most active software development project the world has ever seen.
In looking at the individual developers, the quantity and size of contributions is still quite large:
Most active 2.6.35 developers
By changesets Mauro Carvalho Chehab 228 2.3% Dan Carpenter 135 1.3% Greg Kroah-Hartman 134 1.3% Arnaldo Carvalho de Melo 121 1.2% Johannes Berg 105 1.0% Ben Dooks 98 1.0% Julia Lawall 96 1.0% Hans Verkuil 92 0.9% Alexander Graf 84 0.8% Eric Dumazet 82 0.8% Peter Zijlstra 79 0.8% Paul Mundt 79 0.8% Johan Hovold 75 0.7% Tejun Heo 74 0.7% Stephen Hemminger 74 0.7% Mark Brown 71 0.7% Sage Weil 70 0.7% Alex Deucher 68 0.7% Randy Dunlap 67 0.7% Frederic Weisbecker 66 0.7%
By changed lines Uwe Kleine-König 194249 18.5% Ralph Campbell 53250 5.1% Greg Kroah-Hartman 31714 3.0% Stepan Moskovchenko 30037 2.9% Arnaud Patard 28783 2.7% Mauro Carvalho Chehab 27902 2.7% Eliot Blennerhassett 18490 1.8% Luis R. Rodriguez 16555 1.6% Daniel Mack 16176 1.5% Bob Beers 11703 1.1% Jason Wessel 10502 1.0% Viresh KUMAR 10499 1.0% Barry Song 10116 1.0% James Chapman 9645 0.9% Steve Wise 9580 0.9% Sjur Braendeland 8775 0.8% Alex Deucher 7721 0.7% Jassi Brar 7554 0.7% Sujith 7544 0.7% Giridhar Malavali 6867 0.7%
Uwe Kleine-König, who works for Pengutronix, dominates the "changed lines" list due to one patch that Linus just pulled for the 2.5.35-rc5 release that deleted almost all of the ARM default config files. Linus responded when Uwe posted his patch with:
> 177 files changed, 652 insertions(+), 194157 deletions(-)
Other than that major cleanup, the majority of the work was in drivers. Ralph Campbell did a lot of Infiniband driver work, I did a lot of cleanup on some staging drivers, and Stepan Moskovchenko and Arnaud Patard contributed new drivers to the staging tree. Mauro Carvalho Chehab contributed lots of Video for Linux driver work — rounding out the top 6 contributors by lines of code changed.
Continuing the view that this kernel is much like previous ones, 177 different employers were found to have contributed to the 2.6.35 kernel release:
Most active 2.6.35 employers
By changesets (None) 1429 14.2% Red Hat 1185 11.8% (Unknown) 904 9.0% Intel 637 6.3% Novell 559 5.6% IBM 295 2.9% Nokia 253 2.5% (Consultant) 215 2.1% Atheros Communications 175 1.7% AMD 173 1.7% Oracle 169 1.7% Samsung 163 1.6% Texas Instruments 162 1.6% (Academia) 140 1.4% Fujitsu 138 1.4% 122 1.2% Renesas Technology 102 1.0% Analog Devices 98 1.0% Simtec 96 1.0% NTT 93 0.9%
By lines changed Pengutronix 195175 18.6% Red Hat 82334 7.8% (None) 79313 7.6% (Unknown) 72426 6.9% QLogic 72131 6.9% Novell 49651 4.7% Intel 47260 4.5% Code Aurora Forum 40081 3.8% Mandriva 29105 2.8% Atheros Communications 29055 2.8% Samsung 25817 2.5% ST Ericsson 20463 2.0% Analog Devices 18889 1.8% AudioScience Inc. 18545 1.8% caiaq 16194 1.5% Nokia 14891 1.4% Texas Instruments 14864 1.4% (Consultant) 14209 1.4% IBM 12235 1.2% ST Microelectronics 11728 1.1%
But enough of the normal way of looking at the kernel as a whole body. Let's try something different this time, and break the contributions down by the different functional areas of the kernel.
The kernel is a bit strange in that it is a mature body of code that still changes quite frequently and throughout the whole body of code. It is not just drivers that are changing, but the "core" kernel as well. That is pretty unusual for a mature code base. The core kernel code — those files that all architectures and users use no matter what their configuration is — comprises 5% of the kernel (by lines of code), and you will find that 5% of the total kernel changes happen in that code. Here is the raw number of changes for the "core" kernel files for the 2.6.35-rc5 release.
Action Lines % of all changes Added 27,550 4.50% Deleted 7,450 1.90% Modified 6,847 4.93%
Note that the percent deleted are a bit off because of the huge defconfig delete by Uwe as described above.
So, if the changes are made in a uniform way across the kernel, does that mean that the same companies contribute in a uniform way as well, or do some contribute more to one area than another?
I've broken the kernel files down into six different categories:
- core : This includes the files in the init, block, ipc, kernel, lib, mm, and virt subdirectories.
- drivers : This includes the files in the crypto, drivers, sound, security, include/acpi, include/crypto, include/drm, include/media, include/mtd, include/pcmcia, include/rdma, include/rxrpc, include/scsi, include/sound, and include/video subdirectories.
- filesystems : This includes the files in the fs subdirectory.
- networking : This includes the files in the net and include/net subdirectories.
- architecture-specific : This includes the files in the arch, include/xen, include/math-emu, and include/asm-generic subdirectories.
- miscellaneous : This includes all of the rest of the files not included in the above categories.
Category % Lines Core 4.37% Drivers 57.06% Filesystems 7.21% Networking 5.03% Arch-specific 21.92% Miscellaneous 4.43%
Here are the top companies contributing to the different areas of the kernel:
Most active 2.6.35 employers (core)
By changesets Red Hat 218 16.5% (None) 148 11.2% IBM 66 5.0% Novell 60 4.5% Intel 59 4.5% (Unknown) 57 4.3% Fujitsu 33 2.5% 30 2.3% Wind River 22 1.7% Oracle 22 1.7% Nokia 22 1.7% (Consultant) 22 1.7%
By lines changed Wind River 9535 25.4% Red Hat 6277 16.7% Novell 2385 6.4% (None) 2074 5.5% IBM 2064 5.5% Intel 1480 3.9% Fujitsu 1431 3.8% 1417 3.8% VirtualLogix Inc. 992 2.6% ST Ericsson 957 2.6% caiaq 707 1.9% (Unknown) 614 1.6%
The companies contributing to the core kernel files are not surprising. These companies have all contributed to Linux for a long time, and it is part of their core strategy. Wind River has a high number of lines changed due to all of the KGDB work that Jason Wessel has been doing in getting that codebase cleaned up and merged into the main kernel tree.
Most active 2.6.35 employers (drivers)
By changesets (None) 1022 18.1% (Unknown) 678 12.0% Red Hat 528 9.4% Intel 499 8.9% Novell 336 6.0% Nokia 199 3.5% Atheros Communications 165 2.9% (Academia) 94 1.7% IBM 86 1.5% QLogic 86 1.5%
By lines changed QLogic 72122 12.2% (None) 61356 10.4% (Unknown) 60802 10.3% Red Hat 47204 8.0% Intel 39891 6.7% Novell 36951 6.2% Code Aurora Forum 34888 5.9% Mandriva 28867 4.9% Atheros Communications 28844 4.9% AudioScience Inc. 18535 3.1%
Because the drivers make up over 50% of the overall size of the kernel, the contributions here track the overall company statistics very closely. The company AudioScience Inc. sneaks onto the list of changes due to all of the work that Eliot Blennerhassett has been doing on the asihpi sound driver.
Most active 2.6.35 employers (filesystems)
By changesets Red Hat 134 15.9% Oracle 77 9.1% New Dream Network 76 9.0% Novell 76 9.0% (Unknown) 73 8.7% (None) 58 6.9% NetApp 42 5.0% Parallels 39 4.6% IBM 23 2.7% Univ. of Michigan CITI 23 2.7%
By lines changed Oracle 7194 24.2% Red Hat 6392 21.5% Novell 3989 13.4% (Unknown) 3081 10.4% (None) 2024 6.8% New Dream Network 1423 4.8% NetApp 897 3.0% 857 2.9% Parallels 687 2.3% (Consultant) 546 1.8%
Filesystem contributions, like drivers, match up with the different company strengths. New Dream Network might not be a familiar name to a lot of people, but their development on the Ceph filesystem pushed it into the list of top contributors. The University of Michigan did a lot of NFS work, bringing that organization into the top ten.
Most active 2.6.35 employers (networking)
By changesets SFR 74 9.6% (Consultant) 73 9.5% Red Hat 72 9.3% (None) 67 8.7% ProFUSION 55 7.1% Intel 45 5.8% Astaro 35 4.5% Vyatta 34 4.4% (Unknown) 34 4.4% Oracle 20 2.6% ST Ericsson 20 2.6% Univ. of Michigan CITI 20 2.6%
By lines changed Katalix Systems 9213 24.2% ST Ericsson 8003 21.0% (Consultant) 3691 9.7% Univ. of Michigan CITI 2334 6.1% Astaro 1956 5.1% Red Hat 1882 4.9% Intel 1607 4.2% SFR 1555 4.1% ProFUSION 1065 2.8% (None) 1060 2.8% (Unknown) 1035 2.7%
Like the filesystem list, networking also shows the University of Michigan's large contributions as well as many of the other common Linux companies. But here a number of not-so-familiar companies start showing up.
SFR is a French mobile phone company, and contributed lots of changes all through the networking core. ProFUSION is an embedded development company that did a lot of Bluetooth development for this kernel release. Katalix Systems is another embedded development company and they contributed a lot of l2tp changes. Astaro is a networking security company that contributed a number of netfilter changes.
Most active 2.6.35 employers (architecture-specific)
By changesets Red Hat 146 7.2% (None) 143 7.0% IBM 120 5.9% Novell 109 5.4% Samsung 100 4.9% Texas Instruments 94 4.6% AMD 90 4.4% Simtec 85 4.2% (Unknown) 75 3.7% (Consultant) 73 3.6%
By lines changed Pengutronix 194211 60.5% Samsung 15341 4.8% ST Microelectronics 10038 3.1% (None) 8338 2.6% Red Hat 7981 2.5% (Consultant) 6695 2.1% IBM 6064 1.9% Novell 5973 1.9% Code Aurora Forum 5114 1.6% Analog Devices 4345 1.4%
With the architecture-specific files taking up the second largest chunk of code in the kernel, the list of contributing companies is closer to the list of overall contributors as well, with more hardware companies showing that they contribute a lot of development to get Linux working properly on their specific processors.
Most active 2.6.35 employers (miscellaneous)
By changesets Red Hat 206 26.9% (None) 110 14.4% (Unknown) 35 4.6% Novell 28 3.7% Intel 27 3.5% IBM 18 2.4% Fujitsu 16 2.1% 15 2.0% Wind River 9 1.2% (Academia) 9 1.2% Vyatta 9 1.2%
By lines changed Red Hat 12772 34.0% Broadcom 6082 16.2% (None) 5156 13.7% (Unknown) 2757 7.3% Intel 2212 5.9% (Academia) 1850 4.9% Samsung 769 2.1% Wind River 593 1.6% Fujitsu 592 1.6% Nokia 532 1.4% IBM 499 1.3%
The rest of the various kernel files that don't fall into any other major category show that Red Hat has done a lot of work on the userspace performance monitoring tools that are bundled with the Linux kernel.
As for overall trends in the different categories, Red Hat shows that they completely dominate all areas of developing the Linux kernel when it comes to the number of contributions. No other company shows up in the top ten contributors for all categories like they do. But, by breaking out the kernel contributions in different areas of the kernel, we see that a number of different companies are large contributors in different, important areas. Normally these contributions get drowned out by the larger contributors, but the more specialized contributors are just as important to advancing the Linux kernel.
A brief history of union mounts
Several weeks ago, I mentioned on my blog that I planned to move out of programming in the near future. A few days later I received this email from a kernel hacker friend:
At first, I thought we were losing a great hacker... But then I read on your blog: "Don't worry, I'm going to get union mounts into mainline before I change careers," and I realized this means you'll be with us for a few years yet! :)
How long has union mounts existed without going into the mainline Linux kernel? Well, to put it in a human perspective, if you'd been born the same year as the first Linux implementation of union mounts, you'd be writing your college application essays right now. Werner Almsberger began work on the Inheriting File System, one of the early ancestors of Linux union mounts, in 1993 - 17 years ago!
Background
A union mount does the opposite of a normal mount: Instead of hiding the namespace of the file system covered by the new mount, it shows a combination of the namespaces of the unioned file systems. Some use cases include a writable live CD/DVD-based system (without a complicated mess of symbolic links, bind mounts, and writable directories), and a shared base file system used by multiple clients. For an extremely detailed review of unioning file systems in general, see the LWN series:
- Unioning file systems:
Architecture, features, and design
- Unioning file systems:
Union directories and mounts
- Unioning file systems: unionfs and aufs
This article will provide a high-level overview of various implementations of union mounts from the original 1993 Inheriting File System through the present day VFS-based union mount implementation and plans for near-term development. We deliberately leave aside unionfs, aufs, and other non-VFS implementations of unioning, in large part because the probability of merging a non-VFS unioning file system into mainline appears to be even lower than that of a VFS-based solution.
readdir() redux
Throughout this article, we will place special emphasis on the evolution of readdir(), since historically it has been the greatest stumbling block for any implementation of union mounts. A summary from the first article in the LWN unioning file systems series:One of the great tragedies of the UNIX file system interface is the enshrinement of readdir(), telldir(), seekdir(), etc. family in the POSIX standard. An application may begin reading directory entries and pause at any time, restarting later from the "same" place in the directory. The kernel must give out 32-bit magic values which allow it to restart the readdir() from the point where it last stopped. Originally, this was implemented the same way as positions in a file: the directory entries were stored sequentially in a file and the number returned was the offset of the next directory entry from the beginning of the directory. Newer file systems use more complex schemes and the value returned is no longer a simple offset. To support readdir(), a unioning file system must merge the entries from lower file systems, remove duplicates and whiteouts, and create some sort of stable mapping that allows it to resume readdir() correctly. Support from userspace libraries can make this easier by caching the results in user memory.
Union mounts development time line
As mentioned earlier, one of the first implementations of a unioning was the Inheriting File System. In a pattern to be repeated by many future developers, Werner quickly became disenchanted with the complexity of the implementation of IFS and stopped working on it, suggesting that future developers try a mixed user/kernel implementation instead:
Well, I completed it to the point where it was a nice proof of concept, but still with problems (leaks inodes, probably has a few races left, was also a bit too liberal with locking, etc.).
Then I looked back at what I did and was disgusted by its complexity. So I decided that, before I might even consider proposing inclusion into the mainstream kernel, I'd have to see how much poorer (performance-wise) a user-space implementation would be. I did some initial hacking on NFS until I convinced myself that userfs might be the better approach. Unfortunately, I never found the time to work on that.
Many other kernel developers agreed with Werner. One of Linus Torvalds' earliest recorded NAKs of a kernel-based union file system came in 1996:
In 1998, Werner updated his IFS page to suggest working on a unioning file system as a good academic research topic:
Sounds like a very nice master's thesis topic for some good Linux hacker ;-) [...] So far nobody has taken the challenge. So, if you're an aspiring kernel hacker, aren't afraid of complexity, have a lot of time, and are looking for an interesting but useful project, you may just have found it :-)
Around 2003 - 2004, Jan Blunck took up the gauntlet Werner threw down and began working on union mounts for his thesis. The union mount implementation Jan produced lay dormant until 2007, when discussion about merging unionfs into mainline triggered renewed interest in a VFS-based version of unioning. At that point, Bharata B. Rao took the lead and began working with Jan Blunck on a new version of union mounts. Bharata and Jan posted several versions in 2007.
The first version posted in April 2007 used Jan's original strategy of keeping two pointers in the dentry for each directory, one pointing to the directory below this dentry's in the union stack, and one to the dentry of the topmost directory. The drawback to this implementation is that each file system can only be in one union stack at a time, since dentries are shared between all mounts of the same underlying file system.
The second version posted in May 2007 implemented yet another minor variation on in-kernel readdir(), this time using per file pointer cookies. From the patch set's documentation:
When two processes issue readdir()/getdents() call on the same unioned directory, both of them would be referring to the same dentries via their file structures. So it becomes necessary to maintain rdstate separately for these two instances. This is achieved by using a cookie variable in the rdstate. Each of these rdstate instances would get a different cookie thereby differentiating them.
In June 2007, Bharata and Jan posted a third version with an important and novel change to the way union stacks are formed. They replaced the in-dentry links to the topmost and lower directories with an external structure of pointers to (vfsmount, dentry) pairs. For the first time, a file system could be part of more than one union mount. From the patch set's documentation:
In this new approach, the way union stack is built and traversed has been changed. Instead of dentry-to-dentry links forming the stack between different layers, we now have (vfsmount, dentry) pairs as the building blocks of the union stack. Since this (vfsmount, dentry) combination is unique across all namespaces, we should be able to maintain the union stack sanely even if the filesystem is union mounted privately in different namespaces or if it appears under different mounts due to various types of bind mounts.
In July 2007, Jan
posted
a fourth version with some relatively minor changes to the way
whiteouts were implemented, among a few other things. Jan says,
"I'm able to compile the kernel with this patches applied on a 3
layer union mount with the [separate] layers bind mounted to different
locations. I haven't done any performance tests since I think there is
a more important topic ahead: better readdir() support.
"
In December 2007, Bharata B. Rao posted a fifth version that implemented another in-kernel version of readdir():
In this approach, the cached dirents are given offsets in the form of linearly increasing indices/cookies (like 0, 1, 2,...). This helps us to uniformly define offsets across all the directories of the union irrespective of the type of filesystem involved. Also this is needed to define a seek behaviour on the union mounted directory. This cache is stored as part of the struct file of the topmost directory of the union and will remain as long as the directory is kept open.
However, this approach had multiple problems, including excessive use of kernel memory to cache directory entries and to keep the mapping of indices to dentries.
readdir() continued to be a stumbling block, and union mounts
development slowed down for most of 2008. In April 2008, Nagabhushan
BS implemented
and posted
a version of union mounts with most of the readdir() logic
moved to glibc. "I went through Bharata's RFC post on glibc
based Union Mount readdir solution
(http://lkml.org/lkml/2008/3/11/34)
and have come up with patches against glibc to implement the
same.
"
However, moving the complexity to user space wasn't the panacea everyone had hoped for. The glibc maintainers had many objections, the kernel interface was an obvious kludge (returning whiteouts for "." to signal a unioned directory), and no one could figure out how to handle NFS sanely.
In November 2008, Miklos Szeredi posted a simplified version of union mounts that implemented readdir() in the kernel.
The directory entries are read starting from the top layer and they are maintained in a cache. Subsequently when the entries from the bottom layers of the union stack are read they are checked for duplicates (in the cache) before being passed out to the user space. There can be multiple calls to readdir/getdents routines for reading the entries of a single directory. But union directory cache is not maintained across these calls. Instead for every call, the previously read entries are re-read into the cache and newly read entries are compared against these for duplicates before being they are returned to user space.
This implementation only worked for file systems that return a simple increasing offset in the d_off field for readdir(). So ext2 worked, but any file system with a modern directory hashing scheme did not.
In early 2009, I started to get interested in union mounts. I talked
to several groups inside Red Hat and asked them what they needed most
from file systems. I heard the same story over and over: "We
really really need a unioning file system, but for some reason no one
at Red Hat will support unionfs...
" I did some research on the
available implementations and decided to go to work on Jan Blunck's
union mount patch set.
In May 2009, Jan Blunck and I posted a version of union mounts that implemented in-kernel readdir() using a new concept: the fallthru directory entry. The basic idea is that the first time readdir() is called on a directory, the visible directory entries from all the underlying directories are copied up to the topmost directory as fallthru directory entries. This eliminated all the problems I knew of in previous readdir() implementations, but required the topmost file system to always be read-write. This implementation also was limited to only two layers: one read-only file system overlaid with one read-write file system because we were concerned with lock ordering problems.
In October 2009, I posted a version of union mounts that implemented some of the more difficult system calls, such as truncate(), pivot_root(), and rename(). However, implementing chmod() and other system calls that modified files without opening them turned out to be fairly difficult with the current code base. We thought the hard part was copying up file data in open(), rename, and link(), but it turned out they were somewhat easier to implement because they already looked up the parent directory of the file to be altered. For union mounts, we need the parent directory's dentry and vfsmount in order to create a new version of the file in the topmost level of the union file system if necessary. open(), rename, and link() also needed the parent directory in order to create new directory entries, so we just reused the parent in the union mount in-kernel copyup code. But system calls like chmod() that only alter existing files did not bother to lookup the parent directory's path, only the target. Regretfully, I decided to start on a major rewrite.
In March 2010, I posted a rewrite of the pathname lookup mechanism for union mounts, taking into account Al Viro's recent VFS cleanups and removing a great deal of unnecessary code duplication.
In May 2010, I posted the first version of union mounts that implemented nearly all file related system calls correctly. The four exceptions were fchmod(), fchown(), fsetxattr(), and futimensat(), which will fail on read-only file descriptors. (UNIX is full of surprises; none of the VFS experts I talked to knew that these system calls would succeed on a read-only fd.)
The central primitive in this version is a function called user_path_nd(). It is a combination of user_path(), which looks up a pathname and returns the corresponding dentry and vfsmount, and user_path_parent(), which looks up the parent directory of the file or directory given by the pathname and returns the struct nameidata for the parent. (struct nameidata is too complex to describe in full here, but suffice to say it is usually needed to create an entry in a directory.) user_path_nd() returns both the parent's nameidata and the child's path. Once we have both these pieces of information, we can do an in-kernel copyup of a file in chmod() or any other system call that modifies a file. Unfortunately, user_path_nd() is also the weakest point in this version of union mounts: it's racy, inefficient, and copies up files even if the system call fails.
The day after I posted that version, I flew to North Carolina for a long-anticipated in-person code review with Al Viro. We spent three days in his office painfully reviewing the entire union mount implementation. Al immediately figured out how to delete a third of the code I'd spent the last year carefully massaging, and then outlined how to rewrite the other two-thirds of the code more elegantly, including user_path_nd(). As a result of this code review marathon, Linux has a feature-complete implementation of union mounts that has undergone a full code review by the Linux VFS maintainer for the first time. Of course, the resulting todo list is long and complex, and some problems may turn out to be insoluble, but it's an important step forward.
The biggest design change Al suggested was to move the head of the union stack back into the dentry, while keeping the rest of the union stack in a singly linked list of struct union_dir's allocated external to the dentries for the read-only parts of the union stack. This combines the speed and elegance of Jan Blunck's original design using in-dentry pointers to the union stack, with the flexibility of Bharata B. Rao's (vfsmount, dentry) pairs, which allow file systems to be part of many read-only layers. This change removed the entire union stack hash table and the associated lookup logic and shrunk the union_dir struct from 7 members to 2. I posted this hybrid linked list version on June 15, 2010.
Most recently, on June 25th, 2010, I posted a version that implemented submounts in the read-only layers, as well as allowed more than two read-only layers again. Then I went on a two week vacation - the longest vacation I've had since I started working on union mounts - and tried to forget everything I knew about it.
Future Work
The next step is to implement the remainder of Al Viro's review comments. The last big-ticket item is rewriting user_path_nd() and the in-kernel file copyup boilerplate. After that, it's back for another round of code review from Al and the other VFS maintainers. The 2010 Linux Storage and File Systems workshop is in early August. With luck we can hash out any remaining architectural problems face-to-face at the workshop and possibly merge union mounts into mainline before it's old enough to vote. Or it might languish for another 17 years outside the kernel. Such are the vicissitudes of Linux kernel development.
Acknowledgments: I want to extend special thanks to the following people: Kevin Roderick, who provided moral support, Tim Bowen, who gave me a free day at the Spoke6 co-working space while I worked on this article, and, of course, Jake Edge, whose editorial suggestions were, as usual, right on.
The USB composite framework
Linux is widely used in mobile devices, which should not come as a surprise. It is a powerful and versatile system, and one of its strengths is its support for USB devices of all kinds. That includes "gadgets" — devices that act as USB slaves — like USB flash drives (i.e. pendrives). The USB composite framework makes writing drivers for these kinds of devices relatively easy.
As users keep more data on their mobile devices, the demand for interoperability with desktop computers increases. No one wants to buy a special cable or a "docking station" just to copy a few photos. What users want is to connect the device via a USB cable and get it working out of the box. Linux can give that to them.
Have you ever wondered how this actually works? What happens behind the scenes when a USB connection is established? Better yet, have you wondered how to write a USB gadget for your new and shiny embedded evaluation board?
In this article, I will try to shed some light on that topic.
USB overview
The Universal Serial Bus (or USB) standard defines a master-slave communication protocol. This means that there is one control entity (a master or a host), which decides who can transmit data through the wire. The other entities (slaves, devices, or gadgets) must obey and respond to the host's requests. Slaves do not communicate with each other. A host is usually a desktop computer, while the gadgets are devices such as mice, keyboards, phones, printers, etc.
People are used to seeing Linux systems in the master or host role on a USB bus. But the Linux USB stack also provides support for the slave or gadget role — the device at the other end of the wire. For example, when one connects a pendrive to a Linux host, it handles it with a usb-storage driver. However, if we had a Linux machine with a USB Device Controller (or UDC), we could run Alan Stern's File Storage Gadget (or FSG). FSG is, as its name implies, a gadget driver which implements the USB mass storage device class (or UMC). That would allow the machine in question to act as a USB drive (aka pendrive).
When a device is connected, an enumeration process begins. During this process, the device is assigned a unique 7-bit identifier used for addressing. As a consequence, up to 127 slaves (including hubs) can be connected to a single host.
Communication is based on logical pipes which join the master with one of a slave's endpoints (or EPs). There can be up to 16 endpoints (numbered from 0 to 15) on a device. Endpoint zero (or EP0) is reserved for setup requests (eg. a query for descriptors, request to set a particular configuration, etc.).
Pipes are unidirectional (one-way) and data can go to (via an IN endpoint) or from (via an OUT endpoint) the host. (It is important to remember that from a slave's point of view, an IN endpoint is the one it writes to and an OUT endpoint is the one it reads from.) There are also four transfer modes: bulk, isochronous, interrupt, and control.
![[USB Gadget's descriptors structure]](https://static.lwn.net/images/2010/usb-gadget.png)
Endpoints are grouped into interfaces which are then grouped into configurations. Different configurations may contain different interfaces, as well as have different power demands. All that information is saved in various descriptors requested by the host during enumeration. One can see them using the lsusb tool. Here is the stripped-down (and annotated) output for a Kingston pendrive:
Bus 001 Device 004: ID 0951:1614 Kingston Technology Device Descriptor: idVendor 0x0951 Kingston Technology idProduct 0x1614 bNumConfigurations 1 [only one configuration] Configuration Descriptor: [the first and only config] bNumInterfaces 1 [only one interface] MaxPower 200mA Interface Descriptor: [the first and only intf.] bNumEndpoints 2 [two endpoints] bInterfaceClass 8 Mass Storage bInterfaceSubClass 6 SCSI bInterfaceProtocol 80 Bulk (Zip) Endpoint Descriptor: [the first endpoint] bEndpointAddress 0x81 EP 1 IN bmAttributes 2 Transfer Type Bulk Usage Type Data Endpoint Descriptor: [the second endpoint] bEndpointAddress 0x02 EP 2 OUT bmAttributes 2 Transfer Type Bulk Usage Type Data
After the host receives the descriptors and learns what kind of a gadget has been connected, it can choose a configuration to be used and start communicating. At most one configuration can be active at a time.
Linux USB composite framework
There is, however, another module that implements UMC: my Mass Storage Gadget (or MSG). The obvious question is, why there are two drivers that seem to do the very same thing. This has something to do with the Linux USB composite framework.
The "old way" of creating gadgets is to get the specification and implement everything as a single, monolithic module. Gadget Zero, File Storage Gadget, and GadgetFS are examples of such gadgets.
This approach has two rather big disadvantages:
- many of the common USB functionalities (core device setup requests on EP0) have to be implemented in each and every module; and
- it can be tricky to combine the code from several gadgets into a new gadget with combined functionality.
For those reasons, David Brownell came up with the composite framework which has two advantages over the old approach:
- all of the core USB requests are implemented by the framework; and
- a single functionality or a USB composite function is developed separately from other functions as well as from the USB bus logic that is not directly related to this function. Later, such functions are combined using the composite function to form a composite gadget.
![[USB Composite Gadget's descriptors
structure]](https://static.lwn.net/images/2010/usb-composite-gadget.png)
From a composite gadget's perspective, a device has some functions grouped into configurations. One function may be present in any number of configurations. Each function may have several interfaces and other descriptors but that is transparent to the kernel module.
Put on top of the "raw" USB descriptors structure, a USB composite function can be regarded as an abstraction for a group of interfaces.
That is another excellent property of the framework — most implementation details are hidden "under the hood" and one does not need to think about them when developing a gadget. Instead of thinking about endpoints and interfaces, one thinks about functions. Therefore, FSG is a gadget developed in the "old way", whereas MSG is a composite gadget which uses only one composite function — the Mass Storage Function (or MSF). As a matter of fact, MSF has been created from FSG to allow for the creation of more complicated drivers that would have UMC as part of their functionality.
Overall driver structure
In this article, I will try to explain how to create a mass storage composite gadget. It is in the kernel already, but let's forget that FSG and MSG exist for a moment.
What is great about Linux, is that a lot has already been done and one can get results with relatively little effort. As such, I will show how to create a working driver using MSF and some "composite glue".
I will start with the structure of the module, while skipping the details of the Mass Storage Function. The first step is to define a device descriptor. It stores some basic information about the gadget:
static struct usb_device_descriptor msg_dev_desc = { .bLength = sizeof msg_dev_desc, .bDescriptorType = USB_DT_DEVICE, .bcdUSB = cpu_to_le16(0x0200), .idVendor = cpu_to_le16(FSG_VENDOR_ID), .idProduct = cpu_to_le16(FSG_PRODUCT_ID), };
The usb_device_descriptor structure has some more fields but they are not required or not important for our module. What has been set is:
- bLength and bDescriptorType
- A standard fields each descriptor has.
- bsdUSB
- The version of USB specification the device supports encoded in BCD (so 0x200 means 2.00).
- idVendor and idProduct
- Each device must have a unique vendor and product identifier pair. To avoid collisions, companies (vendors) can buy a vendor ID which gives them a namespace of 65536 product IDs to use. NetChip has donated some product IDs to the Linux community. Later, the Linux Foundation got the whole vendor ID for use with Linux. FSG_VENDOR_ID is actually NetChip's vendor ID and, along with FSG_PRODUCT_ID, that is what FSG uses.
The next step is to define an USB configuration which will be provided by the driver. It is described by a usb_configuration structure which, among other things, points to a bind callback function. Its purpose is to bind all USB composite functions to the configuration. Usually, it is a simple function, as most of the job is done prior to its invocation.
Put together it looks as follows:
static struct usb_configuration msg_config = { .label = "Linux Mass Storage", .bind = msg_do_config, .bConfigurationValue = 1, .bmAttributes = USB_CONFIG_ATT_SELFPOWER, }; static int __ref msg_do_config(struct usb_configuration *c) { return fsg_add(c->cdev, c, &msg_fsg_common); }
The msg_config object specifies a label (used for debug messages), the bind callback, configuration's number (each configuration must have a unique, non-zero number), and indicates that the device is self powered. All that the msg_bind does is bind the MSF to the configuration.
That definition is then used by the msg_bind() function, which is a callback to set up composite functions, prepare descriptors, add all configurations supported by the device, etc.:
static int __ref msg_bind(struct usb_composite_dev *cdev) { int ret; ret = msg_fsg_init(cdev); if (ret < 0) return ret; ret = usb_add_config(cdev, &msg_config); if (ret >= 0) set_bit(0, &msg_registered); fsg_common_put(&msg_fsg_common); return ret; }The msg_bind() function does the following: initializes the Mass Storage Function, adds the previously defined configuration to the USB device, and (at the end) puts the msg_fsg_common object. . If everything succeeds, it sets the msg_registered flag so it is recorded that the gadget has been registered and initialized.
With all of the above, a composite device can be defined. For this purpose, the usb_composite_driver structure is used. Besides specifying the name, it points to the device descriptors and the bind callback:
static struct usb_composite_driver msg_device = { .name = "g_my_mass_storage", .dev = &msg_dev_desc, .bind = msg_bind, };
At this point, all that is left are the init and exit module functions:
static int __init msg_init(void) { return usb_composite_register(&msg_device); } static void msg_exit(void) { if (test_and_clear_bit(0, &msg_registered)) usb_composite_unregister(&msg_device); }
They use the usb_composite_register() and usb_composite_unregister() functions to register and unregister the device. The msg_registered variable is used to ensure the device is unregistered only once.
To sum things up:
- A composite device (msg_device) is registered when in msg_init() when the module loads.
- It has a device bind callback (msg_bind()) that initializes MSF and adds configuration to the gadget.
- The configuration (msg_config) has its own bind callback (msg_do_config()), which binds MSF to the configuration.
- The really hard work is done inside the MSF.
Mass Storage Function
With the big picture in mind, lets get into the finer details: the inner workings of the Mass Storage Function. There are a couple of things to watch out for when dealing with it.
First of all, because MSF can be bound to several configurations, it needs to share some data between the instances and at the same time store information specific for each configuration. The fsg_common structure is used for shared data. An instance of this structure needs to be initialized prior to binding MSF.
Because the common object is used by several MSF instances, it has no single owner thus a reference counter is needed to decide when it can be destroyed. That's the reason for the fsg_common_put() call at the end of msg_bind() function.
Closely connected with the fsg_common structure is a worker thread which MSF uses to handle all the host's requests. When a fsg_common object is created, a thread is started as well. It terminates either when the fsg_common object is destroyed or when it is killed with an INT, TERM, or KILL signal. In the latter case, the fsg_common object may still exist even after worker's death. Whatever reason, when thread exits a thread_exits callback is invoked.
It is important to note that a signal may terminate the worker thread, but why would one want to do that? The reason is simple. As long as MSF is holding any open files, the filesystems which those files belong to cannot be unmounted. That is bad news for a shutdown script.
What Alan Stern came up with in FSG, is to close all backing files when the worker thread receives an INT, TERM, or KILL signal. Because MSF is to be used with various composite gadgets, rather than hardcoding that behavior a callback has been introduced.
The last thing to note is that MSF is customizable. The UMC specification allows for a single device to have several logical units (sometimes called LUNs, which is strictly speaking incorrect since LUN stands for Logical Unit Number). Each logical unit may be read-only or read-write, may emulate a CD-ROM or disk drive, and may be removable or not.
All of this configuration must be specified when the fsg_common structure is initialized. The fsg_config structure is used for exactly that purpose. In most cases, a module author does not want to fill it themselves, but rather let a user of the module decide the settings.
To make it as easy as possible, an fsg_module_parameters structure and an FSG_MODULE_PARAMETERS() macro are provided by the MSF. The former stores user-supplied arguments, whereas the latter defines several module parameters.
Having an fsg_module_parameters object, one may use fsg_config_from_params() followed by fsg_common_init() to create an fsg_common object. Alternatively, fsg_common_from_params() can be used which merges the call to the other two functions.
Here is how it all works when put together:
static struct fsg_module_parameters msg_mod_data = { .stall = 1 }; FSG_MODULE_PARAMETERS(/* no prefix */, msg_mod_data); static struct fsg_common msg_fsg_common; static int msg_thread_exits(struct fsg_common *common) { msg_exit(); return 0; } static int msg_fsg_init(struct usb_composite_dev *cdev) { struct fsg_config config; struct fsg_common *retp; fsg_config_from_params(&config, &msg_mod_data); config.thread_exits = msg_thread_exits; retp = fsg_common_init(&msg_fsg_common, cdev, &config); return IS_ERR(retp) ? PTR_ERR(retp) : 0; }
The msg_exit() function has been chosen as MSF's thread_exits callback. Since MSF is nonoperational after the thread has exited, there is no need to keep the composite device registered, instead the gadget is unregistered.
At this point, it should become obvious why the msg_registered flag is being used. Since usb_composite_unregister() can be called from two different places, a mechanism to guarantee that it will be called only once is needed — atomic bit operations are perfect for such tasks.
And that would be it. We are done. One can grab the full source code and start playing with it.
The beauty of the composite framework is that all the really hard stuff has been already written. One can write devices and experiment with different configurations without deep knowledge of the USB specification or the Linux gadget API. At the same time, it is a perfect introduction to some more serious USB programming.
Running
To use the gadget, one needs to provide a disk image that will act as a real USB device to the USB host. Using dd on the device is perfect for creating one:
# dd if=/dev/zero of=disk.img bs=1M count=64
With disk image in place, the module can be loaded:
# insmod g_my_mass.ko file=$PWD/disk.img
Connecting the device to the host should produce several messages in the host system log, among others:
usb 1-4.4: new high speed USB device using ehci_hcd and address 8 usb 1-4.4: New USB device found, idVendor=0525, idProduct=a4a5 usb-storage: device scan complete sd 6:0:0:0: [sdb] Attached SCSI removable disk sd 6:0:0:0: [sdb] 131072 512-byte logical blocks: (67.1 MB/64.0 MiB) sdb: unknown partition table
All that is left is creating a partition with a filesystem and starting using the pendrive:
# fdisk /dev/sdb ... # dmesg -c sd 6:0:0:0: [sdb] Assuming drive cache: write through sdb: sdb1 # mkfs.vfat /dev/sdb1 mkfs.vfat 3.0.9 (31 Jan 2010) # mount /dev/sdb1 /mnt/ # touch /mnt/foo # umount /mnt
As has been shown, the gadget works like a charm.
Conclusion
The Linux USB composite framework provides a way to add USB devices in a fairly straightforward way. Before the composite framework came along, developers needed to implement all USB requests for each gadget they wanted to add to the system. The framework handles basic USB requests and separates each USB composite function, which allows gadget authors to think in terms of functions rather than low-level interfaces and communication handling.
As one might guess, this article just scratches the surface of what the composite framework can do. The driver that was shown is a single-configuration, single-function gadget, so the advantages over non-composite gadgets is not readily apparent. A future article may look at drivers for more powerful gadgets using the composite framework.
Patches and updates
Kernel trees
Architecture-specific
Build system
Core kernel code
Development tools
Device drivers
Documentation
Filesystems and block I/O
Memory management
Networking
Security-related
Page editor: Jake Edge
Distributions
Linux on PowerPC
Until not so long ago, your author's main computer was a PowerPC machine, but the number of Linux distributions that officially support this platform is diminishing year by year. So is it still viable to run Linux on a PowerPC computer these days? We'll explore the options, which are roughly subdivided into three categories: PowerPC ports of Linux distributions, PowerPC-specific Linux distributions, and PowerPC ports of non-Linux free operating systems (the BSDs).
When Apple still sold Macs based on the PowerPC processor, the architecture was relatively well supported by mainstream Linux distributions. In 2010, PowerPC seems to have fallen off the radar. The number one reason is that there are currently not many PowerPC systems for desktop users on the market. For a time, Terra Soft Solutions sold PowerPC-based workstations, such as the YDL PowerStation, but the product has been discontinued after Fixstars Solutions acquired the company. Another popular PowerPC system for Linux users was the PlayStation 3, but Sony removed Linux support in April of this year. So, at this point, there doesn't seem to be a mainstream PowerPC desktop system you can buy. Luckily, owners of used Macs and other PowerPC systems are not left out in the cold, as they can still run free operating systems.
The Power of the community
Ubuntu supported the PowerPC platform officially until version 6.10 ("Edgy Eft"). From 7.04 on, it has still been available, but as a community port. In February 2007, Matt Zimmerman explained the decision in the ubuntu-announce mailing list:
At the moment, Canonical has still one supported PowerPC release: the server edition of Ubuntu 6.06 LTS, which will be supported on PowerPC until June 2011. The Ubuntu community picked up PowerPC maintenance for the other releases, and interested users can still download ISO images for the 7.10 through 10.04 releases in the ports section of the main Ubuntu mirror. Ubuntu's wiki contains a FAQ and a list of known issues for PowerPC users, although the information is slightly outdated.
OpenSUSE dropped official support for PowerPC in its 11.2 release in November 2009. This was done rather quietly: openSUSE 11.2 was released on November 12 without repositories and ISO files for PowerPC, but without any official word that PowerPC support had been removed. After a bug report, Novell's Michael Loeffler gave the official response:
This essentially made the openSUSE PowerPC port a community effort. Stephan Kulow clarified what this required from the community:
More than half a year later, no one seems to have picked up development and maintenance of the PowerPC port. OpenSUSE has still a POWER@SUSE wiki page with some general information. This page states that Novell is still planning a PowerPC port for SUSE Linux Enterprise Server. OpenSUSE users can discuss PowerPC-related matters in the opensuse-ppc mailing list, but, not surprisingly, discussions died out this year.
More recently, Fedora 13 dropped official PowerPC support. More specifically, PowerPC has been moved to Fedora's secondary architectures, which means that a build failure on the PowerPC platform doesn't hold back a Fedora release. Moreover, neither Fedora nor Red Hat provide hosting space or build servers for secondary architectures.
In a response to a user's outcry, Red Hat's Tom Callaway explained the reason of the move to the secondary architectures:
In short, it's up to the community to maintain the PowerPC port of Fedora if they want it to continue, but so far they don't seem to have the necessary infrastructure. More information can be found on the fedora-ppc mailing list.
Other Linux distributions with a PowerPC port
So among the Linux distributions that dropped official PowerPC support, only Ubuntu has managed to keep it alive as a community effort. But there are still a handful of distributions with "official" PowerPC support. The most important among them is Debian. This is actually the Linux distribution that your author has been running on his PowerMac G5 for years after he ditched Mac OS X. As can be seen on the debian-powerpc mailing list, there's still a lot of activity going on in Debian PPC land.
The Debian PowerPC port began in 1997 and was first officially released with Debian GNU/Linux 2.2 ("Potato"). A completely 64-bit environment doesn't exist, though. On 64-bit processors such as the G5, Debian PPC uses a 64-bit kernel with 32-bit user space. This is because the 64-bit PowerPC processors have no "32-bit mode" like the Intel 64/AMD64 architecture. Hence, 64-bit PowerPC programs that do not need 64-bit mathematical functions will run somewhat slower than their 32-bit counterparts because 64-bit pointers and long integers consume twice as much memory, fill the CPU cache faster, and thus need more frequent memory accesses. There is, however, a Debian PPC64 port in development, offering a complete 64-bit user space for those that want it.
Gentoo Linux also has a PowerPC port, both for 32 and 64 bits. The most recent ISO image is from October 2009, while the most recent stage3 file (the Gentoo base system tarball) is from May. As can be expected from Gentoo, the project has an extensive PPC handbook and FAQ. Users that get into trouble can find help on the gentoo-ppc-users mailing list.
While Arch Linux is focused on the i686 and x86-64 architectures, there is a separate spin-off project for PowerPC machines: Arch Linux PPC. The port offers a 32-bit user space, but it has various kernels for 64-bit machines. The most recent release for which an ISO file can be downloaded is 2010.02.26 with a 2.6.33 kernel. In addition, Arch Linux PPC has a special install guide for PowerPC machines.
CRUX has the same approach: the distribution is focused on the i686 architecture, but some users wanted a PowerPC port and just made it happen: CRUX PPC. Note, however, that the team is small and development is slow. The latest release is CRUX PPC 2.6 and it dates from January. There are both 32-bit and 64-bit ISO images available. In the same style as Gentoo, CRUX PPC has an extensive handbook and FAQ, as well as a cruxppc mailing list, but it is not very active.
Another general-purpose Linux distribution that supports PowerPC is T2 SDE. The project has a small but dedicated community, and the PowerPC (32-bit and 64-bit) platform is well supported. The main developer René Rebe is using it on some of his machines. Users that want to install T2 SDE on their Mac can download the recently released minimal ISO images for T2 SDE 8.0 or build the ISO file themselves. T2 SDE is not an easy-to-use Linux distribution (it's comparable to Gentoo Linux), but your author has been testing it for some time on his PowerMac G5 and was interested by the clean source-based approach.
Yellow Dog Linux (YDL), a Linux distribution specifically developed for the PowerPC architecture, closes out the list. It is based on CentOS and uses Enlightenment as its default desktop environment, although GNOME and KDE can also be installed. Before Apple's transition to the Intel architecture, Terra Soft Solutions was the only company licensed by Apple to resell Apple computers with Linux pre-installed, so it has a history with PowerPC machines.
The latest version is 6.2, released in June 2009. Users can download a big DVD ISO image from one of the mirrors. There is a list of supported hardware, which also includes non-Apple PowerPC machines, a lot of documentation about the installation and configuration, and some HOWTOs about various topics. Meanwhile, Terra Soft Solutions has been acquired by Fixstars, which refocused its Linux distribution on high performance computing and GPU systems. So, while YDL 6.2 still supports PowerPC-based Apple machines, it's main target is now the Sony PlayStation 3 and IBM pSeries platforms.
The Power to serve
For users that don't mind leaving the Linux ecosystem, there are some other options in the BSD world. FreeBSD, OpenBSD and NetBSD all have a PowerPC port, and most of the supported software is the same as on a Linux distribution, so for most practical purposes it doesn't matter if you're running Linux or BSD.
NetBSD (the operating system with the motto "Of course it runs NetBSD
") has different ports for various Power PC systems: ofppc, macppc, evbppc, mvmeppc, bebox, sandpoint, and amigappc. The relevant port for Mac Users is of course macppc, which was introduced in NetBSD 1.4.
There is a complete list of supported hardware by the NetBSD/macppc port, and there is an extensive FAQ, which includes a list of supported peripherals. The installation procedure for NetBSD/macppc is documented well to help users get NetBSD on their Mac. As for mailing lists, issues specific to NetBSD on Apple's PowerPC machines are discussed on the port-macppc mailing list, while port-powerpc is about issues relevant to all PowerPC-based NetBSD ports.
The OpenBSD/powerpc port initially supported Motorola computers, but later refocused on Apple hardware, based on code from the NetBSD/macppc port. For OpenBSD 3.0 it was renamed to OpenBSD/macppc. Support for the 64-bit G5 processor (with a 32-bit user space) was added in OpenBSD 3.9. The port's web page has an extensive list of supported hardware and peripherals, and it lists some caveats: sleep/suspend on laptops is not supported, Bluetooth and FireWire are not supported, and SATA doesn't work yet on PowerMac G5 and Xserve G5 systems. The latest OpenBSD/macppc 4.7 release has some installation instructions and users can discuss their problems on the ppc mailing list of OpenBSD.
Last but not least, FreeBSD officially supports the PowerPC port since version 7.0, although it's still a Tier 2 platform. This means that FreeBSD's security officer, release engineers, and toolchain maintainers don't fully support it yet. Nathan Whitehorn has published some installation instructions, and users can discuss matters in the freebsd-ppc mailing list.
Since FreeBSD 8.0, the PowerMac G5 and iMac G5 are supported, and the upcoming 8.1 release also supports the Xserve G5 and the late 2005 model of the PowerMac G5. Previous PowerPC Macs are already supported since version 7.0. There are some caveats, however: the current 32-bit PPC port only supports 2 GB of RAM, and 64-bit PPC support (with support for more RAM) will only be appearing in FreeBSD 9.
Conclusion
While at first sight PowerPC seems to be a dying platform, there's actually still a lot of choice for users that want to run a free operating system on their aged Mac. In the last 10 years, your author has prolonged the life of two PowerPC-based Macs by swapping Mac OS X for a Linux distribution: one time Gentoo Linux, the other time Debian. These are also the two distributions that seem to have the best PowerPC support while still being all-round enough and having a community that is big enough to be of any help. For more adventurous users, there are a lot of other options, with the source-based T2 SDE or NetBSD as notable examples.
New Releases
Mandriva Linux 2010 Spring released
Mandriva has announced the release of Mandriva Linux 2010 Spring. It contains various recent free software packages (KDE 4.4.3, GNOME 2.30.1, Firefox 3.6.6, and Xorg Server 1.7.7 for example), and has some unique features including: "'Smart Desktop', a unique technology, which offers dynamic access to all files by labelling them and grading photos, documents, emails and videos whilst safeguarding personal data through a customised approach. Ginkgo, the new graphical interface for managing data semantics, can create and explore the links between their personal data such as mails, documents, files, Web pages".
MeeGo 1.0 update for Netbooks
The first update for the Netbook experience of MeeGo v1.0 has been released. It includes an update to kernel 2.6.33.5, faster detection of USB storage devices, improved 3D performances, fixes to the web browser and email client, and more. "Many of you were quick to install our recent release of MeeGo v1.0 on your netbook. We appreciate all of the community help from those of you who tested our release and filed bugs. In fact, this update has over 100 bug fixes and is recommended for all users running MeeGo 1.0 for Netbooks." Click below for the full announcement.
Lunar Linux 1.6.5-rc1
Lunar Linux has announced the first release candidate for Lunar Linux 1.6.5. ISO images are available for i686 and x86-64. "While news and updates on our main site may have been next to nil we assure you that the wheels have been turning behind the scenes. The Lunar team have been busy keeping the modules up to date. The new ISO is also a proof that we are still in the game. Come on and help us test 1.6.5-rc1 and don't be afraid to give us suggestions on how to make Lunar even better!"
Distribution News
Ubuntu family
Minutes from the Ubuntu Technical Board meeting
Click below for the minutes from the June 29, 2010 meeting of the Ubuntu Technical Board.
New Distributions
FemtoLinux
FemtoLinux is a new distribution optimized for real-time embedded systems. It aims to have a low system call and interrupt-to-application latency and overhead, achieved by allowing critical Linux applications to run in kernel mode. It is currently available for ARM with MIPS and PowerPC ports in the works.New Linux OS REMnux Designed For Reverse Engineering Malware (threat post)
Threat post introduces a new distribution called REMnux. "A security expert has released a stripped-down Ubuntu distribution designed specifically for reverse-engineering malware. The OS, called REMnux, includes a slew of popular malware-analysis, network monitoring and memory forensics tools the comprise a very powerful environment for taking apart malicious code."
Newsletters and articles of interest
Distribution newsletters
- CentOS Pulse #1005 (July 10)
- Debian Project News (July 12)
- DistroWatch Weekly, Issue 362 (July 12)
- Fedora Weekly News Issue 233 (July 7)
- openSUSE Weekly News #131 (July 10)
- Ubuntu Weekly Newsletter, Issue 201 (July 10)
Mandriva Linux avoids bankruptcy; we test the new version (ars technica)
Ars technica takes a look at Mandriva 2010 Spring. "The OS ships with KDE 4.4.3 and version 2.6.33.5 of the Linux kernel. Mandriva has its own custom user interface theme that is used across both KDE and GNOME, and its default KDE configuration deviates from that of upstream KDE. It uses a Folder View containment as the default activity and it has a conventional application menu instead of KDE's Kickoff menu. These changes are intended to make KDE 4 feel more like the classic user experience of the KDE 3.5.x series."
OpenSolaris governing board threatens dissolution (The H)
The H reports that the OpenSolaris governing board (OGB) is considering dissolution and may relinquish control of OpenSolaris to Oracle. "At yesterday's OGB meeting, Simon Phipps, previously Sun's 'Open Source Evangelist', stated that collaboration between Oracle and the OpenSolaris community was just not happening. In his opinion, in its present form, the community no longer serves a useful purpose."
Spotlight on Linux: Pardus Linux 2009.2 (Linux Journal)
Susan Linton takes a look at Pardus Linux. "Pardus hails from Turkey, so at first boot of either image the user will find themselves faced with the Turkish language. But have no fear, F2 brings up the language selector where one can choose English. Pardus is developed by the Scientific & Technological Research Council of Turkey, an advisory office to the Turkish government, which is probably why this distribution feels so professionally done. Original tools and graphics appear throughout giving Pardus a very consistent look and feel."
Page editor: Rebecca Sobol
Development
Python's Mercurial migration
Big projects switching to a distributed version control system (DVCS) is pretty common occurrence these days, but it is not always easy or straightforward. Guido van Rossum first announced that Python would move to Mercurial (aka Hg) in March 2009, but the project is still using Subversion (aka svn) more than a year later. While the conversion is still in the works, the schedule for the switch is still up in the air. Recent discussions have pushed it back until sometime later this year, or possibly early next year.
There appear to be a number of different things that got in the way of adopting Hg, but clearly the biggest has been problems with how it handled end-of-line (EOL) conventions. As described by Brett Cannon, the Python folks were under the impression that Hg had ways to handle EOL conventions that would make it act like Subversion's svn:eol setting. When that turned not to be the case, it set the conversion back.
Efforts were made to design a Mercurial extension—which is written in Python after all—that would "do the right thing" for line-endings on Windows, Linux, and Mac OS X, while not making a mess of binary files. That culminated in an EOL Extension that was released as part of Mercurial 1.5.4 in June of this year. Some of the time it took to get from a design to a working, released extension can be blamed on Mercurial hacker Martin Geisler's PhD work, which is something of a recurring theme.
Cannon, who did much of the work in evaluating Git, Bazaar, and Mercurial before Python chose a DVCS, was delayed shortly after the decision by work on his PhD. That led Dirkjan Ochtman to step in and write Python Enhancement Proposal (PEP) 385, which describes the migration path from svn to Hg. Now Ochtman is unavailable to work on the transition until some time in August due to work on his Master's thesis.
It is a tad amusing to note that projects might be best-served by contributors who either already have advanced degrees or have decided not to pursue them, but that, of course, is a trivialization. There does seem to be a lack of people interested in making the transition, at least in any hurried fashion, or perhaps there is a lack of pressure to make the change from the development community side. In some ways, it would seem that Mercurial has moved into the "nice to have, but not required" bucket, at least for now.
The timing of making a change to a different VCS can be tricky. There are
lots of dependencies for ongoing release efforts and the like. The
unavailability of Cannon and Ochtman led Martin v. Löwis to put out a call for volunteers. "If nobody volunteers, I propose that we release 3.2
from Subversion, and reconsider Mercurial migration
next year.
" The first alpha of 3.2 is scheduled for early August,
while the final release is planned for January of next year. Waiting until
after 3.2 would likely mean that the Hg transition will have taken Python
around two years.
Some folks did volunteer, and there was talk of releasing the first 3.2 alpha from svn, with later releases coming out of Hg, but no firm decision seems to have been made. There is also some resistance to phasing out svn. Anatoly Techtonik is concerned about moving away:
But Stephen J. Turnbull disagrees with that assessment. The transition was planned because it would make developers' lives easier:
Turnbull notes that a "new proponent and supporting
cast
" are actively being sought for the transition.
In addition, he is optimistic about the timing:
At this point, it is in the hands of the Python team. Before the completion of the EOL Extension, it was relatively easy to find other things to work on while awaiting the extension. Now that the ball is firmly back in their court, the importance of Mercurial to the Python hackers will likely become more clear. If the team is unable to find the time to make that switch, it is by no means the end of the world, it is just an indicator that many are fairly comfortable with their current workflow.
That may be a little surprising to some, but each project has its own way of working and some are more suited to a DVCS development style than others. Python has always been fairly rigorous in its processes, with PEPs for all major—and many minor—decisions, and a pretty conservative development style. Moving unhurriedly to switch to Mercurial may fit in with that just fine.
Brief items
Quote of the week
A secondary reasoning for some open source licenses might be to prevent others from running off with the good stuff and selling it for profit. The GPL is big on that, but it's never motivated me with Python (hence the tenuous relationship at best with the FSF and GPL software).
App Inventor for Android
Google has introduced App Inventor for Android. It's still in closed beta, but you can request access through the website. "To use App Inventor, you do not need to be a developer. App Inventor requires NO programming knowledge. This is because instead of writing code, you visually design the way the app looks and use blocks to specify the app's behavior." (Thanks to Keith Edmunds)
Campsite 3.4
Campsite 3.4 has been released. "Campsite, the free, open source, multilingual content management system for news websites has been released in version 3.4 and features over fifty bug fixes and improvements. Building upon the stability and security improvements in June's 3.3.6 release, this latest version includes dramatically improved search options (both internally and for external search engines), a clean up of the graphical interface (new-look icons and admin interface) and easier installation." LWN looked at Campsite in March 2009.
Announcing FOSSology 1.2.0 Release
The FOSSology Project has announced the release of FOSSology 1.2.0. "FOSSology is a Free Open Source Software (FOSS) project built around an open and modular architecture for analyzing software. Existing modules include license analysis, meta data extraction, Copyright/URL/email scanner, RPM and Debian package analysis, and MIME type identification. This open source software tool analyzes a given set of software packages, and reports items such as the software licenses used by these packages."
GNOME 2.31.5 unstable release
The GNOME 2.31.5 development release is available. "2.31.5 is out and features a lot of modules ported to GTK+ 3; oh sure there are bugs, and disabled features, but 1) this is temporary, and 2) this should be seen as an opportunity for sleepless nights in The Hague. Isn't it a wonderful world?"
GNOME Shell 2.31.5 released
GNOME Shell 2.31.5 is now available. "Note: This release changes the GTK+ dependency to the GTK+ 3.0 development series. Mutter must now be built with the --with-gtk=3.0 option to work correctly with GNOME Shell."
GTK+ 2.21.5 released
GTK+ 2.21.5 is the latest stable release of GTK+. "GTK+ 2.22 is planned to be the last stable GTK+ 2.x release, to be released in parallel with GTK+ 3. It will not receive major feature work beyond API additions that are required to facilitate porting to GTK+ 3."
GTK+ 2.90.5 released
GTK+ 2.90.5, a development release leading toward 3.0, is now available. "GTK+ 3 will be parallel installable with GTK+ 2.x, and this release has been prepared to test this by renaming all .pc files, libraries, include paths, and so forth, to include a '3.0' component."
KDE SC 4.5 RC2 Out
KDE has announced the second release candidate of the upcoming KDE Software Compilation 4.5. "The final version will be available in August 2010 and this RC is intended for testers and early adopters who can help by finding and reporting bugs. It will also interest those who want an early look at what is coming to their desktops and netbooks this summer."
libguestfs 1.4.0
libguestfs 1.4.0 is a major new release of libguestfs. "libguestfs is a library and a set of tools for accessing and modifying disk images and virtual machines. You can use this for viewing and editing files inside guests, scripting changes to VMs, monitoring disk used/free statistics, P2V, V2V, performing partial backups, cloning VMs, and much more."
SeaMonkey 2.1 Alpha 2
SeaMonkey 2.1 Alpha 2 is available for testing. "Please note that this pre-release version is still intended for developers and testers only. As always, we appreciate any feedback you may have and encourage users to help us by filing bugs."
Newsletters and articles
Page editor: Rebecca Sobol
Announcements
Non-Commercial announcements
Python Software Foundation is sponsoring sprints
The Python Software Foundation has put out a call for requests for funding assistance for coding sprints. Up to $250 is available for each sprint, and more information can be found on the Python sprints blog or by clicking below for the full announcement. "Whether you call them Sprints, Hackfests, Hack-a-thons, or any other name, they're a great way to hang out with like-minded developers and work on common code. Sprints are an unbeatable way to build friendships and contacts that will last for years to come, and they're a great way to learn about something new if you're just starting out. [...] The Python Software Foundation has set aside funds to be distributed to world-wide sprint efforts. We're anticipating 2-3 events per month focused on covering topics to help the entire community".
KDE e.V. Quarterly Reports Relaunched
KDE.News looks at the relaunch of KDE e.V. quarterly reports. "KDE e.V. is the legal body which holds our finances and represents the project in a range of issues. Our Quarterly Reports have restarted with a special bumper issue covering 2009 Q2 to 2010 Q1. It covers the many sprints which e.V. organises for our contributors to get together in person with their KDE teams. It also covers events e.V. has helped KDE to attend and the working groups it oversees."
Articles of interest
Open Source Hardware Definition released, first Open Hardware Summit
BoingBoing covers the launch of the "Open Source Hardware Definition" and the announcement of the first Open Hardware Summit. "Open Source Hardware (OSHW) is a term for tangible artifacts -- machines, devices, or other physical things -- whose design has been released to the public in such a way that anyone can make, modify, distribute, and use those things. This definition is intended to help provide guidelines for the development and evaluation of licenses for Open Source Hardware."
Multi-Touch Sugar on XO-1.75 ARM Laptop Coming Soon (OLPC News)
OLPC News reports on news of the XO-1.75 laptop. The article mostly quotes from an email by Chris Ball of OLPC, in which he mentions a touchscreen for XO-1.75 and continuing to use Fedora as the distribution, even though the new hardware is ARM-based. In addition, Sugar will get multitouch: "We've begun working on modifications to Sugar to enable touchscreen and multitouch use (the XO-1.75 will have a touchscreen, as will future OLPC tablets based on its design), and we'll continue to do so. The first outcome from this work is Sayamindu Dasgupta's port of the Meego Virtual Keyboard to Sugar".
Supposed 'Proof' Of SCO's Infringement Claims Against Linux Seem Lacking (Techdirt)
In what should come as no surprise to most folks, the alleged "proof" of SCO's infringement claims, as recently posted by SCO lawyer Kevin McBride—Darl's brother—is weak, at best. Techdirt takes a look and is unimpressed. "If you look through the files, you don't have to be a programmer to start questioning the copyright claims. Most of the lines are not direct copies at all, and seem to be on really, really, really basic functions -- the type of thing that just about anyone would program to create that functionality. In other words, it's difficult to see how there would be any copyright on that code at all, since it was hardly original or requiring any form of creativity. Others in the Slashdot comments point out that some of the code appears to have originated in BSD code, outside of what SCO was claiming it held rights to, and others suggest at least parts of the code came from a separate third party. Furthermore, even looking through the files it's difficult to find many cases where you could even claim 'cut-and-paste copying' as was alleged." Much (all?) of it seems like the same stuff that was debunked back in 2003.
Weir: ISO/IEC JTC1 Revises Directives, Addresses OOXML Abuses
On his blog, Rob Weir looks at changes to the ISO standardization process, that would eliminate some of the abuses that were seen in the OOXML standardization effort. In 2007 and 2008, Microsoft pushed its office document format (OOXML) through the ISO fast track process, which allowed it to become a second ISO standard—the first was Open Document Format (ODF). "On July 1st, 2010 a new set of rules (directives) took effect in ISO/IEC JTC1 including new processing and voting rules for JTC1 Fast Track submissions. If these rules had been in effect back in 2007, OOXML would have died after its initial ballot." (Thanks to Martin Jeppesen.)
New Books
Ubuntu for Non-Geeks, Fourth Edition--New from No Starch Press
"Ubuntu for Non-Geeks", 4th Edition, is available from No Starch Press.MySQL High Availability--New from O'Reilly
"MySQL High Availability", Tools for Building Robust Data Centers, is available from O'Reilly.JavaScript Cookbook--New from O'Reilly
"JavaScript Cookbook", Programming the Web, is available from O'Reilly.
Calls for Presentations
Linux Plumbers Conference call for working session submissions now open
The Linux Plumbers Conference (LPC) has opened up its call for the submission of working session topics that would become part of the "micro-conferences" that make up LPC. Each micro-conference has a number of related working sessions centered around a particular topic (Power Management, Virtualization, Mono, Desktop, Tracing, and so on) and is a half-day in length. "The topics that will actually have working sessions scheduled at the LPC will depend on the submissions to the microconference and on the ability of its respective community to organize a successful working session; see the "Responsibilities of a working session leader" page on the LPC wiki for more details." LPC will be held in Cambridge, Massachusetts November 3-5.
Kiwi PyCon 2010 Call for Participation
Kiwi PyCon will be held in Paihia/Waitangi in the Bay of Islands November 20-21, 2010. Proposals are due by August 2, 2010.DeepSec 2010 - Call for Papers
DeepSec In-Depth Security Conference 2010 will be held in Vienna, Austria, November 23-26, 2010. The call for papers closes July 31, 2010. "Additionally we call for [submission] from young security researchers of 21 years and younger for exhibits of their own research during the conference."
Upcoming Events
Events: July 22, 2010 to September 20, 2010
The following event listing is taken from the LWN.net Calendar.
Date(s) | Event | Location |
---|---|---|
July 17 July 24 |
EuroPython 2010: The European Python Conference | Birmingham, United Kingdom |
July 19 July 23 |
O'Reilly Open Source Convention | Portland, Oregon, USA |
July 21 July 24 |
11th International Free Software Forum | Porto Alegre, Brazil |
July 22 July 23 |
ArchCon 2010 | Toronto, Ontario, Canada |
July 22 July 25 |
Haxo-Green SummerCamp 2010 | Dudelange, Luxembourg |
July 24 July 30 |
Gnome Users And Developers European Conference | The Hague, The Netherlands |
July 25 July 31 |
Debian Camp @ DebConf10 | New York City, USA |
July 31 August 1 |
PyOhio | Columbus, Ohio, USA |
August 1 August 7 |
DebConf10 | New York, NY, USA |
August 4 August 6 |
YAPC::Europe 2010 - The Renaissance of Perl | Pisa, Italy |
August 7 August 8 |
Debian MiniConf in India | Pune, India |
August 9 August 10 |
KVM Forum 2010 | Boston, MA, USA |
August 9 | Linux Security Summit 2010 | Boston, MA, USA |
August 10 August 12 |
LinuxCon | Boston, USA |
August 13 | Debian Day Costa Rica | Desamparados, Costa Rica |
August 14 | Summercamp 2010 | Ottawa, Canada |
August 14 August 15 |
Conference for Open Source Coders, Users and Promoters | Taipei, Taiwan |
August 21 August 22 |
Free and Open Source Software Conference | St. Augustin, Germany |
August 23 August 27 |
European DrupalCon | Copenhagen, Denmark |
August 28 | PyTexas 2010 | Waco, TX, USA |
August 31 September 3 |
OOoCon 2010 | Budapest, Hungary |
August 31 September 1 |
LinuxCon Brazil 2010 | São Paulo, Brazil |
September 6 September 9 |
Free and Open Source Software for Geospatial Conference | Barcelona, Spain |
September 7 September 9 |
DjangoCon US 2010 | Portland, OR, USA |
September 8 September 10 |
CouchCamp: CouchDB summer camp | Petaluma, CA, United States |
September 10 September 12 |
Ohio Linux Fest | Columbus, Ohio, USA |
September 11 | Open Tech 2010 | London, UK |
September 13 September 15 |
Open Source Singapore Pacific-Asia Conference | Sydney, Australia |
September 16 September 18 |
X Developers' Summit | Toulouse, France |
September 16 September 17 |
Magnolia-CMS | Basel, Switzerland |
September 16 September 17 |
3rd International Conference FOSS Sea 2010 | Odessa, Ukraine |
September 17 September 18 |
FrOSCamp | Zürich, Switzerland |
September 17 September 19 |
Italian Debian/Ubuntu Community Conference 2010 | Perugia, Italy |
September 18 September 19 |
WordCamp Portland | Portland, OR, USA |
September 18 | Software Freedom Day 2010 | Everywhere, Everywhere |
If your event does not appear here, please tell us about it.
Event Reports
Ruby on Rails Community Shines at RailsConf 2010
O'Reilly Media takes a look at last June's Ruby on Rails conference. "Chairs Chad Fowler and Ben Scofield created a program that highlighted the vibrant and expanding nature of the Rails community itself. While the exploration of Rails 3 attracted many, the conference explored many other areas of the Rails landscape. Featured speakers at RailsConf 2010 included Michael Feathers of Object Mentor, Inc., David Heinemeier Hansson of 37signals, Yehuda Katz of Engine Yard, Inc., Bob Martin of Object Mentor, Inc., Derek Sivers of Thoughts, Ltd., and Gary Vaynerchuk of VaynerMedia."
Page editor: Rebecca Sobol