LWN.net Weekly Edition for July 23, 2015
Guido on Python
Guido van Rossum's EuroPython 2015 keynote was billed as part prepared remarks, part Q&A, but he changed all that when he stepped up on the stage. Instead, it would all be Q&A, but he did prime the pump with some questions (and answers) of his own before taking audience questions. Topics included Python 3 (and 3.5), why there won't be a 2.8, why there are so many open bugs, PyPy, and what he hates about Python.
Django Girls
Van Rossum's first question to himself was about what he thought of Django Girls—the subject of the previous day's keynote. It was a great talk, he said, and he loved the storytelling. There will be none of that in his talk, nor any "pretty slides". He was stunned when he "heard that Ola ... or Ola ... had drawn the squirrels and badgers" for those slides.
Another aspect that he liked was their statement that they didn't know what they were doing. It reminded him of when he started working on Python 25 years ago. He didn't know what he was doing then, either. For example, he had no idea that a programming language needed a community with lots of different roles.
He was also quite impressed by the "strong brand" they have created in one year. "I predict that Ola and Ola, and Django Girls, will go really far."
Python versions
Shifting gears, his next query was on why developers would switch to Python 3. "Why can't you just give up on Python 3?", he asked himself rhetorically. But he is not saying that people should switch. He does want them to, but it is "a lot of hard work that could be spent on other things", such as features for their application or web site. Python 2.7 is not dead yet and will be supported with security fixes and, perhaps, security features for the next five years. Porting to Python 3 is a lot of grunge work, so why bother?
![[Guido van Rossum]](https://static.lwn.net/images/2015/ep-vanrossum1-sm.jpg)
Python 3 is a "much better language" than Python 2, for one thing. It is much easier to teach. For example, the Django Girls workshops are all based on Python 3. That wouldn't have been possible if the Django developers hadn't done the grunge work to port the framework. That makes for a more pleasant first experience with the language (and the framework).
It is also getting better over time. There is "lots of cool new stuff" in Python 3.5, for example. Python 2 is a fine language and will remain exactly what it is, which is kind of asymptotically approaching 2.7-perfect, he said. The only way to benefit from all of the work that the core developers are doing is by moving to Python 3.
The perennial question of why not make a Python 2.8 release was next up, though Van Rossum noted that maybe that particular question was getting somewhat dated at this point. Python 2.8 wouldn't solve any of the problems that make people want it. Either it would have no new features, which means there would be no reason not to just stay at 2.7, or the floodgates get opened for backports from Python 3. That would make porting to 2.8 nearly what is needed to port to 3.
Unicode is, of course, the big hurdle to moving to Python 3. But, "enough is enough". So Python 2 is in a state where it will get no new features. That allows the core developers to focus their energy on making Python 3 better.
He then moved on to Python 3.5, which is due in September. He would have trouble choosing a favorite feature from the release because there are "way too many cool things" in it. For example, the performance improvement coming from os.scandir() is great, but it probably won't even be noticed by most. There is a small group of Python users that will be happy to see the new matrix multiplication operator. Numeric packages like NumPy and others will be able to start using it, which will allow writing matrix multiplication in a "much more natural fashion than calling a function".
Perhaps his favorite 3.5 feature should be type hints, since it is a PEP he worked on himself. It took a lot of work for the PEP to get accepted, which is a little bizarre since he is the benevolent dictator for life (BDFL) and could accept his own PEP. But he wanted to have independent review and acceptance of the PEP, which Mark Shannon was graciously willing to provide as the BDFL delegate, he said.
If you caught him unaware, though, he probably would name the new async and await keywords for coroutines as his favorite. It was the last PEP accepted for 3.5 and it provides a more natural way of specifying coroutines.
Open bugs
Someone recently asked him about all of the open bugs in the Python bug tracker. If you pick a random open bug, you will find that it probably has patches attached to it, a bunch of discussion, and even renowned core developers saying that the patches need to go in, but the bug is still not fixed. Is it because of an old boys' network or lame core developers? What needs to be done to get those patches applied?
The situation is the same for any large project, he said. Bugs that can't be closed right away, due to things like misread documentation, tend to pile up. They can be hard to reproduce due to the hardware or environment, for example. But those kinds of bugs don't have patches attached.
There are also bugs that are feature proposals that do have patches attached, but there is a general hesitation to accept changes like that because there is concern that they aren't useful, won't mesh with other similar language features, or that they will cause backward incompatibilities. It is hard to take patches without breaking things all the time.
In addition, the core developers all have a lot on their plates and no one is paid to merge patches for core Python. So if none of the core team cares about a particular patch or feature, they may not find the time to shepherd it through the merging process.
In a company, things are a little different. People are paid to do some amount of grunge work, but with open source you have to volunteer to do unpleasant tasks. Some core developers have been doing that for so long that they want a break from that kind of grunge work. These are some of the many reasons that there are lots of open bugs with long histories in the bug tracker.
Lastly, there is a statistical effect that many overlook. If you pick any bug at random, including closed bugs, you would likely get a closed bug. Many bugs are closed quickly and bugs that are easy to fix tend to get fixed quickly. But the average lifetime of an open bug grows linearly with the age of the project, he said.
The GIL
Someone from the audience asked about the global interpreter lock (GIL), looking for more insight into the problem and how it is being addressed. Van Rossum asked back with a grin: "How much time have you got?" He gave a brief history of how the GIL came about. Well after Python was born, computers started getting more cores. When threads are running on separate cores, there are race conditions when two or more try to update the same object, especially with respect to the reference counts that are used in Python for garbage collection.
One possible solution would be for each object to have its own lock that would protect its data from multiple access. It turns out, though, that even when there is no contention for the locks, doing all of the locking and unlocking is expensive. Some experiments showed a 2x performance decrease for single-threaded programs that didn't need the locking at all. That means there are only benefits when three or more threads and cores are being used.
So, the GIL was born (though that name came about long after it was added to the interpreter). It is a single lock that effectively locks all objects at once, so that all object accesses are serialized. The problem is that now, 10 or 15 years later, there are multicore processors everywhere and people would like to take advantage of them without having to do multiprocessing (i.e. separate communicating processes rather than threads).
If you were to design a new language today, he said, you would make it without mutable (changeable) objects, or with limited mutability. From the audience, though, came: "That would not be Python." Van Rossum agreed: "You took the words out of my mouth." There are various ongoing efforts to get around the GIL, including the PyPy software transactional memory (STM) work and PyParallel. Other developers are also "banging their head against that wall until it breaks". If anyone has ideas on how to remove the GIL but still keep the language as Python, he (and others) would love to hear about it.
PyPy
He was asked about PyPy, whether he used it and whether it might someday become the default interpreter. He does not use PyPy, but he does download it once in a while, plays with it for a few minutes, and likes what he sees. He uses Python in two modes, either writing a short little script to get something done, for which he just uses one of the interpreters he already has built on his system, or as a Dropbox engineer deploying Python code to its cluster.
The Dropbox cluster runs a modified Python 2.7, he said, which elicited audience laughter. "I said it, it is no secret", he said. Some parts of Dropbox do use PyPy where it is faster, but the company is worried that some subtle incompatibility will produce weird bugs that are hard to track down. "We have enough of those already".
PyPy shows that you can execute Python faster than CPython. It also provides a testbed where interesting ideas like STM can be tried. But conservative principles lead people to only use PyPy when they know they need the speed. The problem is that by the time you find that out, you have already deployed to enough machines that it makes switching hard. In that, it is like the problem with switching to Python 3.
Dropbox has a lot of third-party dependencies, some of which cannot even be rebuilt from the sources that it has. That is generally true of any company that has millions of lines of Python in production; he also saw it at Google. That also makes switching hard.
In summary, PyPy is a "really cool project", but there are checkboxes that it needs to satisfy that "are hard to check off". He half-jokingly suggested that perhaps PyPy needed to hire Ola and Ola from Django Girls to help create a bigger community around the project.
Favorites
![[Guido van Rossum]](https://static.lwn.net/images/2015/ep-vanrossum2-sm.jpg)
Five short questions about his favorites was up next. Favorite web framework? He said he only writes one web app in any framework and that the last he tried was Flask. Favorite testing library? He mostly just uses unittest and mock from the standard library. Editor? He uses Emacs, but started out with vi (both of which were greeted with applause, presumably by different sets of audience members). He still uses vi (or Vim) occasionally, but if he does that for five minutes, it takes him fifteen minutes to get used to Emacs again.
What is his favorite language besides Python? He used to say C, but "that's kind of boring". People he trusts tell him that modern C++ is a good language. He likes Go, but hasn't written anything significant in it. From talking with the designers, he likes the looks of Swift, which stole a bunch of things from Python. It is easy to steal bad stuff from languages you like and end up with an incoherent pile of features, but Swift's designers appear not to have done that. Finally, favorite exception? He chuckled and answered KeyboardInterrupt to more applause and laughter.
And what he hates
The final question was about what he hates in Python. "Anything to do with package distribution", he answered immediately. There are problems with version skew and dependencies that just make for an "endless mess". He dreads it when a colleague comes to him with a "simple Python question". Half the time it is some kind of import path problem and there is no easy solution to offer.
With that, his time was up. The EuroPython organizers had a gift for each of the keynote speakers: a Basque beret and bandana. They were presented to Van Rossum at the end of the talk (seen above at right).
A look at the Fotoxx image editor
Note: several of the project sites linked to below are temporarily offline, evidently due to a storage fault incident at SourceForge. Hopefully they will be back online shortly.
Image editing, like a great many tasks, tends to be dominated at any one time by a small handful of applications. For example, at the moment, the most popular programs for editing photos are probably GIMP, darktable, digiKam, and RawTherapee. A few years ago, the list might have included Rawstudio, F-Spot, Geeqie, and gThumb. Tastes change; individual projects gain and lose steam, and what counts as state-of-the-art technology shifts over time. Nevertheless, at any given time, most of the current crop of applications tend to adhere to the same general approach where user-interface and interaction decisions are concerned. So it is all the more intriguing to encounter a project like Fotoxx, an image editor that takes its own approach. The latest release recently became available, and offers an interesting editing experience.
Fotoxx has been in development since mid-2008. The latest release, version 15.07, was unveiled in early July. Packages are available in Debian format and there are the requisite source-code bundles for other distributions. The only external dependency that might cause some trouble is the raw-photo processing package UFRaw. UFRaw is most often used as a plug-in for GIMP, so it might need to be installed for users who favor some other raw processor.
In some respects, Fotoxx is a standard image-editing tool. It lets the user index their image collection (in place, so images are not needlessly duplicated), browse and search through it, and perform a wealth of corrections and transformations on individual images or in batches.
![[Fotoxx feature menus]](https://static.lwn.net/images/2015/07-fotoxx-menu-sm.png)
What makes Fotoxx distinct, though, is its atypical user interface, which has seemingly evolved over the years along a path completely different from that of its contemporaries. Fotoxx uses GTK+ as its GUI toolkit, but it does not sport a tool palette or control panels that resemble any of those used by GIMP, darktable, and the like. In fact, it eschews any number of standard GTK+ practices—such as having a menu bar at the top of the window.
Instead, there is a single strip of buttons down the left-hand side of the application window. Clicking on a button pops up a floating text menu of available features, and almost all of the features open their own pop-up windows filled primarily with text-labeled buttons rather than graphics. For some tools, this is not a big change. Adjusting the hue of the image, for example, requires only a few sliders: the effects of moving those sliders are visible immediately on the image, so no other UI elements are required.
For other tools, the text-label approach is more challenging. The paint/clone tool, for instance, uses text labels to indicate the radius and transparency level of the paintbrush. GIMP's approach is clearer, simply showing a circle of the appropriate size and opacity. The text-driven UI is also interesting because it has some absolute limits: there are some controls where only a graph will do, such as adjusting brightness or tone curves. For those tools, Fotoxx displays a graph.
![[Tone-mapping in Fotoxx]](https://static.lwn.net/images/2015/07-fotoxx-tonemap-sm.png)
The other manner in which the Fotoxx UI differs from its contemporaries is that almost all of the pop-up windows it uses to provide features are modal. That is, they sit on top of the main image window and take control of the interface; until you are done with one tool or filter and close its window, you cannot open a different tool. This design decision leads to some interesting side-effects—such as a tendency toward a step-by-step, linear processes to perform editing tasks, as opposed to image tools that you can open up and fiddle with haphazardly.
Some of the standard editing features certainly suffer as a result. When selecting part of an image, Fotoxx pops up a window filled with checkboxes and text buttons that correspond to the various selection modes (drawing boxes, drawing freehand lines, select-by-color, and so on). You can construct your selection area by alternating between the tools available, drawing individual selection regions that appear on the image as red outlines. When you are done, you click on the "Finish" button, then must individually click in each zone of the image to activate the selection. When selecting complex or compound shapes, this becomes tedious quickly.
![[Selection in Fotoxx]](https://static.lwn.net/images/2015/07-fotoxx-select-sm.png)
On the other hand, some features benefit from the approach. For example, the perspective-correction tool is among the simplest of any image editor. You merely click on four points in the image (in any order), then click "Apply" to transform the image so that the quadrilateral you have chosen becomes a proper rectangle. The corresponding GIMP tool uses a floating grid rendered on top of a preview image—which can be difficult to see through and unresponsive to manipulate.
Apart from the novel user interface (which can certainly be deemed a plus or a minus, depending on the individual user's inclinations), Fotoxx excels in the areas of speed and simplicity. Image operations are fast and, importantly, that speed includes showing an immediate preview of the effect in question on the open image. Many of GIMP's effects, by comparison, provide only a thumbnail-sized preview of their output. That can inadvertently add time as you adjust the settings and sliders, then must pan and zoom around the thumbnail preview to see if your changes produce the desired outcome.
Naturally, simplicity is a double-edged sword. Darktable and GIMP (especially GIMP combined with the G'MIC plugin) offer a dizzying array of filters and effects. For simple editing of photos that do not suffer from major defects, darktable and GIMP can be on the sluggish side. Applications that focus on "image-collection management" (such as digiKam and GNOME Photos) generally offer quick-adjustment features, but those applications also have a tendency to try taking over one's image collection even when not asked—scanning your home directory and firing up databases and indexing processes.
Fotoxx fills in nicely for these situations. It does not try to force you into indexing your complete photo archive (or, worse yet, copying it to the application's preferred location), but it provides access to color and tone adjustments, sharpness and noise filters, and standard retouching tools. And, if the adjustments needed do go beyond what Fotoxx itself can handle, the application allows you to open the image in GIMP by clicking on the "Tools" -> "Plugins" -> "GIMP" option.
This is not to say that Fotoxx is lacking in powerful features. Recent releases have added a "World Maps" feature that lets you view all of your geotagged images on a global, zoomable map. There is also support for some specialty image-editing operations like exposure stacking (which is used, for example, to combine multiple dim astrophotography images into a single photo) and panorama stitching. Such specialized features, though, tend to require the user to make a large time investment both behind the camera and in front of the keyboard, so comparing them to the competition (e.g., Hugin) objectively can be difficult.
For everyday editing, however, Fotoxx is well worth keeping around. Its peculiar interface may occasionally cause some frustration, but it also prompts some "why haven't other projects thought of that?" moments.
Django Girls one year later
Though it got a bit of a late start due to some registration woes, the first day of EuroPython 2015 began with an engaging and well-received keynote. It recounted the history of a project that got its start just a year ago when the first Django Girls workshop was held at EuroPython 2014 in Berlin. The two women who started the project, Ola Sitarska and Ola Sendecka, spoke about how the workshop to teach women about Python and the Django web framework all came together—and the amazing progress that has been made by the organization in its first year.
It all started when Sitarska and Sendecka met while organizing DjangoCon 2013 that was held in their home country of Poland. They decided to hold the event in a circus tent at a horse racing track in Warsaw. They were able to make that event work, which provided a strong bond that obviously continues to this day. Sendecka said that experience is a great way to get to know someone and that they both recognized they could pull off "crazy things" together.
![Ola Sitarska (l) and Ola Sendecka (r) [Ola Sitarska and Ola Sendecka]](https://static.lwn.net/images/2015/ep-olas-sm.jpg)
It is, they noted, quite a coincidence that their names are the same length and only differ by a few letters; both also come from the same region of Poland (Silesia). They now live in London and both work as Django developers for a company called Potato. Perhaps unsurprisingly, some people think there is only one "Ola", which results in a fair amount of misdirected email and other types of confusion.
A fable
As a way of introducing Django Girls, they began with a fable of sorts that was illustrated with some eye-catching drawings made by Sendecka (slides at Speaker Deck). The story was about "Liz", who is a squirrel who is fascinated by technology and programming in particular. As she makes her way into the "forest of technology", though, she finds that there are few squirrels who are interested in technology. In fact, most of those who are learning about technology in the forest were all very similar to each other, but much different from her.
In fact, the others were badgers, she discovered. She wanted to fit in, but always stood out from the badger pack. They were generally nice, and she had nothing against badgers, but she could feel the eyes of the badgers on her whenever she entered a room and she was often "complimented" with lines like: "You are not like other squirrels" or "You are pretty good at technology for a squirrel."
She realized that the badgers knew lots about technology, so she thought she should perhaps become more badger-like to fit in. But that didn't change anything, she was still an outsider. At one point she organized a technology event and was asked by a badger whether she was just there for social reasons. She constantly had to prove her knowledge of technology, while badgers who knew far less than her were able to speak up freely.
Liz started to lose confidence in herself, worried that she was too shy and reserved to ever fit into the technology crowd, even though she loved the technical aspects of the field. She was able to make some friends among the badgers, though when she looked closely, she realized they weren't really badgers. Instead, they were really various other types of animals that only just kind of looked like badgers. The support from these friends helped her push on with her studies.
After a while, Liz realized that the problem wasn't with her, it was with the technology forest itself. She had to do so much more than badgers did to get the same recognition, but when she brought that subject up, it was not well-received, or even believed, by the badgers. She asked around about the problem on the internet and got the predictable responses about squirrel's inherent inferiority and inability to ever truly master technology.
Liz despaired of the situation ever changing. She was too tired to fight every day for her place, but then, through a fortunate series of events, she met another squirrel who loved technology. This squirrel was also named "Liz" and they became fast friends. She finally had someone with whom she could share her frustrations of trying to live in the forest of technology. She realized that she is not the only squirrel who loved technology, but was as intimidated and scared by the badger's world as she was.
Liz and Liz started to think about how awesome it would be if there were more squirrels that could get involved with technology and who could learn to love programming the way they did. So they came up with a crazy plan to teach other squirrels how to code. They told all of their friends about the idea and with their support, and the help of lots of others who joined in, the idea became a reality.
In the year since then, thousands of squirrels have learned how to program. It is all because two little squirrels met at the right time and became excited about this crazy idea. Today, they said, Liz is standing on the stage at EuroPython telling the story of this journey and of a dream that became a reality. That dream is Django Girls.
Teaching Python and Django
Sitarska and Sendecka started organizing the first Django Girls workshop just two months before last year's conference. It was targeted at teaching women who were complete beginners and had "never written a line of code in their life". In the year since, they have seen over 1600 women attend these workshops from "literally all over the world".
After a meeting with one of the EuroPython organizers, Sitarska got the idea to run a workshop. She immediately sent Sendecka email asking if she wanted to help. In something of a massive understatement, in the email she said "I don't think it's gonna be a lot of work ...". Sendecka responded "she lied" with a laugh. The idea was to get twenty students and six coaches for the workshop and to use an existing Django tutorial from the internet.
So they started working on putting the workshop together that day. But, most of the time, "we had absolutely no idea what we were doing". The amount of work started to snowball. They came up with the idea of providing financial aid for attendees, which required more sponsors and figuring out how to transfer money to the students.
They also realized that they didn't like any of the tutorials that were out there. All of them assumed that the reader was already a programmer and knew what a web framework is, what a server is, and so on. They ended up writing their own tutorial, which turned out to be roughly 90 pages of text.
In addition, they promoted the workshop in all of the places they could think of and ended up spending a lot of time evaluating the 300 attendee applications. Eventually the workshop expanded to 45 attendees, which meant that 15 coaches were needed as Django Girls has a 3:1 ratio for students to coaches.
The Django Girls tutorial has now been read by over 94,000 people at this point, which is 1/4 the population of Bilbao (where EuroPython 2015 was held), they noted. In total, 1,646 women have learned Python and Django in these workshops. More than 70 have now been held in 34 countries on 6 continents. Nothing, so far, in Antarctica, but "we are working on that too", Sendecka said with a chuckle.
News
The project has grown so much that a legal entity was needed to administer it, so the Django Girls Foundation was started in June. Django Girls has been so successful because of the huge numbers of volunteers who have put in their own time as organizers (137), contributors to the tutorial (111), and as part of a "huge army of coaches" (548). It came to a point where overseeing all of that became too much, so they asked for help and got four more people who are now helping to administer the project; they "help keep us sane".
That still is not enough, they realized, so they have made the big decision to hire the first paid position for the foundation. They are looking for an "Ambassador of Awesomeness" to help ensure that the organization does the best work that it can. It was a bit of a terrifying decision, especially since "we still don't know what we are doing and are making it up as we go". But they are sure it is the right decision to make to ensure that Django Girls "is sustainable and can grow beyond us".
They believe that things are just getting started for the project and that it can have an even bigger impact down the road. They have another big project in the works that they shared for the first time at the conference. The tutorial was enjoyable to write and "to our surprise we must have done a pretty good job". They get many requests for more advanced tutorials or ones that cover other parts of computer science. The tutorial was necessarily geared toward how much can be taught in a single day, so it skimmed over lots of material to make it all fit.
But there is much more about computers and the internet that can be taught, so they are in the process of writing a book. It will try to capture the style of the workshops but cover more material in a book that will be "beautifully crafted". The book is called Yay Python and those interested can follow the progress at that web site. The announcement was met with a loud round of applause and a stage whisper that there is "no going back on that now".
The book will build on the Django Girls tradition, with "a good dose of emoji and funny little quirks". It is still a tutorial on how to build a Django web site, but there will be lots more material, including chapters on topics like "how a computer works" and a "connect the dots" exercise to explain HTTP requests and responses. It will also talk about the communities behind Python and Django, along with how open source works. The idea is to help people "fall in love with the internet as we did".
One rule
The one rule they have adhered to throughout the Django Girls process is to "always go the extra mile" and the details of the workshops show this, they said. The room is decorated with flowers and balloons, rather than being a "boring classroom" and they do fun things like cupcake tasting or yoga during the day. To ensure that organizers have all of the information they need to run the event, and that attendees have a similar experience no matter where the event is held, there is an organizer's guide. There is also a coaching manual. All of that material is open source, so that it can be repurposed as needed. It "took weeks to write down" all of that information, but they want to ensure that Django Girls is bigger than just the two of them.
Workshops are meant to be fun and friendly. Enthusiasm from the organizers, coaches, and participants helps with that. "The power of enthusiasm is huge", they said. When the two of them get excited, that gets passed on to organizers and from there to participants. That is part of what has made Django Girls so successful so quickly.
But every labor of love comes "with a huge emotional cost". It is an enormous job and one that they always feel they are not quite putting enough of themselves into. The thing that keeps them going when they are feeling that way, though, is the stories from women who have literally changed their lives by attending the workshops.
For example, there is Dori, who was sitting in the keynote audience somewhere, and was attending her second EuroPython. At the pilot workshop, she spent half of the time in the workshop trying to get the Django server to play nicely with her Hungarian keyboard. At the time, they thought she had "the worst experience ever" and would probably never want to have anything to do with Django or programming ever again. But today she is a Django developer in Budapest, has organized a monthly meeting for Python developers, and organized two Django Girls workshops there.
Another was Josie, who was only 13 when she attended the first workshop with her mother. Immediately after that, she did a lightning talk at EuroPython in front of a thousand people about her Django Girls experience and her plan to organize the Pyxie Dust project to create a similar workshop for girls her age. That event took place in Zagreb, Croatia in 2014.
Or Linda, who organized a workshop in Nairobi, Kenya just a few months after the initial workshop in Berlin. She "blazed a trail" for other women who organized workshops in Africa after that, they said. They talked about several other women who have "graduated" from attending the workshop to organizing and coaching at others, as well as getting involved in the Python and Django communities in other ways. The Django Girls blog has lots of similar stories as well as event reports and other news.
They concluded their talk with a "huge thank you" to everyone that has helped out along the way. Their dream is for Django Girls not to be needed at some point. It may take 5, 10, or 15 years, but if that can happen, they will have achieved everything they set out to do. That is the ultimate goal for the project.
One thing they learned over the last year is that "kindness is contagious". If you put a lot of energy and effort into something to help others, "the universe will find a way to pay it all back to you". They encouraged others to follow in their footsteps; to find their dream and make it happen. All that it took was "two little squirrels with a big, big dream and a generous, wonderful community" to create something like Django Girls. Remember that "you are not alone, you are among friends", they finished—to thunderous applause.
A YouTube video of the talk is also available.
Security
Assessing risk with the Core Infrastructure Initiative
The Linux Foundation's Core Infrastructure Initiative (CII) exists to "fortify" critical open-source software projects with funding, code reviews, and other kinds of support, with a particular eye toward shoring up those packages to prevent serious security crises. CII was formed in response to the memorable "Heartbleed" vulnerability discovered in OpenSSL, which was the first adopted project. Recently, CII unveiled its Census Project, a semi-automated ranking of open-source projects by security risk. The numbers make for some interesting reading—although the conclusions subsequently drawn by the CII can be puzzling.
The Census Project was announced on July 9, at which time the CII presented the results of its project-analysis work. There is a multi-page HTML table on the Census Project page, as well as a white paper [PDF] co-authored with the Institute for Defense Analyses (IDA) that goes into detail on the methods and metrics considered and used. The upshot is that each project examined in the census is assigned an integer score on a scale from 0 to 16, with higher numbers indicating the greatest risk that the project could be the source of an undiscovered security hole. The peculiar aspect to the story, however, is that the CII appears to have amassed a list of high-risk projects that has little to do with the results of the Census Project.
Scoring projects
The process used to determine the scores, though, did not involve any inspection of the code itself—just a look at project "metadata" of various flavors. As described on the web site, the Census Project counts seven factors when compiling its scores. How these factors are measured requires a more detailed examination (below), but the list itself is short:
- The number of CVEs filed (worth from 0 to 3 points)
- The project's contributor count over the past 12 months (2 to 5 points)
- The project's ranking in the Debian popularity list (point value unspecified)
- Whether or not the project has a known web site (0 or 1 point)
- Whether or not the package is exposed to the network (0 or 2 points)
- Whether or not the package processes network data (0 or 1 point)
- Whether or not the package could be used for local privilege escalation (0 or 1 point)
- Whether or not the project includes an executable or only provides data (0 or -3 points)
The number of points assigned for popularity in Debian is not specified. The other factors, however, are only enough to add up to a score of 13, so perhaps the popularity is a 0–to–3 score—and it would appear that a high popularity ranking corresponds to more "risk" points. In addition, CII's Emily Ratliff noted that only CVEs since 2010 were counted.
Individual pages for each project assessment provide a bit more detail (see, for example, the page for tcpd), noting which language the program is implemented in, so other factors may be part of the scoring formula. Ultimately, of course, the score is the product of a human assessment of the project, as the CII web site makes plain. While some of the input data is harvested from Debian and from Black Duck's OpenHub, other factors clearly involve some qualitative judgment—such as whether or not a package could be used for local privilege escalation—and the white paper mentions that the speed with which CVEs are fixed played a role in the rankings.
Of the packages assessed so far, the first big cliff in the scoring occurs between the packages scoring 9 or above and those scoring 8 or below. This top-scoring class of packages includes the following:
Package Score tcpd 11 whois 11 ftp 11 netcat-traditional 11 at 10 libwrap0 10 traceroute 10 xauth 10 bzip2 9 hostname 9 libacl1 9 libaudit0 9 libbz2-1.0 9 libept1.4.12 9 libreadline6 9 libtasn1-3 9 linux-base 9 telnet 9
Regrettably, the raw numbers that make up each package's score do not appear to be available. It would have been interesting to see the exact point values assigned for number of contributors, for example. It is also not entirely clear how some of factors are scored—does "could be used for local privilege escalation" mean simply "is installed setuid," for example? The project has a GitHub repository where some of the data-scraping code can be inspected, but the CII site and white paper both indicate that human assessment of the data plays a major role in the final process (starting with cleaning up the "noisy" raw data).
Beyond scores
In the end, though, the oddest thing about the scoring is that
these raw scores do not indicate which projects
CII will invest in. The white paper, after a lengthy (60-page) explanation of
the methodologies employed, comes up with a different set of
human-selected "riskiest" projects based on the authors'
"knowledge of how the programs are used
" and on which
project "appear to be relatively unmaintained
". The
human-identified project list includes: xauth, bzip2, libaudit0,
libtasn1-3, bind9, exim4, isc-dhcp, gnutls26, gpgme, openldap, pam,
openssl, net-tools, openssh, rsyslog, wget, apr-util, coolkey, ntp,
gnupg, gzip, expat, freetype, libgcrypt11, keyutils, xz-utils,
p11-kit, pcre3, cyrus-sasl2, libxml2, shadow, tar, zlib, apr,
libjpeg8, libpng, libressl, unzip, giflib, mod-gnutls, postfix, and
cryptsetup.
This list contains little that is surprising. The projects highlighted are those that must deal with untrusted network connections, those that are responsible for processing potentially malicious data file formats, and those that are responsible for enforcing security measures for the system as a whole or for application programs. This may seem a bit anticlimactic, since it varies little from the list that any security-conscious user might come up with on their own.
Nevertheless, it is good to see someone attempt systematic analysis to reach a conclusion about the riskiness of common programs. The troubling factor is that, so far, the analysis only underscores common sense. The larger question is what CII intends to do with this information. The first few CII-supported projects (ntpd, GnuPG, Frama-C, OpenSSL, OpenSSH, Debian's reproducible builds, and The Fuzzing Project) were selected before there was a formal process in place.
The Census Project is a first step toward assembling such a
process. Still, the web page makes a point of saying that "the
decision to fund a project in need is not automated by any
means.
" The white paper concludes by saying only that CII
participants "believe the next step is to further investigate
these OSS projects for security and project healthiness.
"
Interestingly enough, outsiders are invited to participate in the CII's project-identification process by contributing patches or suggestions to the Census Project code on GitHub or by writing to one of the CII mailing lists. Thus far, two other projects have been suggested for consideration on the cii-census list (the archives of which are visible only to subscribers): the Trinity fuzz tester and the PaX patch set. Both suggestions were referred to the CII steering committee, which includes one representative each from the supporting companies: Amazon Web Services, Adobe, Bloomberg, Cisco, Dell, Facebook, Fujitsu, Google, Hitachi, HP, Huawei, IBM, Intel, Microsoft, NetApp, NEC, Qualcomm, RackSpace, Salesforce.com, and VMware.
The CII itself is still finding its footing. Apart from the Census Project, multiple pages on the site invite projects interested in funding to contact the CII with a grant request, but point them to a contact page but does not yet have a formal process defined. Time will tell how CII goes about selecting which projects to support from among the high-risk prospects. Hopefully, much of that selection process will take place in the open. As this census shows, there is no shortage of important projects that are in need of additional support; transparency in determining which ones merit support is as important as the ability to study the resulting improvements to the source code.
Brief items
Security quotes of the week
New vulnerabilities
apache: multiple vulnerabilities
Package(s): | apache httpd | CVE #(s): | CVE-2015-0253 CVE-2015-3183 CVE-2015-3185 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Created: | July 20, 2015 | Updated: | August 26, 2015 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description: | From the Arch Linux advisory:
- CVE-2015-0253 (denial of service): Fix a crash with ErrorDocument 400 pointing to a local URL-path with the INCLUDES filter active, introduced in 2.4.11. PR 57531. - CVE-2015-3183 (denial of service): core: Fix chunk header parsing defect. Remove apr_brigade_flatten(), buffering and duplicated code from the HTTP_IN filter, parse chunks in a single pass with zero copy. Limit accepted chunk-size to 2^63-1 and be strict about chunk-ext authorized characters. - CVE-2015-3185 (authentication bypass): Replacement of ap_some_auth_required (unusable in Apache httpd 2.4) with new ap_some_authn_required and ap_force_authn hook. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Alerts: |
|
cacti: SQL injection
Package(s): | cacti | CVE #(s): | CVE-2015-4634 | ||||||||||||||||||||
Created: | July 21, 2015 | Updated: | July 27, 2015 | ||||||||||||||||||||
Description: | From the Debian LTS advisory:
CVE-2015-4634: SQL injection vulnerability in Cacti before 0.8.8e allows remote attackers to execute arbitrary SQL commands in graphs.php
Currently unknown or unassigned CVE's | ||||||||||||||||||||||
Alerts: |
|
drupal7-feeds: three vulnerabilities
Package(s): | drupal7-feeds | CVE #(s): | |||||||||
Created: | July 16, 2015 | Updated: | July 22, 2015 | ||||||||
Description: | From the Drupal release notes:
This is a security release. People running 7.x-2.0-alpha8 or below should update. This release only contains security fixes, no additional bug fixes or features. Changes since 7.x-2.0-alpha8: | ||||||||||
Alerts: |
|
drupal7-migrate: cross-site scripting
Package(s): | drupal7-migrate | CVE #(s): | |||||||||
Created: | July 20, 2015 | Updated: | July 22, 2015 | ||||||||
Description: | From the Drupal advisory:
The module doesn't sufficiently sanitize destination field labels thereby exposing a Cross Site Scripting vulnerability (XSS). This vulnerability is mitigated by the fact that an attacker must have a role with permission to create/edit fields (such as "administer taxonomy"), or be able to modify source data being imported by an administrator. Furthermore, the migrate_ui submodule must be enabled. | ||||||||||
Alerts: |
|
drupal7-views_bulk_operations: permission bypass
Package(s): | drupal7-views_bulk_operations | CVE #(s): | |||||||||
Created: | July 20, 2015 | Updated: | July 22, 2015 | ||||||||
Description: | From the Drupal advisory:
The module doesn't sufficiently guard user entities against unauthorized modification. If a user has access to a user account listing view with VBO enabled (such as admin/people when the administration_views module is used), they will be able to edit their own account and give themselves a higher role (such as "administrator") even if they don't have the "'administer users'" permission. This vulnerability is mitigated by the fact that an attacker must have access to such a user listing page and that the bulk operation for changing Roles is enabled. | ||||||||||
Alerts: |
|
freexl: denial of service
Package(s): | freexl | CVE #(s): | |||||
Created: | July 20, 2015 | Updated: | July 22, 2015 | ||||
Description: | From the Debian advisory:
It was discovered that an integer overflow in freexl, a library to parse Microsoft Excel spreadsheets may result in denial of service if a malformed Excel file is opened. | ||||||
Alerts: |
|
groovy: code execution
Package(s): | groovy | CVE #(s): | CVE-2015-3253 | ||||||||||||||||||||
Created: | July 20, 2015 | Updated: | October 7, 2016 | ||||||||||||||||||||
Description: | From the Debian LTS advisory:
cpnrodzc7, working with HP's Zero Day Initiative, discovered that Java applications using standard Java serialization mechanisms to decode untrusted data, and that have Groovy on their classpath, can be passed a serialized object that will cause the application to execute arbitrary code. | ||||||||||||||||||||||
Alerts: |
|
inspircd: denial of service
Package(s): | inspircd | CVE #(s): | |||||
Created: | July 20, 2015 | Updated: | July 22, 2015 | ||||
Description: | From the Debian LTS advisory:
Adam <adam AT anope.org>, upstream author of inspircd found the Debian patch that fixed CVE-2012-1836 was incomplete. Furthermore, it introduced an issue, since invalid dns packets caused an infinite loop. | ||||||
Alerts: |
|
java: multiple unspecified vulnerabilities
Package(s): | java-1.6.0-sun | CVE #(s): | CVE-2015-2627 CVE-2015-2637 CVE-2015-2638 CVE-2015-2664 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Created: | July 17, 2015 | Updated: | August 13, 2015 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description: | From the CVE entries: CVE-2015-2627: Unspecified vulnerability in Oracle Java SE 6u95, 7u80, and 8u45 allows remote attackers to affect confidentiality via unknown vectors related to installation. CVE-2015-2637: Unspecified vulnerability in Oracle Java SE 6u95, 7u80, and 8u45; JavaFX 2.2.80; and Java SE Embedded 7u75 and 8u33 allows remote attackers to affect confidentiality via unknown vectors related to 2D. CVE-2015-2638: Unspecified vulnerability in Oracle Java SE 6u95, 7u80, and 8u45; JavaFX 2.2.80; and Java SE Embedded 7u75 and 8u33 allows remote attackers to affect confidentiality, integrity, and availability via unknown vectors related to 2D. CVE-2015-2664: Unspecified vulnerability in Oracle Java SE 6u95, 7u80, and 8u45 allows local users to affect confidentiality, integrity, and availability via unknown vectors related to Deployment. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Alerts: |
|
java: multiple unspecified vulnerabilities
Package(s): | java-1.7.0-oracle | CVE #(s): | CVE-2015-2596 CVE-2015-2613 CVE-2015-2619 CVE-2015-4729 CVE-2015-4736 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Created: | July 17, 2015 | Updated: | August 13, 2015 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description: | From the CVE entries: CVE-2015-2596: Unspecified vulnerability in Oracle Java SE 7u80 allows remote attackers to affect integrity via unknown vectors related to Hotspot. CVE-2015-2613: Unspecified vulnerability in Oracle Java SE 7u80 and 8u45, and Java SE Embedded 7u75 and 8u33 allows remote attackers to affect confidentiality via vectors related to JCE. CVE-2015-2619: Unspecified vulnerability in Oracle Java SE 7u80 and 8u45, JavaFX 2.2.80, and Java SE Embedded 7u75 and 8u33 allows remote attackers to affect confidentiality via unknown vectors related to 2D. CVE-2015-4729: Unspecified vulnerability in Oracle Java SE 7u80 and 8u45 allows remote attackers to affect confidentiality and integrity via unknown vectors related to Deployment. CVE-2015-4736: Unspecified vulnerability in Oracle Java SE 7u80 and 8u45 allows remote attackers to affect confidentiality, integrity, and availability via unknown vectors related to Deployment. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Alerts: |
|
libidn: information disclosure
Package(s): | libidn | CVE #(s): | CVE-2015-2059 | ||||||||||||||||||||||||||||||||||||||||||||
Created: | July 20, 2015 | Updated: | May 18, 2016 | ||||||||||||||||||||||||||||||||||||||||||||
Description: | From the Debian LTS advisory:
Thijs Alkemade discovered that the Jabber server may pass an invalid UTF-8 string to libidn, the GNU library for Internationalized Domain Names (IDNs). In the case of the Jabber server, this results in information disclosure, and it is likely that some other applications using libidn have similar vulnerabilities. This update changes libidn to check for invalid strings rather than assuming that the application has done so. | ||||||||||||||||||||||||||||||||||||||||||||||
Alerts: |
|
lxc: two vulnerabilities
Package(s): | lxc | CVE #(s): | CVE-2015-1331 CVE-2015-1334 | ||||||||||||||||||||||||||||||||||||
Created: | July 22, 2015 | Updated: | August 11, 2015 | ||||||||||||||||||||||||||||||||||||
Description: | From the Ubuntu advisory:
Roman Fiedler discovered that LXC had a directory traversal flaw when creating lock files. A local attacker could exploit this flaw to create an arbitrary file as the root user. (CVE-2015-1331) Roman Fiedler discovered that LXC incorrectly trusted the container's proc filesystem to set up AppArmor profile changes and SELinux domain transitions. A local attacker could exploit this flaw to run programs inside the container that are not confined by AppArmor or SELinux. (CVE-2015-1334) | ||||||||||||||||||||||||||||||||||||||
Alerts: |
|
mysql: multiple unspecified vulnerabilities
Package(s): | mysql | CVE #(s): | CVE-2015-2582 CVE-2015-2620 CVE-2015-2643 CVE-2015-2648 CVE-2015-4737 CVE-2015-4752 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Created: | July 20, 2015 | Updated: | July 22, 2015 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description: | From the CVE entries:
Unspecified vulnerability in Oracle MySQL Server 5.5.43 and earlier and 5.6.24 and earlier allows remote authenticated users to affect availability via vectors related to GIS. (CVE-2015-2582) Unspecified vulnerability in Oracle MySQL Server 5.5.43 and earlier and 5.6.23 and earlier allows remote authenticated users to affect confidentiality via unknown vectors related to Server : Security : Privileges. (CVE-2015-2620) Unspecified vulnerability in Oracle MySQL Server 5.5.43 and earlier and 5.6.24 and earlier allows remote authenticated users to affect availability via unknown vectors related to Server : Optimizer. (CVE-2015-2643) Unspecified vulnerability in Oracle MySQL Server 5.5.43 and earlier and 5.6.24 and earlier allows remote authenticated users to affect availability via vectors related to DML. (CVE-2015-2648) Unspecified vulnerability in Oracle MySQL Server 5.5.43 and earlier, and 5.6.23 and earlier, allows remote authenticated users to affect confidentiality via unknown vectors related to Server : Pluggable Auth. (CVE-2015-4737) Unspecified vulnerability in Oracle MySQL Server 5.5.43 and earlier and 5.6.24 and earlier allows remote authenticated users to affect availability via vectors related to Server : I_S. (CVE-2015-4752) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Alerts: |
|
mysql: multiple unspecified vulnerabilities
Package(s): | mysql-5.5, mysql-5.6 | CVE #(s): | CVE-2015-2611 CVE-2015-2617 CVE-2015-2639 CVE-2015-2641 CVE-2015-2661 CVE-2015-4757 CVE-2015-4761 CVE-2015-4767 CVE-2015-4769 CVE-2015-4771 CVE-2015-4772 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Created: | July 22, 2015 | Updated: | July 22, 2015 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description: | There are multiple unspecified vulnerabilities in Oracle MySQL Server. See the CVE entries for more details. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Alerts: |
|
pacemaker: privilege escalation
Package(s): | pacemaker | CVE #(s): | CVE-2015-1867 | ||||||||||||||||||||||||
Created: | July 22, 2015 | Updated: | December 22, 2015 | ||||||||||||||||||||||||
Description: | From the Red Hat advisory:
A flaw was found in the way pacemaker, a cluster resource manager, evaluated added nodes in certain situations. A user with read-only access could potentially assign any other existing roles to themselves and then add privileges to other users as well. | ||||||||||||||||||||||||||
Alerts: |
|
pdns: denial of service
Package(s): | pdns pdns-recursor | CVE #(s): | CVE-2015-5470 | ||||||||
Created: | July 22, 2015 | Updated: | July 22, 2015 | ||||||||
Description: | From the PowerDNS advisory:
A bug was discovered in our label decompression code, making it possible for names to refer to themselves, thus causing a loop during decompression. On some platforms, this bug can be abused to cause crashes. On all platforms, this bug can be abused to cause service-affecting CPU spikes. Update 7th of July 2015: Toshifumi Sakaguchi discovered that the original fix was insufficient in some cases. Updated versions of the Authoritative Server and Recursor were released on the 9th of June. Minimal patches are available. The insufficient fix was assigned CVE-2015-5470. | ||||||||||
Alerts: |
|
php-horde: multiple vulnerabilities
Package(s): | php-horde | CVE #(s): | |||||||||||||||||||||||||||||||||
Created: | July 21, 2015 | Updated: | July 22, 2015 | ||||||||||||||||||||||||||||||||
Description: | From the Fedora advisory:
**Horde_Form 2.0.10**
**Horde_Icalendar 2.1.1**
**Horde_Auth 2.1.10**
**Horde_Core 2.20.6** | ||||||||||||||||||||||||||||||||||
Alerts: |
|
pki-core: cross-site scripting
Package(s): | pki-core | CVE #(s): | CVE-2012-2662 | ||||||||||||
Created: | July 22, 2015 | Updated: | August 4, 2015 | ||||||||||||
Description: | From the Red Hat advisory:
Multiple cross-site scripting flaws were discovered in the Red Hat Certificate System Agent and End Entity pages. An attacker could use these flaws to perform a cross-site scripting (XSS) attack against victims using the Certificate System's web interface. | ||||||||||||||
Alerts: |
|
python-keystonemiddleware: certificate verification botch
Package(s): | python-keystonemiddleware | CVE #(s): | CVE-2015-1852 | ||||||||||||||||
Created: | July 20, 2015 | Updated: | July 22, 2015 | ||||||||||||||||
Description: | From the CVE entry:
The s3_token middleware in OpenStack keystonemiddleware before 1.6.0 and python-keystoneclient before 1.4.0 disables certification verification when the "insecure" option is set in a paste configuration (paste.ini) file regardless of the value, which allows remote attackers to conduct man-in-the-middle attacks via a crafted certificate, a different vulnerability than CVE-2014-7144. | ||||||||||||||||||
Alerts: |
|
rawstudio: insecure temp files
Package(s): | rawstudio | CVE #(s): | CVE-2014-4978 | ||||
Created: | July 20, 2015 | Updated: | July 22, 2015 | ||||
Description: | From the Red Hat bugzilla:
The following was reported: The function "rs_filter_graph" located in file ./librawstudio/rs-filter.c contains the following code:
ignore = system("dot -Tpng >/tmp/rs-filter-graph.png >/tmp/rs-filter-graph");
ignore = system("gnome-open /tmp/rs-filter-graph.png");
This code makes insecure use of two temporary files: /tmp/rs-filter-graph.png and /tmp/rs-filter-graph This allows the truncation of arbitrary files which are owned by the user running rawstudio - for example:
ln -s ~/.important /tmp/rs-filter-graph | ||||||
Alerts: |
|
rsyslog: denial of service
Package(s): | rsyslog | CVE #(s): | CVE-2015-3243 | ||||
Created: | July 16, 2015 | Updated: | July 22, 2015 | ||||
Description: | The Red Hat bugzilla entry talks about rsyslog exiting on a SIGSEGV from SanitizeMsg():
I haven't seen a crash, but I can observe the issue under valgrind. Can be reproduced with something like: python -c "from systemd import journal; journal.send('', SYSLOG_FACILITY='10', PRIORITY='4')" | ||||||
Alerts: |
|
ruby: denial of service
Package(s): | ruby1.9.1 | CVE #(s): | CVE-2014-6438 | ||||
Created: | July 20, 2015 | Updated: | July 22, 2015 | ||||
Description: | From the Debian LTS advisory:
It was discovered that the uri package in the Ruby standard library uses regular expressions that may result in excessive backtracking. Ruby applications that parse untrusted URIs using this library were susceptible to denial-of-service attacks by passing crafted URIs. | ||||||
Alerts: |
|
springframework: denial of service
Package(s): | springframework | CVE #(s): | CVE-2015-3192 | ||||||||||||
Created: | July 16, 2015 | Updated: | July 29, 2015 | ||||||||||||
Description: | From the Red Hat bugzilla entry:
If DTD is not entirely disabled, inline DTD declarations can be used to perform denial of service attacks known as XML bombs. Such declarations are both well-formed and valid according to XML schema rules but when parsed can cause out of memory errors. To protect against this kind of attack DTD support must be disabled by setting the disallow-doctype-dec feature in the DOM and SAX APIs to true and by setting the supportDTD property in the StAX API to false. | ||||||||||||||
Alerts: |
|
squashfs-tools: two vulnerabilities
Package(s): | squashfs-tools | CVE #(s): | CVE-2015-4645 CVE-2015-4646 | ||||||||||||||||
Created: | July 20, 2015 | Updated: | January 30, 2017 | ||||||||||||||||
Description: | From the sasquatch advisory:
CVE-2015-4645: The first problem overflows the bytes variable, so that the allocation of fragments_bytes[] has an erroneous size.
CVE-2015-4646: If we fix this by making the variable size_t, we run into an unrelated problem in which the stack VLA allocation of fragment_table_index[] can easily exceed RLIMIT_STACK. | ||||||||||||||||||
Alerts: |
|
tidy: two vulnerabilities
Package(s): | tidy | CVE #(s): | CVE-2015-5522 CVE-2015-5523 | ||||||||||||||||||||
Created: | July 20, 2015 | Updated: | July 30, 2015 | ||||||||||||||||||||
Description: | From the Debian advisory:
Fernando Muñoz discovered that invalid HTML input passed to tidy, an HTML syntax checker and reformatter, could trigger a buffer overflow. This could allow remote attackers to cause a denial of service (crash) or potentially execute arbitrary code. Geoff McLane also discovered that a similar issue could trigger an integer overflow, leading to a memory allocation of 4GB. This could allow remote attackers to cause a denial of service by saturating the target's memory. | ||||||||||||||||||||||
Alerts: |
|
webkitgtk4: denial of service
Package(s): | webkitgtk4 | CVE #(s): | |||||
Created: | July 20, 2015 | Updated: | July 22, 2015 | ||||
Description: | From the Red Hat bugzilla:
This bug has been created based on an anonymous crash report requested by the package maintainer. | ||||||
Alerts: |
|
xen: privilege escalation
Package(s): | xen | CVE #(s): | CVE-2015-3259 | ||||||||||||||||||||||||||||||||||||||||||||
Created: | July 20, 2015 | Updated: | July 22, 2015 | ||||||||||||||||||||||||||||||||||||||||||||
Description: | From the CVE entry:
Stack-based buffer overflow in the xl command line utility in Xen 4.1.x through 4.5.x allows local guest administrators to gain privileges via a long configuration argument. | ||||||||||||||||||||||||||||||||||||||||||||||
Alerts: |
|
Page editor: Jake Edge
Kernel development
Brief items
Kernel release status
The current development kernel is 4.2-rc3, released on July 19. Linus said: "Normal Sunday release schedule, and a fairly normal rc release. There was some fallout from the x86 FPU cleanups, but that only hit CPU's with the xsaves instruction, and it should be all good now."
Stable updates: 4.1.3 and 4.0.9 were released on July 21.
Quotes of the week
/* * Well, when the cobbler got mad like this, he would go into hiding. He * would not make or sell any boots. He would not go out at all. Pretty * soon, the coffee shop would have to close because the cobbler wasn't * coming by twice a day any more. Then the grocery store would have to * close because he wouldn't eat much. After a while, everyone would panic * and have to move from the village and go live with all their relatives * (usually the ones they didn't like very much). * * Eventually, the cobbler would work his way out of his bad mood, and * open up his boot business again. Then, everyone else could move back * to the village and restart their lives, too. * * Fortunately, we have been able to collect up all the cobbler's careful * notes (and we wrote them down below). We'll have to keep checking these * notes over time, too, just as the cobbler does. But, in the meantime, * we can avoid the panic and the reboot since we can make sure that each * subtable is doing okay. And that's what bad_madt_entry() does. */
Gorman: Continual testing of mainline kernels
Mel Gorman introduces SUSE's kernel performance-testing system. "Marvin is a system that continually runs performance-related tests and is named after another robot doomed with repetitive tasks. When tests are complete it generates a performance comparison report that is publicly available but rarely linked. The primary responsibility of this system is to check SUSE Linux for Enterprise kernels for performance regressions but it is also configured to run tests against mainline releases."
Kernel development news
rm -r fs/ext3
The kernel development community is quite good at adding code to the kernel; its record on removing code is not always quite so bright. There are all kinds of reasons why removing code can be difficult; often, even code that appears to be without use stays around just in case somebody, somewhere, still needs it. Removal can be hard even when there is a known replacement that should work for all users; that can be seen in the case of the ext3 filesystem.
A few eyebrows went up when Jan Kara posted a
patch removing the ext3 filesystem recently. Some users clearly
thought the move represented a forced upgrade to ext4; Randy Dunlap remarked that "this looks like an
April 1 joke to me
". In truth, it is neither a joke nor a
forced upgrade; it is, however, an interesting story to look back at.
Nine years ago, in the middle of 2006, the premier filesystem for most users was ext3, but that filesystem was showing its age in a few ways. Its 32-bit block pointers limited maximum filesystem size to 8TB, a limit that was not too restrictive for most users at the time, but which would be highly problematic today. The filesystem tracks blocks in files with individual pointers, leading to large amounts of metadata overhead and poor performance on larger files. These problems, along with a number of missing features, had long since convinced developers that something newer and better was required.
For a while, some thought that might be a filesystem called reiser4, but that story failed to work out well even before that filesystem's primary developer left the development community.
The ext3 developers came up with a number of patches aimed at easing its scalability problems. These patches were made directly against the ext3 filesystem, with the idea that ext3 would evolve in the direction that was needed. There was, however, some resistance to the idea of making major changes to ext3 from developers who valued that filesystem in its current, stable form. One of those developers, it turned out, was Linus who, as we all know, has a relatively strong voice in such decisions.
And so it came to be that the ext3 developers announced their intent to create a new
filesystem called "ext4"; all new-feature development would be done there.
Actually, the new filesystem was first called "ext4dev" to emphasize its
experimental nature; the plan was to rename it to "ext4" once things were
stable, "probably in 6-9 months
". In the real world, that renaming
happened nearly 28 months later and was merged for the 2.6.28 kernel.
Since then, of course, ext4 has become the primary Linux filesystem for many users. It has seen many new features added, and it is not clear that this process will stop, even though ext4 is now in the same position that ext3 was nine years ago. Through this entire history, though, ext4 has retained the ability to mount and manage ext2 and ext3 filesystems; it can be configured to do so transparently in the absence of the older ext2 and ext3 modules. And, indeed, many distributions now don't bother to build the older filesystem modules, relying on ext4 to manage all three versions of the filesystem.
Back when ext4 was created, it was envisioned that the older filesystem
code would eventually become unnecessary. The plan was that when this
happened, "
One might well wonder whether we will see a similar story in the future and
the addition of an ext5 filesystem. For the time being, that does not seem
to be in the works. Ext4 has picked up a number of features in recent
years, with encryption as the most recent
example, but there has been no talk of moving development to a new source
base. Over the years, perhaps, the ext4 developers have done well enough
at not breaking things that users are less worried about new development
than they once might have been.
At the other end, there is the question of the ext2 filesystem. That code,
too, could be replaced by ext4, but there seems to be no pressure to do
so. Ext2 is small, weighing in at less than 10,000 lines of code; ext3 and
the associated JBD journaling code come in at 28,000, while ext4
and JBD2 add up to closer to 60,000 lines. The
simplicity of ext2
makes it a good filesystem for developers to experiment with, and its
maintenance cost is nearly zero. So there is no real reason to take it out
anytime soon.
Ext3, being rather larger than ext2, is a more promising target to remove,
though Jan
said that its maintenance cost was pretty
low. The fact that this code has been so thoroughly replaced makes the
removal decision relatively easy — but that decision still took nine years
to come about. Even so, if all old kernel code were this easy to
get rid of, the kernel would be quite a bit smaller than it is today.
The simpler addition is the atomic logical
operations patch set from Peter Zijlstra. Peter noted that there was
no notion
of logical operations on atomic_t variables that was the same
across all architectures. Some of them have related operations called
atomic_set_mask() and atomic_clear_mask(), but those
operations are defined inconsistently across architectures when they are
present at all.
To clean this situation up a bit, Peter introduced these new operations:
There is also a pair of simple wrappers
(atomic_andnot() and atomic64_andnot()) that simply flip
the bits of the mask argument.
All of these functions have a void type; there are no
_return variants (e.g. atomic_and_return()) that return
the result of the operation at the same time. Uses of
atomic_set_mask() and atomic_clear_mask() in the tree are
changed to use the new functions, and the old ones have been deprecated.
Atomic operations do not normally function as memory barriers; in other
words, the processor and the compiler are both free to reorder atomic
operations relative to other
operations in ways that could create confusion in concurrent situations.
The exception to that rule is the _return operations; for example,
atomic_add_return() will add a value to an atomic_t,
return the resulting value, and function as a full memory barrier.
Those rules are looking increasingly inadequate when faced with the growing
complexity and concurrency of contemporary systems. All-or-nothing memory
barriers are an overly blunt tool for developers who are working to
maximize concurrency and minimize the cost of the associated operations.
What developers would like to see instead is the ability to explicitly
control barriers with "acquire" and "release" semantics.
For those who don't want to do a quick read through the increasingly scary
memory-barriers.txt file, here is a quick
refresher. An "acquire" operation (usually a read) contains a barrier
guaranteeing that the operation will complete before any subsequent reads
or writes. A "release" operation (normally a write) guarantees that any
reads or writes issued prior to the release will complete before the
release operation itself completes. Acquire and release operations are
thus only partial barriers. In many situations, though, they are all that
is needed, and they can be less expensive than full barriers; developers
seeking to maximize performance thus want to use them whenever possible.
Will Deacon set out to provide that control with atomic operations. The result was a new set of atomic operations:
Will's patch also defines the 64-bit and atomic_long_t versions of
the above functions. In each case, the "bare" version of the name
(e.g. atomic_add_return() gives full-barrier semantics, while the
_relaxed version provides no barrier at all. In between are the
versions that include barriers with acquire or release semantics.
The first use of these new primitives is
with the queued reader/writer lock code.
Assuming they are merged, they
will likely find their way into other performance-sensitive parts of the
kernel in short order. That should be good for the speed of the system
(though no benchmark numbers have been posted), but it comes at the cost of
requiring more developers to understand the details of how the barrier
semantics work. It is becoming increasingly hard to hide these details in
architecture-specific code over time. As the complexity of our systems
grows, the complexity of the software will have to increase as well.
It is fair to characterize the sandboxing features in Linux as being
relatively complex. The complexity of the security module options, and
SELinux in particular, is legendary. The seccomp() system call
has two modes: very simple (in which case almost nothing but
read() and write() is allowed), or rather complex (a
program written in the Berkeley packet filter (BPF) language makes
decisions on system call availability). There is a great
deal of flexibility available with both security modules and
seccomp(), but it comes at a cost.
OpenBSD leader Theo de Raadt is particularly
scornful of the BPF-based approach:
His posting contains a work-in-progress implementation of a simpler
approach to sandboxing (mostly written by Nicholas Marriott, it seems)
in the form of a system call named tame().
The core idea behind tame() is that most applications run in two
phases: initialization and steady-state execution. The initialization
phase typically involves opening files, establishing network connections,
and more; after initialization is complete, the program may not need to do
any of those things. So
there is often an opportunity to reduce an application's privilege level as
it moves out of the initialization phase. tame() performs that
privilege reduction; it is thus meant to be placed within an application,
rather than (as with SELinux) imposed on it from the outside.
The system call itself is simple enough:
If flags is passed as zero, the only system call available to the
process thereafter will be _exit(). This mode is thus suitable
for a process cranking on data stored in shared memory, but not much else.
For most real-world applications, the reduction in privilege will need to
be a bit less heavy-handed. That is what the flags are for. If any flags
at all are present, a base set of system calls, with read-only
functionality like getpid(), is available. For additional
privilege, specific flags must be used:
A process may make multiple calls to tame(), but it can only
restrict its current capabilities. Once a particular flag has been
cleared, it cannot be set again.
The patch includes changes to a number of OpenBSD utilities. The
cat command is restricted to TAME_MALLOC and
TAME_RPATH, for example; never again will cat be able to
run amok on the net. The ping command gets access to the net,
instead, but loses the ability to access the filesystem. And so on.
This system call has a number of features that may look a bit strange to
developers used to Linux. It encodes quite a bit of policy in the kernel,
including where the password database is stored and the use of Yellow
Pages/NIS; one would grep in vain for ypbind.lock in the Linux
kernel
source. tame() may seem limited in the range of restrictions that
it can apply to a process; it will almost certainly allow more than what is
strictly needed in most cases. It thus lacks the flexibility that Linux
developers typically like to see.
On the other hand, using tame(), it was evidently possible to add
restrictions to a fair number of system commands with a relatively small
amount of work and little code. Writing ad hoc BPF programs or
SELinux policies to accomplish the same thing would have taken quite a bit
longer and would have been more error-prone. tame(), thus, looks
like a way to add another layer of defense to a program in a quick and
standardized way; as such, it may, in the end, be used more than something
like seccomp().
If the tame() interface proves to be successful in the BSD world,
there is an interesting possibility on the Linux side: it should be
possible to completely implement that functionality in user space using the
seccomp() feature (though it would probably be necessary to merge one
of the patches adding extended BPF
functionality to seccomp()). We would then have the simple
interface for situations where it is adequate while still being able to
write more flexible filter policies where they are indicated. It could be
the best of both worlds.
The first step, though, would probably be to let the OpenBSD project
explore this space and
see what kind of results it gets. The ability to try out different models
is one of the strengths that comes from having competing kernels out
there. The ability to quickly copy that work is, instead, an advantage
that comes from free software. If this approach to attack-surface
reduction works out, we in the Linux world may, too, be able to
tame() our cat in the future.
perhaps 12-18 months out
", the ext3 code would be
removed. Once again, reality had something different to say, and the ext3
code endured for over nine years. Unless something surprising happens,
though, that record is about to come to an end; ext3 could be removed as
soon as the 4.3 development cycle, taking some 28,000 lines of code with
it. And most users, even those with ext3 filesystems, will not even
notice.
Atomic additions
Atomic variables have a long history as part of the kernel's
concurrency-management toolkit. These variables enable the execution of
simple arithmetic (and related) operations in an all-or-nothing manner;
other CPUs will never see partially-executed operations. As systems grow
more complex, though, atomic variables are having to become more complex as
well, as seen by a couple of recently proposed additions to the
atomic_t repertoire.
Atomic logical operations
void atomic_and(int mask, atomic_t *value);
void atomic_or(int mask, atomic_t *value);
void atomic_xor(int mask, atomic_t *value);
void atomic64_and(int mask, atomic64_t *value);
void atomic64_or(int mask, atomic64_t *value);
void atomic64_xor(int mask, atomic64_t *value);
Relaxed atomics
int atomic_read_acquire(atomic_t *value);
void atomic_set_release(atomic_t *value);
int atomic_add_return_relaxed(int i, atomic_t *value);
int atomic_add_return_acquire(int i, atomic_t *value);
int atomic_add_return_release(int i, atomic_t *value);
int atomic_sub_return_relaxed(int i, atomic_t *value);
int atomic_sub_return_acquire(int i, atomic_t *value);
int atomic_sub_return_release(int i, atomic_t *value);
/*
* And so on for atomic_xchg(), atomic_cmpxchg(),
* xchg(), and cmpxchg().
*/
Domesticating applications, OpenBSD style
One of the many approaches to improving system security consists of
reducing the attack surface of a given program by restricting the range of
system calls available to it. If an application has no need for access to
the network, say, then removing its ability to use the socket() system
call should cause no loss in functionality while reducing the scope of the
mischief that can be made should that application be compromised. In the
Linux world, this kind of sandboxing can be done using a security module or
the seccomp() system call. OpenBSD has lacked this capability so
far, but it may soon gain it via a somewhat different approach than has
been seen in Linux.
int tame(int flags);
Patches and updates
Kernel trees
Architecture-specific
Core kernel code
Device drivers
Device driver infrastructure
Documentation
Filesystems and block I/O
Memory management
Networking
Security-related
Virtualization and containers
Miscellaneous
Page editor: Jonathan Corbet
Distributions
Privacy questions for Iceweasel
The Iceweasel web browser is Debian's rebranded Firefox, which came about when Mozilla's trademark policy was deemed too onerous by the distribution. Some recent complaints about Iceweasel making a number of HTTP requests on first startup that reduce privacy were heard; they were initially assumed to be coming from the Firefox code. That turned out to be a wrong guess—in fact, it was some changes made by Debian to remove possibly non-free icons that led to the requests.
The issue came up in a thread that started with a post from "lumin" that pondered on purity in the free-software world, especially with respect to non-free blobs and the need to use them at times. The thread meandered a ways, touching on the Chromium binary blob download we looked at in June, before Jakub Wilk posted the results of an experiment he ran with Iceweasel. In it, he noted that Iceweasel makes a bunch of HTTP requests when it starts up for the first time—even before the user types in their first URL.
Wilk's experiment found that the browser requests
favicon.ico files from various search sites (eBay, Google,
Yahoo, Amazon, Wikipedia)—requesting some of them multiple times. It also makes a
few HTTP requests to Mozilla sites (including one POST) and a
POST to Google's Safe Browsing
site, followed by dozens of GET requests to that site.
His concluding line from that message was one of our security quotes of the week: "So nothing serious
here. It's just casually violating your privacy.
"
The Safe Browsing traffic caught the attention of Bas Wijnen, who was concerned that Google could be using it to track users. It turns out that Firefox (thus Iceweasel) implements a version of the Safe Browsing API that only sends a 32-bit prefix of the SHA-256 hash of the URL in question. It gets back a list of hashes that have that prefix and are considered to be dodgy sites. Google never gets the full URL, as that comparison is handled on the client side. Even if it were to get the full hash, reversing SHA-256 to extract the actual URL is, effectively, impossible, though the search provider could (and well might) have some giant lookup table of all the URLs it knows about and their hashes.
So, other than notifying Google that Iceweasel is being used, those requests are not leaking information. That is a privacy hazard, but one that can't be avoided if Safe Browsing is enabled. Wijnen's complaint that there was no way to turn it off was answered by Debian Iceweasel package maintainer Mike Hommey, who reported that there were settings in the Security section ("Block reported attack sites" and "Block reported web forgeries") to enable and disable the feature.
But Nikolaus Rath questioned the whole idea that any of the Iceweasel traffic was truly unexpected or unwarranted:
The Mozilla URLs were not really discussed in the thread. The POST is evidently a way for the browser to retrieve what country it is being run from, while the two GET requests are in support of the tiling feature for new tabs. They appear to simply be part of the Firefox feature set, so any privacy complaints may be sort of swept away as in Rath's admonishment above.
Ian Jackson and others focused on the download of the favicon.ico files. In effect, Iceweasel notifies the search providers whenever a user starts up the browser for the first time, even if the user doesn't want or need a particular provider—or is only opening the browser to look at a local file. But those icons are used in the search box to indicate where to send a search query, so they are needed from the initial browser startup.
Firefox from Mozilla (and in other Linux distributions) simply ships the icons with the browser. However, it is unclear whether those icons can legally be modified by users, so they were removed from the Iceweasel package because they do not conform to the Debian Free Software Guidelines (DFSG). Instead, Iceweasel was set up to download them at first run, as Hommey reported.
Jackson was surprised to hear that Debian had deliberately made a change like this that reduced users' privacy but didn't really change the legal situation for users:
[Supposedly] this decision is made by us for ethical reasons (ie, to uphold our values) but the actual effect is simply to diminish our users' privacy.
He suggested that either an exception be made for the icons, since their distribution is permitted by upstream (Mozilla), or that the icons be eliminated entirely. For his part, Hommey is not even convinced that there is a problem with the icons vis a vis the DFSG. Mozilla has said that the icons are compatible with the Mozilla Public License (MPL) that Firefox is distributed under. So he announced a change in plans:
Since it "seems to be a
minor issue
", Debian project leader (DPL) Neil McGovern is not interested in referring it
to the lawyers unless someone wanted to push that. Disabling the icons entirely, as suggested by some,
is not really an option; Hommey demonstrated that with a screen shot. Another option
would be to create new icons, perhaps some that are less ambiguous about
who the search provider is, "so you don't have to guess whose icon is a
briefcase
", as Don Armstrong put
it. He posted a proof of concept shell
script that created icons with the initial six characters of the name of
the provider.
In the end, it would seem that the icon files will simply be added back into the Iceweasel package as Hommey stated. That is certainly the simplest, least privacy-invading solution. While it may violate the DFSG, though that is not universally agreed upon, the alternative of downloading the icons seems worse to many. This episode is a reminder that preserving privacy in today's web world is a tricky prospect, but also, perhaps, a nod toward the realities that a 16x16 pixel "image" may not be the right place to enforce a—quite sensible, overall—line in the sand. It is still possible that someone will take up the issue and perhaps keep those icons out of the Iceweasel package (replacing them with Armstrong's or something similar), though it seems like that might be time better spent on other battles.
Brief items
Distribution quote of the week
The point of having ethical principles is to do good in the world.
Red Hat Enterprise Linux 6.7 released
Red Hat has announced the general availability of RHEL 6.7. "As the basis for large, complex IT deployments, Red Hat Enterprise Linux 6.7 offers enterprise IT teams new capabilities to bolster system security, proactively identify and resolve business-critical IT issues, and confidently embrace some of the latest open source technologies, such as Linux containers, without sacrificing operational stability." The release notes contain details.
Rkt 0.7.0 released
Version 0.7.0 of the rkt container runtime system is available. "This release includes new subcommands for a rkt image to manipulate images from the local store, a new build system based on autotools and integration with SELinux. These new capabilities improve the user experience, make it easier to build future features and improve security isolation between containers."
Distribution News
Debian GNU/Linux
Debian Installer Stretch Alpha 1
The Debian Installer team has announced the first alpha release of the installer for Debian 9 "Stretch". There are some important changes in this release including a default to graphical mode instead of text, the default architecture with the multi-arch image is now amd64, and more.Improving ARM64 support in Debian
Martin Michlmayr recently performed a rebuild of the Debian archive on ARM64, looking for compiler errors in GCC 5. This a status report on the ARM64 port. "Over 550 packages failed to build on ARM64 due to missing dependencies. Some missing dependencies are libraries or tools that have not been ported to ARM64 yet, but the majority was due to the lack of popular programming languages on ARM64. This includes JavaScript (V8 engine, Node.js), Go (golang-go), .NET (Mono), Common Lisp (sbcl), Haskell (GHC), and Pascal (fp-compiler). I suspect most of these are being ported upstream (possibly with the help of Linaro)."
Ubuntu family
GCC 5 for 15.10 (wily) on July 31
Ubuntu is preparing the switch to GCC 5 as the default compiler for 15.10 (wily werewolf). "Unlike earlier updates to newer compiler versions, which only required updating packages to newer language standards, this time we have a partial ABI transition in the standard C++ library (libstdc++6). Basically we'll have to rebuild around 3500 source packages, and will have some hundred follow-up library transitions."
Newsletters and articles of interest
Distribution newsletters
- Debian Project News (July 21)
- DistroWatch Weekly, Issue 619 (July 20)
- Ubuntu Weekly Newsletter, Issue 426 (July 19)
The New Solus: Putting the Pieces Together Again (LinuxInsider)
LinuxInsider takes a look at the Solus project. "SolusOS was based on Debian. Evolve OS was built from scratch. It seems that the Solus Project is picking up where Evolve OS stopped -- sort of, that is. The new Solus is not a complete porting of the old Evolve OS. Other than the built-from-scratch Budgie desktop, much of it appears to be gutted."
Page editor: Rebecca Sobol
Development
A beta release and a new license for Mailpile
Mailpile is a free-software webmail client that has been designed from the start to provide top-notch security and privacy features. The project recently released its third beta, which improves setup and encryption-key discovery as well as streamlining the user interface. In addition, the project recently held a public discussion about the license under which Mailpile should be released, eventually settling on the Affero GPL (AGPL).
![[Mailpile inbox]](https://static.lwn.net/images/2015/07-mp-inbox-sm.png)
To recap, Mailpile offers a somewhat unusual take on the traditional email program. It is designed to run as a web application (thus making it cross platform with a minimum of fuss), but it is a single-user application and is designed primarily to run on the local machine. Because each user runs a separate copy of Mailpile, it offers isolation. Also noteworthy is that Mailpile is a mail user agent (MUA), so a separate server is required to actually send and receive mail. But, because Mailpile downloads all messages locally, it can function offline and (at least in theory) offer better safeguards against security breaches of the server.
The project also puts a strong emphasis on integrating cryptography into the webmail experience. We examined the first beta release in September 2014, at which point its GnuPG integration was rather awkward in places. The team made a second beta release in January 2015, but withdrew it from the site in March after beta testers complained about IMAP and GnuPG issues (although the release is still available from the project's GitHub repository). The team subsequently scaled back their planned feature set.
Beta three
The third beta was pushed out on July 19, and is available in a source-code bundle for Linux and as installers for Windows and Mac OS X. Mailpile is a Python 2.7 application, though, so installation for the source is trivial. The dependencies are fairly standard and the required Python packages can be installed through pip. Of the other dependencies, the only worthy of note is that Mailpile still uses the GnuPG 1.x branch.
![[Mailpile setup]](https://static.lwn.net/images/2015/07-mp-setup-sm.png)
Among the significant changes in beta 3 is a simplified setup and first-run configuration process. All that the user has to do is select a language and pick a password that will be used to decrypt the local mail storage (i.e., a separate password from those needed to access email accounts). Email account setup has been simplified as well; the program attempts to detect the correct IMAP and POP settings based on the email address entered, and the setup process includes a GnuPG key-generation step.
The server-settings-detection step uses Mozilla's ISP database, so it should be as reliable as Thunderbird's detection (and similarly limited to public email providers). Local mailboxes are also supported by the account-setup tool, so users who already get their mail in mbox or Maildir format can make use of this release as well.
There are even more noticeable changes to the mail-reading
interface—most are, again, simplifications. Previous Mailpile
releases included a sometimes-confusing array of tagging and
contact-management features that, as the release announcement put it,
"seemed like good ideas but never quite worked.
" For
instance, there used to be three separate buttons linked to the user's tag
collection, plus separate "flag" and "favorite" features. The
resulting interface is easier to navigate and the clutter is not
missed.
![[Key creation in Mailpile]](https://static.lwn.net/images/2015/07-mp-key-sm.png)
The new release also significantly improves the multiple-email-account experience, which was among the complaints with previous releases. There is now a "home page" that shows a summary of the configured accounts. Last but certainly not least, the GnuPG support now includes key discovery. The program will attempt to detect which email recipients use encryption or PGP signatures and try to fetch the corresponding keys from public keyservers. This is in addition to manually importing keys, which was already supported.
The program still has a ways to go before it is ready for production usage. Most notably, it lacks the security hardening required to make it usable from a remote server. Despite Mailpile's original design as a local client, this is evidently a feature that users repeatedly ask for.
License one
The other significant development from the past month is that the Mailpile team has finally decided on the license under which it will make releases. This is not an insignificant choice for any project, and the team took the unusual step of asking its users to weigh in on the choice.
In May, project lead Bjarni Einarsson posted an appeal to the community asking for its input. The options presented were the AGPL (version 3) and the Apache 2.0 license—which, at least in some respects, constitute opposite ends of the free-software license spectrum. Apache is renowned for its permissiveness, while AGPL is held up for doing the most to preserve copyleft. The preceding alpha and beta releases of Mailpile had been offered under both licenses while the team debated their merits.
In the initial post, Einarsson reiterated the usual arguments heard from proponents of each side: the risk of "marginalizing" the project by choosing the strong-copyleft AGPL, versus the risk of proprietary Mailpile forks by choosing the Apache license. In June, he summarized the feedback the team had received, quoting several blog posts and emails. Supporters of the project (in the financial sense) were encouraged to vote on the web site.
On July 2, the project announced the final decision: AGPL. Einarsson noted that AGPL "won" on a straight vote tally, albeit by a slim margin, and that Apache won when the results were adjusted by the dollar amounts of the supporters. But that latter result was skewed significantly by one voter's large donation; without it, AGPL won the dollar-adjusted vote by a slim margin, too.
Ultimately, Einarsson said, the slim margins and low turnout concerned him greatly, but he chose to go with the AGPL because he felt it was better aligned with the project's goals:
The Apache License is a wonderful thing, an open, generous, pragmatic, apolitical license. The AGPLv3 on the other hand, is a political and ethical line in the sand.
And so is Mailpile.
For now, it has not been announced whether or not additional beta releases of Mailpile will be made. For the time being, Einarsson plans to make incremental updates to the current beta release every two weeks or so, but he is also re-examining the roadmap. The final release could still take a while, but Mailpile has made clear progress in recent months, and now has a clear licensing plan going forward.
Brief items
Quotes of the week
dgit 1.0 released
Ian Jackson has announced the availability of dgit 1.0. "dgit allows you to treat the Debian archive as if it were a git repository, and get a git view of any package. If you have the appropriate access rights you can do builds and uploads from git, and other dgit users will see your git history."
Kubernetes 1.0 released
Google has released version
1.0 of its container-orchestration system Kubernetes. As the announcement
explains, the 1.0 milestone designates Kubernetes as "production
ready
" for deploying and managing a variety of container
workloads, coordinating related containers in "pods," and managing
live clusters.
Mozilla Winter of Security is back
At the Mozilla Blog, Julien Vehent announces that Mozilla will be conducting a second round of its "Winter of Security" mentoring program. Aimed at college students, the program allows participants to work on security-related free software for university credit, with guidance provided by Mozilla project members. This year's targeted project list includes some high-profile projects like Let's Encrypt and Mozilla's digital forensics tool MiG. Applications are due August 15.
PyQt v5.5 Released
PyQt 5.5 has been released. PyQt is a set of Python bindings for Qt; the 5.5 release updates the bindings for Qt 5.5 compatibility. This includes support for the new QtLocation and QtNfc modules. Python 2.6, 2.7, and 3 are all supported.
Synfig Studio 1.0 released
Version 1.0 of the 2D vector-animation suite Synfig Studio has been released. The latest release is actually numbered 1.0.1, due to a packaging problem with the original 1.0.0 upload. The list of changes includes bugfixes for working with animation keyframes, several new icons, and UI improvements when selecting bounding boxes on the canvas.
Newsletters and articles
Development newsletters from the past week
- What's cooking in git.git (July 20)
- What's cooking in git.git (July 21)
- LLVM Weekly (July 20)
- OCaml Weekly News (July 21)
- OpenStack Community Weekly Newsletter (July 17)
- Perl Weekly (July 20)
- PostgreSQL Weekly News (July 19)
- Python Weekly (July 16; issue #200)
- Ruby Weekly (July 16)
- This Week in Rust (July 20)
- Tor Weekly News (July 22)
- Wikimedia Tech News (July 20)
Calculating the "truck factor" for GitHub projects
The idea of a truck or bus factor (or number) has been—morbidly, perhaps—bandied about in development projects for many years. It is a rough measure of how many developers would have to be lost (e.g. hit by a bus) to effectively halt the project. A new paper [PDF] outlines a method to try to calculate this number for various GitHub projects. Naturally, it has its own GitHub project with a description of the methodology used and some of the results. It was found that 46% of the projects looked at had a truck factor of 1, while 28% were at 2. Linux scored the second highest at 90, while the Mac OS X Homebrew package manager had the highest truck factor at 159.Webber: Why I Am Pro-GPL
At his blog, Chris Webber has written a response to Shane Curcuru of the Apache Software Foundation, who delivered a "Why I don’t use the GPL" lightning talk at this year's OSCON. In particular, Webber takes issue with Curcuru's assertion that he rejects the GPL because he "cares about the users." Writes Webber:
Webber proceeds to respond to several arguments raised in the talk,
and concludes: "I have heard a mantra many times over the last
number of years to "give away everything but your secret sauce" when
it comes to software development. But I say to you, if you really care
about user freedom: give away your secret sauce.
"
Page editor: Nathan Willis
Announcements
Brief items
"Cloud Native Computing Foundation" launched
The Linux Foundation has announced the Cloud Native Computing Foundation. "This new organization aims to advance the state-of-the-art for building cloud native applications and services, allowing developers to take full advantage of existing and to-be-developed open source technologies. Cloud native refers to applications or services that are container-packaged, dynamically scheduled and micro services-oriented. Founding organizations include AT&T, Box, Cisco, Cloud Foundry Foundation, CoreOS, Cycle Computing, Docker, eBay, Goldman Sachs, Google, Huawei, IBM, Intel, Joyent, Kismatic, Mesosphere, Red Hat, Switch SUPERNAP, Twitter, Univa, VMware and Weaveworks. Other organizations are encouraged to participate as founding members in the coming weeks, as the organization establishes its governance model."
Open Document Format (ODF) 1.2 published as International Standard
The Open Document Format for Office Applications (ODF) Version 1.2 has been published as International Standard 26300:2015 by ISO/IEC. "ODF 1.2 is supported by all the leading office suites, and by a large number of other applications. It has been adopted by the UK Cabinet Office as the reference for all documents exchanged with the UK Government, and is currently proposed as the reference standard by the Référentiel Général d'Interopérabilité 1.9.9 of the French Government. In addition, ODF 1.2 has been adopted by many European public administrations."
Calls for Presentations
2nd Annual Web Audio Conference - submissions now open
Web Audio Conference (WAC) will be held April 4-6, 2016 in Atlanta, GA. "WAC is an international conference dedicated to web audio technologies and applications. The conference welcomes web developers, music technologists, computer musicians, application designers, researchers, and people involved in web standards. The conference addresses research, development, design, and standards concerned with emerging audio-related web technologies such as Web Audio API, Web RTC, WebSockets and Javascript. It is open to industry engineers, R&D scientists, academic researchers, artists, and students." The call for submissions closes October 1.
CFP Deadlines: July 23, 2015 to September 21, 2015
The following listing of CFP deadlines is taken from the LWN.net CFP Calendar.
Deadline | Event Dates | Event | Location |
---|---|---|---|
July 24 | September 22 September 23 |
Lustre Administrator and Developer Workshop 2015 | Paris, France |
July 31 | October 26 October 28 |
Kernel Summit | Seoul, South Korea |
July 31 | October 24 October 25 |
PyCon Ireland 2015 | Dublin, Ireland |
July 31 | November 3 November 5 |
EclipseCon Europe 2015 | Ludwigsburg, Germany |
August 2 | February 1 February 5 |
linux.conf.au | Geelong, Australia |
August 2 | October 21 October 22 |
Real Time Linux Workshop | Graz, Austria |
August 2 | August 22 | FOSSCON 2015 | Philadelphia, PA, USA |
August 7 | October 27 October 30 |
PostgreSQL Conference Europe 2015 | Vienna, Austria |
August 9 | October 8 October 9 |
GStreamer Conference 2015 | Dublin, Ireland |
August 10 | September 2 September 6 |
End Summer Camp | Forte Bazzera (VE), Italy |
August 10 | October 26 | Korea Linux Forum | Seoul, South Korea |
August 14 | November 7 November 9 |
PyCon Canada 2015 | Toronto, Canada |
August 16 | November 7 November 8 |
PyCON HK 2015 | Hong Kong, Hong Kong |
August 17 | November 19 November 21 |
FOSSETCON 2015 | Orlando, Florida, USA |
August 19 | September 16 September 18 |
X.org Developer Conference 2015 | Toronto, Canada |
August 24 | October 19 October 23 |
Tcl/Tk Conference | Manassas, VA, USA |
August 31 | November 21 November 22 |
PyCon Spain 2015 | Valencia, Spain |
August 31 | October 19 October 22 |
Perl Dancer Conference 2015 | Vienna, Austria |
August 31 | November 5 November 7 |
systemd.conf 2015 | Berlin, Germany |
August 31 | October 9 | Innovation in the Cloud Conference | San Antonio, TX, USA |
August 31 | November 10 November 11 |
Open Compliance Summit | Yokohama, Japan |
September 1 | October 1 October 2 |
PyConZA 2015 | Johannesburg, South Africa |
September 6 | October 10 | Programistok | Białystok, Poland |
September 12 | October 10 | Poznańska Impreza Wolnego Oprogramowania | Poznań, Poland |
September 15 | November 9 November 11 |
PyData NYC 2015 | New York, NY, USA |
September 15 | November 14 November 15 |
NixOS Conference 2015 | Berlin, Germany |
September 20 | October 26 October 28 |
Samsung Open Source Conference | Seoul, South Korea |
If the CFP deadline for your event does not appear here, please tell us about it.
Upcoming Events
Events: July 23, 2015 to September 21, 2015
The following event listing is taken from the LWN.net Calendar.
Date(s) | Event | Location |
---|---|---|
July 20 July 24 |
O'Reilly Open Source Convention | Portland, OR, USA |
July 20 July 26 |
EuroPython 2015 | Bilbao, Spain |
July 25 July 31 |
Akademy 2015 | A Coruña, Spain |
July 27 July 31 |
OpenDaylight Summit | Santa Clara, CA, USA |
July 30 July 31 |
Tizen Developer Summit | Bengaluru, India |
July 31 August 4 |
PyCon Australia 2015 | Brisbane, Australia |
August 7 August 9 |
GNU Tools Cauldron 2015 | Prague, Czech Republic |
August 7 August 9 |
GUADEC | Gothenburg, Sweden |
August 8 August 14 |
DebCamp15 | Heidelberg, Germany |
August 12 August 15 |
Flock | Rochester, New York, USA |
August 13 August 17 |
Chaos Communication Camp 2015 | Mildenberg (Berlin), Germany |
August 15 August 16 |
I2PCon | Toronto, Canada |
August 15 August 22 |
DebConf15 | Heidelberg, Germany |
August 15 August 16 |
Conference for Open Source Coders, Users, and Promoters | Taipei, Taiwan |
August 16 August 23 |
LinuxBierWanderung | Wiltz, Luxembourg |
August 17 August 19 |
LinuxCon North America | Seattle, WA, USA |
August 19 August 21 |
Linux Plumbers Conference | Seattle, WA, USA |
August 19 August 21 |
KVM Forum 2015 | Seattle, WA, USA |
August 20 August 21 |
Linux Security Summit 2015 | Seattle, WA, USA |
August 20 | Tracing Summit | Seattle, WA, USA |
August 20 August 21 |
MesosCon | Seattle, WA, USA |
August 21 | Golang UK Conference | London, UK |
August 21 | Unikernel Users Summit at Texas Linux Fest | San Marcos, TX, USA |
August 21 August 22 |
Texas Linux Fest | San Marcos, TX, USA |
August 22 | FOSSCON 2015 | Philadelphia, PA, USA |
August 22 August 23 |
Free and Open Source Software Conference | Sankt Augustin, Germany |
August 28 September 3 |
ownCloud Contributor Conference | Berlin, Germany |
August 29 | EmacsConf 2015 | San Francisco, CA, USA |
September 2 September 6 |
End Summer Camp | Forte Bazzera (VE), Italy |
September 10 September 13 |
International Conference on Open Source Software Computing 2015 | Amman, Jordan |
September 10 September 12 |
FUDcon Cordoba | Córdoba, Argentina |
September 11 September 13 |
vBSDCon 2015 | Reston, VA, USA |
September 15 September 16 |
verinice.XP | Berlin, Germany |
September 16 September 18 |
PostgresOpen 2015 | Dallas, TX, USA |
September 16 September 18 |
X.org Developer Conference 2015 | Toronto, Canada |
September 19 September 20 |
WineConf 2015 | Vienna, Austria |
If your event does not appear here, please tell us about it.
Page editor: Rebecca Sobol