Search Results: "nate"

4 October 2006

Steve McIntyre: Why I Became a Debian Developer

I've been doing Debian for 10 years, as of this month. I reckon that's a good excuse for some ponderings... For a long time in college in Cambridge, I was a Slackware user and supporter. It was my first distribution, installed in May 1994. I sent patches to Pat for bugs that I'd found, and I helped several of my friends in college maintain their machines running Slackware too. But after a couple of years of that, I grew tired of spending more time maintaining the OS on my machine than actually using it; I had even gone through the trials of the transition to ELF by hand. Some friendly pushing by my friend Jon Rabone (at the time also a DD) was finally enough, and one weekend in October 1996 we sat down together and started to install Debian on my PC. That first installation was a nightmare! It was a major struggle, and more than one time that weekend I threatened to go back to the comfortable security of Slackware. The installer was awful, and needed lots of hand-holding. Eventually, however, we got there. hammer.chu.cam.ac.uk became a Debian machine, and most of it worked. By the end of that Sunday, I was convinced to stay with it. Next, I decided that I wanted to contribute. The NM process in 1996 was quite simple - I mailed Bruce Perens with my PGP public key and asked him for an account. The package I wanted to maintain was mikmod. At the time I was one of the upstream developers, and I wanted to make sure it worked well in Debian. Unfortunately, I had already been beaten to it - Joey Hess had already packaged it in the few days since I first started work. Some things never change... :-) I mailed Joey and took over the package, then I started looking for other things to help with. I had long been annoyed that my Slackware patches had never met with any response, so Debian seemed ideal for me - a place where I could make a difference directly. Over the following years, I took on, worked on and passed on lots of packages. At one point, I was maintaining lots of audio programs. At another I worked on lots of archiving and compression programs. Then I moved onto the debian-cd team. Debian was excellent fun: I got to use a great, stable operating system and I got to work on it and help make it better! It hasn't all been plain sailing - there have been plenty of times when I've become disillusioned with things. There have been times when I've spent an entire night or weekend hacking on things and felt unhappy that either I hadn't made any progress or (even worse) my effort wasn't appreciated. There have been times when I've gone without sleep to get a package fixed or a CD build done, because I felt it mattered. To offset that, there have been great moments: going along to Linux Expos and meeting users of my packages who wanted to say thanks and buy me beer; travelling around the world, meeting up with DDs and chewing the fat; playing Mao in the middle of the night at Debconf; most especially the feeling of achievement when my^Wour work is done and we manage to finish a release. Oh, and that first installation? It's still around, almost ten years later. It has moved onto different hardware more times than I can remember, but I've continued upgrading it regularly ever since. It was once my only computer, but now it's one of many. hammer became sledge, then jack. It's now the machine that holds my Debian mirror and serves files to the rest of my home network. That's what I call upgradeability! It's a story that I tell people at Expos, and every year it gets more impressive... :-)

3 October 2006

Steve McIntyre: BSP Marathon - Utrecht, 30 Sep - 01 Oct 2006

Last weekend, Jeroen van Wolffelaar and Thijs Kinkhorst organised a BSP at Utrecht University. I went along for a couple of reasons: I met up with Hanna Ollila at Schiphol Airport late on Friday evening, and we took the train down to Utrecht together. We found Jeroen and some others at the station and went straight on to a party in the middle of town for a few hours. Then after just a few hours' sleep we headed into the University to get breakfast and start squashing bugs. A group of about a dozen people turned up that day - mainly a mixture of Dutch DDs and other locals.

BSP I took a look at a couple of bugs initially on Saturday: #387419 and #387498. Unfortunately, the first (kdepim FTBFS on alpha) was difficult to reproduce - the alpha machine I had available for testing was too short on memory and took a very long time to build kdepim, long enough that after 2 days I gave up. I couldn't reproduce the latter (system() hanging when running on mips) on any machine I had access to - it looks like more work is needed there... In parallel with those two RC bugs (found on Andreas' great summary page at http://bts.turmzimmer.net/details.php), I also had a very productive session working in parallel with Christian Perrier, fixing translation/i18n bugs in one of my own packages, CVS. Thanks Christian, you're a pleasure to work with! On Saturday evening, the gang of us headed into the centre of Utrecht for a nice meal, some beer and some spirited conversation at a Greek restaurant. I took the opportunity to talk with Frans Pop about some of the remaining work needed for d-i and debian-cd. On Sunday, the work continued. I was still waiting on feedback on #387498 and my build of #387419, so I decided to make the most of the uninterrupted time to get some debian-cd development work done. I'm still hoping to get multi-arch CDs working before we release etch, so this was a great help. In fact, I got so engrossed in this that I managed to work straight through dinner...! In terms of bugs, I must admit that I didn't do much in terms of reducing absolute numbers. This weekend, there were a lot of bugs in categories that don't really work well for Bug Squashing: licensing/legal bugs (which really need discussion with the maintainer), newly-opened bugs (IMHO it's a little rude to NMU a package when a bug has only just been opened - give the maintainer at least a couple of days to respond!) and deep bugs where intimate knowledge of the package is needed. I expect there will be more to work on next weekend in Zurich, if nothing else some of those "new" bugs will have aged. Early on Monday morning I caught the bus from near Jeroen's apartment to start the journey home. Thanks to the nice reliable public transport, I got all the way to Schiphol well in time. Then my flight back to Stansted was delayed... :-( It was great to meet up with a bunch of enthusiastic people. Some I'd met before (Frans, Jeroen, Hanna). Some I met for the first time (Thijs, Bas, Moritz and others). But all of them were working hard, wanting to help get Etch out on time. Let's keep up the good work! I have a small number of photos online.

Evan Prodromou: 11 Vend miaire CCXV

October is a busy month for us. October 14th is my birthday, and October 16th is our wedding anniversary. On our honeymoon in 2004, we took a trip to wt:Charlevoix at the mouth of the Saguenay fjord in Quebec. Then, in October 2005, Amita June had just been born, so we took a short trip to Ottawa for the weekend. At this point, I think we've established an anniversary tradition of short weekend trips to cities in Eastern Canada. This year, Maj started arranging a trip to St. John's in Newfoundland. I'm pretty fascinated by wt:Newfoundland -- it's one of the oldest settlements in North America, yet very isolated. Its culture is a unique blend of Celtic, English, and a smattering of French Canadian with an idiosyncratic accent and great music. But St. John's is just too remote for a relaxing, romantic anniversary weekend. We kept trying to find easier ways to get there, and nothing was working out. So we decided to save Newfoundland for a spring trip. My crazy-cuckoo dream is to drive from Montreal to Labrador City and then out to Goose Bay in Labrador on the mainland, take the ferry to Newfoundland, drive around a bit there, then back to Montreal on a car ferry. Good trip, eh? So, we decided to take things a little easier and go to another part of Canada. We've wanted to visit wt:Halifax for a long time, and now it looks like it's going to work out. It's only 1-1/2 hours by plane from Montreal, and it's supposed to be a very charming, fun city. I got good deals on Air Canada for the two of us, plus baby, and we're staying at the posh Lord Nelson hotel in the middle of town. Even though it's the "Splurge" hotel on the Wikitravel Sleep section, I was able to get a discount with my CAA card that makes the price just about acceptable for a special occasion weekend. Now we have to plan what to do when we get there. We've only been to Nova Scotia once, and that was just a jaunt across the border from New Brunswick for kcks. I'm going to pore over the Wikitravel and World66 articles to see what I can come up with, and hopefully do some research while we're on the road. Really, that's the best part for me. I probably shouldn't look so far ahead -- we've got Hudson (New York) still to do this weekend. Like I said, a busy month! tags:

Free Books I've been planning to go to the local Wiki Wednesday here in [wt:Montreal], so I was reviewing the Montreal Wiki Wednesday page for previous events. Although we've made it to a few of the previous ones, we definitely haven't made it to all the ones we said we would... so be it. One of the previous speakers was Hugh McGuire, a Montrealer who started an excellent project called Librivox. Librivox is a project to create free audiobooks, with chapters contributed over the Internet by readers around the world. They take books from Project Gutenberg (which is apparently a MediaWiki wiki site now... who knew?) and volunteers read them and then the whole thing gets munged into a nice little package. Everything stays in the public domain (bless their generous souls) and they even have a Librivox podcast just in case you swing that way. I'm super-hot for audio books. I love listening to them while driving, especially for long road trips. Maj is lukewarm on the idea, but she occasionally gets into them when we've got a good book going. The big downside is that they're ridiculously expensive -- $50+ for some books. The only thing that bothers me a bit about Librivox is that there arent CD Audio ISOs available. We have an MP3 CD player in our car, and I think it should work fine, but for sharing it's awful nice to have real CDs. UPDATE (from Hugh): There are mp3 ISOs available here: LibriVarc, but no aiff files. mega storage space, bandwidth and transfer problems to do that, but if anyone is interested in providing such CDs, or helping manage such a project, we'd love to know about it. tags:

BarCampMontreal And while drifting through Hugh McGuire's blog, what do I see but a link to the newly-announced BarCampMontreal -- the first BarCamp to happen here in The City Without a Nickname. I had thought that the loose plan was to do a BarCamp to coincide with RecentChangesCamp in May 2007, but this plan seems more impetuous and uninhibited -- just like a BarCamp. There are just too many people to invite here in Montreal, though... we have something like 20 Debian developers, a whole passel of bloggers and wikitistas, lots of games developers and folks like that. Lots of work before the big weekend. Did I mention that October is a busy month? tags:

Day against DRM And look at that... October 3 is the Day against DRM per Defective by Design. A new DRM info clearinghouse, cleverly named drm.info, launched today, too. I've been in the weird situation lately of fighting against over-protectiveness w/r/t DRM in the Creative Commons licenses, when in fact I think DRM is twisted and dumb. It's a bill of goods being sold to entertainment companies by shady technology groups, it's rarely effective, and its only value is to punish law-abiding citizens. It's gotta go. A passionate and profanity-laced article I wrote about DRM coders for Pigdog Journal was linked from ars technica and BoingBoing last year. Although my writing style is a bit different (cough cough) than it once was, I still feel the same about DRM: a shameful and hostile way for technologists to treat each other. tags:

Are you experienced? So, I like the TV show Lost a lot, but I had no idea about this immersive alternate reality game The Lost Experience. Seems like just the kind of intense investigation game to keep losties busy for the entire summer. (You know, while they weren't trying to figure out the truth about lonelygirl15.) I'm not really that into figuring this stuff out, but I do enjoy reading the details once people have worked them through. tags:

Clint Adams: The streets were paved with ambergris

So, I must say, he said, That hotel is much nicer than the one they put me in last time. It's this wonderful little bed and breakfast sort of thing, in an old renovated mansion. Ting and I were the only guests. The owner lives there and was very friendly. Nice, she said. And, he continued, in direct contrast to the place they usually put me, the sheets were both clean and soft, and none of the towels smelled like scallops. Internet access? she asked. Yeah: wireless. he replied. Nice, she said.

2 October 2006

MJ Ray: TPM/DRM: leaflet the Apple Store

I was one of the plain clothes who went into the Apple Store first of all. As suggested, I started on the upper floor, but I found the staff:customer ratio too unfavourable. It seems that the top floor has a lot of the expensive hard-to-secure products, so there's a lot of staff and some visible security. I had a chat with a few people, but I wandered back downstairs long before Simon's fairly visible leafletting tour was shown the door. While downstairs, I noticed the huge till queue, which was attractive for three reasons: it had no security (I guess shoplifters rarely queue for the till), most of them are standing around waiting for something to read and they are almost certainly Apple customers, so who better to inform? [...cut from feed version...] Then, I got a bit bored and started putting the leaflets into Apple's product leaflet dispensers (in front of Apple's - no leaflets were removed), which soon got me rumbled. I left and spent the next two hours helping the pavement teams, which other people have described well. I was mostly working out towards the street corners, or walking up and down with the flow of pedestrians. I tried a few of the different posters, to see how well they worked:

  1. The iTunes hand-tied poster worked well a bit further away from the store, catching crowds who were walking towards it. I suspect some people who took the leaflet after seeing this poster were loyal Apple-fans who thought it was an Apple promotional offer. It did get some very strange looks, especially from women - maybe they thought it was an ad for iPod-themed bondage;
  2. The simple DefectiveByDesign.org worked well when people had seen the HazMat crew, along with the question "Do you want to know what the yellow suits are about?" Unfortunately, some people thought we were protesting about the exploding laptops problem. Do MacBooks and PowerMacs explode too?
  3. "Eliminate DRM" got some takers for the "What's DRM?" question, but I didn't find it worked as well as the other two.
Some passers-by asked me questions: [...cut from feed version...] We handed out 3200 leaflets in about 150 minutes, which I think is pretty good going. Sometimes, it seemed nearly everyone passing through took a leaflet. Given that distribution rate, I was surprised how few ended up on the floor or in the bins at each street corner: the leafletters weren't too aggressive and I think that helped to get leaflets to people who would read them, although I think some were discouraged at how slowly they seemed to be handing out leaflets. It was also good to meet a few people from around the country, although I fear I'll forget which name links to which face soon. I had to rush off before talking to too many people (the joys of cheap transport tickets) but there were still some interesting chats.

Benjamin Mako Hill: Working in Concert

Unfortunately, I couldn't make it to the Creative Commons Concert in New York City last weekend. All proceeds for the concert went to Creative Commons. Now I may be wrong about this and will happily stand corrected if I am, but, as far as I can tell, none of the artists performing at the benefit have ever released an album or a major piece of work under a Creative Commons license -- even the restrictive and non-free licenses. The free culture movement needs some things more than money. For example, it needs high quality creative works under permissive licenses. We'd be better off with the good press associated with one hit single under a CC BY-SA license than all of the proceeds of a benefit like Friday's. It might also be nice to highlight the great work being done by artists who are risking more secure economic models in favor of releasing their works under free licenses. Or perhaps this reminds us of another important conversation: Why are many popular musicians who are willing to support CC unwilling or unable to use the licenses? More importantly, how are we going to change this?

30 September 2006

Otavio Salvador: GRUB legacy is frozen

During this week, Robert (one of maintainers of grub), proposed on the mailing list to freeze it. We won’t do a hard freeze but we’ll only accept patches that: Besides, he did a lot of good work on GRUB2. All new developments, improvements and refactorings are focused on GRUB2 now. We intend to move to it as soon as Etch goes out and ’cause of that we engourage everyone to make a test and report his/her results to us. I also want to ask to everyone who did previous work on grub and that wasn’t merged until now, try to convert it to grub2 and coordenate with us how we can integrate it better with grub2.

Florian Ragwitz: Perldition, a small Blog and CMS, written in Perl

Until a few days ago my website was driven by PodCMS, which allowed me to manage all of the content as directories and files containing Pod (Plain Old Documentation). Unfortunately that wasn't quite flexible enough and didn't allow some features, like comments, tags and trackbacks, to be implemented easily. Also Pod sucks for some sort of content, as there's no satisfying Pod2Html module on CPAN as it seems. Therefor I decided to create something new. The new system has all features the old one had, but now allows to create content in lots of formats such as: Other markup formats are possible as well, as the API for the formatting plugins is quite easy and usually just a thin wrapper around a CPAN module which does the actual translation to HTML. Beside allowing new formats to write the content in, it also adds the following features: In conclusion I'm pretty happy with the new software. I'm just very disappointed by quality of the generated HTML that the various Pod2HTML modules on CPAN produce, so I'll probably end up in writing something myself, based on Pod::Parser. PS: The URL to rss feed changed. Please use http://perldition.org/blog.rss.

Evan Prodromou: 7 Vend miaire CCXV

NewsForge has a very good overview of the problems with Creative Commons licenses for Debian. In particular it covers the work that myself and members of the Debian Creative Commons Workgroup did to bring the CCPL into compliance with the Debian Free Software Guidelines. It also tells about how we had a draft version of the license that was DFSG-compatible, but how that was unfortunately changed. (More info at the Debian Creative Commons Workgroup report.) How are things going with the public review process? Not so well. The main sticking point remains "parallel distribution", which was part of the previous draft license we reviewed, but which was pulled. People have some very emotional reactions to DRM, and they tend to sacrifice developers' and users' freedom in their quest to "Stop DRM!!!!1!". Please, if you are at all interested in seeing DFSG-compatible versions of the Creative Commons Attribution (BSD-like) and Attribution-ShareAlike (copyleft) licenses, let people inside Creative Commons know. The cc-licenses mailing list is the main conduit for public feedback on the next generation of the licenses. Even an email that says, "I want the Creative Commons licenses to be compatible with the Debian Free Software Guidelines." would help tremendously. tags:

28 September 2006

Jon Dowland: WIP

After my last post bemoaning the negativity on planet, psn suggested that perhaps I should post something positive. So here's what I'm working on at the moment. First and foremost I suppose is debconf7. Initially I've basically been playing secretary to meetings. More recently, due to the list of complaints collectively known as "NoJune", I've been doing my best to investigate the possibility of moving the provisional dc7 booking date forward in time a week or two, towards July. After several discussions staring at the time table and what info we had about other bookings, followed by several phone calls with the venue, I unfortunately have basically confirmed that the entirety of July and the last week of June are not open to us at all, so there's no way we can move the date. My other main activity in Debian at the moment is as a member of the Debian Games Team, where I'm mainly working on doom-related packages in order to implement my world domination plans. Due to the impending freeze I've been trying to work out what of the plan I can implement and get packages uploaded so that the Etch doom experience is as good as possible.

Simon Richter: Wacky ideas #9: alternate system roots

When building images for embedded systems or bootstrapping, it is sometimes necessary to configure a package on the host system. This is somewhat doable when host and target system are the same architecture, but becomes difficult when they are not, and downright impossible for packages that configure themselves for the particular machine they've been installed on, like xorg for example. The idea to solve this is actually three ideas:
  1. split the package dependencies into installation time and runtime dependencies, and a third category for "needed for both"
  2. if a package install-depends on itself, then it can only be configured on the target system, such packages should not be pre-depended on for obvious reasons
  3. to actually allow installation when host and target are different architectures, the maintainer scripts need to be able to handle alternate system roots.

Evan Prodromou: 5 Vend miaire CCXV

Being an inveterate domain-name registerer, I've got a lot of domains sitting around doing nothing. I've only recently stumbled across Bruce Perens's Open Source Parking site. It's a clever idea -- transferring those parked domains on GoDaddy and other registrars to a page with ads for FOSS projects. tags:

Adieu John Our friend John Usher bugged out to wt:Banff today. He's off to the Banff Centre to finish up the research he did on his Ph.D. and do some more work on goofy, crazy audio projects in the healthsome mountain air. According to John, it's really nice at the Centre, but if you go outside you have to clap all the time to keep grizzly bears away. I'm not sure if that's for real or just a prank that the locals play on visiting scientists. John's been here a few weeks -- it was really good to have him. Our apartment is just a bit too big, and I've enjoyed the space most when we have a friend or relative staying in the guest bedroom. I think in the year or so that we've lived here it's been occupied about 30-40% of the time. I know Amita June will miss having Mononc John around. They get along really well, and I was hoping that AJ would pick up some UK turns of phrase like "tickety-boo" and "manky". I'm particularly charmed by the English use of the word "cheers", which seems to be analogous to the way like Hawaiians use "aloha"; it means hello, good bye, thank you, and Mmmm! Beer!. A fine word used by fine people. tags:

Postfix fix Over the last few days I've been tightening down on the amount of spam I get in my Inbox by trying to cut it off at the MTA (mail server) level. I have a lot of different email addresses, and I use a mix of mail forwarding and multiple IMAP or POP3 inboxes to bring everything together into one nice little bundle. I do some Bayesian filtering on the client side, and I have a call to use Vipul's Razor in my .procmailrc files, but it's great to filter this stuff further up the data path, too. Fortunately the three servers that get me the most mail all run Postfix. Postfix has some nice common-sense features that cut down on spam right out of the box. First, I made sure all three servers used wp:DNSBL lists to block open relay servers. Second, I added some checks for validity on sender address domain and domain in the HELO command. Finally, I added a filter to check the Sender Policy Framework to see if the connecting server is authorized to send mail for the sending address's domain. Of the three changes, I've found that the basic checks -- making sure that sender address domains and HELO hostnames are valid -- are blocking the most mail. But the other two kinds of checks help, too. This all came not a moment too soon, as the wikitravel.org mail server seems to be under another DDOS attack. Check out the numbers on the mail that's queued versus what's getting rejected!
evan@antipater:~$ sudo grep NOQUEUE /var/log/mail.log.0   wc -l
119150
evan@antipater:~$ sudo grep qmgr.*removed /var/log/mail.log.0   wc -l
590
Gee, three orders of magnitude difference... I'm getting about 50-50% on other servers. This is over the last 24 hours or so -- what a huge waste of time. tags:

26 September 2006

Biella Coleman: The Long Fire Of Political Action

All the soarings of my mind begin in my blood.
-Rainer Maria Rilke I have made it back from NYC after a pretty intense few days spent at the Open Minds Conference and Icarus-hosted workshops, Get Your Freak On. Both were incredibly interesting and I felt the ambivalent rush of excitement and fear that follows the prospect of working on a new project. While I have spent some time researching critiques of psychiatry, I have not spent all that much time with the people involved, academically and personally, in the various movements. And there is nothing like seeing in the flesh and blood some very passionate political work to get the intellectual excitement brewing. The first time I went to a survivor conference and protest I was living in San Francisco, deeply involved in my hacker research. I learned about the movement from a civil libertarian John Gilmore, who drew inspiration from psychiatric survivors to develop his free speech arguments for drug legalization. I had never heard of them and was intrigued so I naturally poked around the web. And I was fortunate to find out that their conference was being held the following weekend less than 10 blocks from where I was living at the time. I made time to go and unsurprisingly, it was a powerful event, perhaps the most stunning conference I had ever been to. There was something awfully inspiring about a political movement in which the members had experienced heavy doses of trauma, often through heavy doses of “treatment” and yet found the energy, will, and life to engage in political action, and in a society that does most everything to dampen the fire of politics. This weekend was no less inspirational. Even at the academic conference, the personal stories of trauma, survival, and the complex ethical decisions of choice in a landscape dominated by one medical model, erupted frequently. These were important eruptions that sometimes probably for some felt out of place in an academic setting where such outpourings are discouraged, buried deep away never to disturb the calm and rationality of talks. But without them, the conference would have felt dry, staid, and sterile, which would precisely have been the most disappointing atmosphere to have created for this environment. All the talks were engaging and illuminating and it was great to see and hear many folks working on these topics and especially working to carve out a different political and somatic reality. For me, the talks by David Oaks and Jackie Orr were the most electric and hopefully I will soon get the videos of them as well as most others (as I (tried) to tape most of the conference) up for those who are interested. In the meantime, David Oaks has already
released his talk, which is worth checking out. One of the more interesting parts of the conference was that it gave a clear indication of one of the great successes and strengths of the mad movement, which is its staying power, its ability to survive (even if not necessarily known to wider publics) generation after generation, which is more surprising given that the vitality of so many of the political movements of the 1960s and 1970s, vanished or languished. This continuity was marked by David Oaks keynote speech entitled “Unite for a Nonviolent Revolution in the Mental Health System: What 30 Years in the Mad Movement Have Taught Me” and just by the fact that he and Celia Brown were there, both who have been involved for decades. Beyond that, it was also the new faces, the new groups, that include Icarus, and the
Freedom Center, that attest to the ability for this Mad Movement to thus far escape the cruel ravages of time and its intervention, often causing rifts within and across generations. Sasha Dubrul who gave a talk during the activist panel and founded Icarus four years ago talked about the deep alienation he felt when he first had encountered the rhetoric of psychiatric survivors and, even despite his deeply critical stance against psychiatry. He wanted to create an organization and a message and a place that resonates with our actual experiences of mental illness rather than trying to fit out lives into a conventional framework. It is a message that swoops into many territories that includes a stiff, unrelenting critique of psychiatry and the pharma industry all the while admitting that not everyone can survive without pharmaceutical drugs (and being deeply grateful for this), all the while also providing pathways to alternatives. It is not easy territories to navigate, due to the and cracks and crevices between positions but then again, most of life is filled with these bumpy textures and not a smooth plane free contradictions. If Icarus was born in part because existing organizations did not adequately address existing needs and desires, it did not grow and move away from existing organization but moved closer to them and is now is in alliance with
MindFreedom. And this is key. Difference in a political movement adds vitality, depth, opportunity but this can only be brought into healthy fruition with alliances. Otherwise, deep fragmentation follows, which given the already deeply fragmented nature of our lives, and of the political landscape, can end in political stasis. But so far, the Mad Movement has over years taken “mad anger” to fight a mad system, and given the last 30 years, I am sure will provide many more decadesof mad pride.

Aigars Mahinovs: Bug hugging?

Hmm, I wonder if in the bug squashing parties one can eliminate bugs by hard random hugging?

25 September 2006

Benjamin Mako Hill: Wizards of OS Wrap-up

My joint workshop with Lawrence Lessig at Wizards of OS went, in my opinion, extremely well. The worst hitch was an unfortunate series of events that conspired to keep Vera Franz from attending and moderating the session as planned. Paul Keller, who was supposed to participate in the panel, graciously (and capably) moderated in her place. The panel allowed Lessig and I to talk openly and publicly about about our disagreements for the first time while also highlighting the many places where we speak with one voice. The conversation managed to be both positive and productive without papering over issues. I usually like to post talk notes and slides after each speaking engagement. However, our WOS meeting was a "workshop" so I have nothing prepared to present here. I have, however, seen two write-ups in the press: If someone has a recording, tell me how I might get a copy. One small note: I am quoted in IP watch as saying that most CC works are under the most restrictive licenses and that there has been no shift toward less restrictive licenses with time. Mia Garlick has pointed out that the latest license usage statistics, based on admittedly imprecise linkback data, show a several percentage point decrease in the usage of licenses that block commercial use and derivatives -- when expressed as a fraction of the total number of works under CC licenses. The restrictive licenses are still the most popular but it was incorrect to say that there is no evidence of any progress whatsoever toward more free licenses. Tomorrow, I will post a summary and response to one of the points that Lessig and I talked most about.

23 September 2006

Simon Richter: Efficiency

I've mentioned democracyplayer a few times now. I really think the platform has quite some potential, however a number of things have to be addressed. For example, the system load while a download is active is between three and four. I have a certain feeling that this is related to the threads that paint the wonderful spinning arrows. Unfortunately, the load does not decrease when I put another window in front. Or play a movie. Seriously, what happened to the art of stopping pointless threads?

Martin F. Krafft: Swiss drumming

My percussionist's heart really jumped high here in Switzerland when I saw this (Flash video; no alternate formats, sorry). NP: Porcupine Tree / Lightbulb Sun

Steve McIntyre: Tenerife conference (continued)

I already started describing my time at JSLULL, the Free Software conference at La Laguna in Tenerife. It's been a few days since, and I'm now back at home and ready to summarise the rest. I should apologise up front that my memory of people's names is awful... :-( The slides from the talk are on my website now, in case anybody is interested, and my photos are up too. The original plan for Tuesday afternoon was to run a small Bug Squashing Party in one of the computer labs at ULL, but unfortunately this week the main internet link from ULL to Madrid had failed. It's a little difficult to work on bugs when you can't even get to the list, so we changed tack. Instead, I led a small workshop for interested people, demonstrating how to create Debian packages. About 8 people got involved, taking turns to drive the keyboard, ask and answer questions. People were keen to learn; there is a very active group in the University running the labs and other machines, and they were hoping to create packages of some of their own software to make maintenance and installation easier. I'm glad to help! ULL We went out to one of the beaches near Santa Cruz that evening, then headed back into the city later on for drinks and dinner. We had a very animated conversation about the use of Free Software in schools and local government, with the Spanish people and Knut Yrvin from Skolelinux trading interesting stories about their experiences. On Wednesday morning, a group of us rented a car and headed inland to visit El Teide, the huge volcano that dominates the Tenerife skyline. It's the first time I've ever looked down on clouds from the passenger seat of a car! We headed almost to the top, and visited the desolate plain just down from the last summit. It looked almost like a lunar landscape, untouched by water... Clouds! Later on that day, I headed back to the hotel in Santa Cruz and then on to the airport to catch my return flight to England. Carlos (again) had given up his time to chauffeur me around, and we chatting about all sorts of things while he drove south. Unfortunately, the flight was delayed by several hours because of mechanical problems. I would have been happy enough to have simply waited at the airport, but Carlos was having none of it. :-) He insisted we should go and have dinner together; we went for drinks at a beach bar, then up to his home village for a lovely meal. Eventually I caught my plane at 2:30am, and got back to England just in time to catch the rush hour traffic on the M25. Me and Carlos I spent a lovely couple of days in Tenerife, spending time and making friends with the very enthusiastic local Free Software hackers. I'd love to go back again soon and see more of the place. Thanks to all the of the people involved, you were very welcoming!

22 September 2006

Scott James Remnant: Upstart in Universe

upstart is a replacement for the init daemon, the process spawned by the kernel that is responsible for starting, supervising and stopping all other processes on the system. The existing daemon is based on the one found in UNIX System V, and is thus known as sysvinit. It separates jobs into different “run levels” and can either run a job when particular run levels are entered (e.g. /etc/init.d/rc 2) or continually during a particular run level (e.g. /sbin/getty). The /etc/init.d/rc script is also based on the System V one (and is in the sysv-rc package), it simply executes the stop then start scripts found in /etc/rcN.d (where N is the run level) in numerical order. Why change it? Running a fixed set of scripts, one after the other, in a particular order has served us reasonably well until now. However as Linux has got better and better at dealing with modern computing (arguably Linux’s removable device support is better than Windows’ now) this approach has begun to have problems. The old approach works as long as you can guarantee when in the boot sequence things are available, so you can place your init script after that point and know that it will work. Typical ordering requirements are: This worked ten years ago, why doesn’t it work now? The simple answer is that our computer has become far more flexible: We’ve been able to hack the existing system to make much of this possible, however the result is chock-full of race conditions and bugs. It was time to design a new system that can cope with all of these things without any problems. What we needed was an init system that could dynamically order the start up sequence based on the configuration and hardware found as it went along. Design of upstart upstart is an event-based init daemon; events generated by the system cause jobs to be started and running jobs to be stopped. Events can include things such as: In fact, any process on the system may send events to the init daemon over its control socket (subject to security restrictions, of course) so there is no limit. Each job has a life-cycle which is shown in the graph below: The two states shown in red (“waiting” and “running”) are rest states, normally we expect the job to remain in these states until an event comes in, at which point we need to take actual to get the job into the next state. The other states are temporary states; these allow a job to run shell script to prepare for the job itself to be run (“starting”) and clean up afterwards (“stopping”). For services that should be respawned if they terminate before an event that stops them is received, they may run shell script before the process is started again (“respawning”). Jobs leave a state because the process associated with them terminates (or gets killed) and move to the next appropriate state, following the green arrow if the job is to be started or the red arrow if it is to be stopped. When a script returns a non-zero exit status, or is killed, the job will always be stoped. When the main process terminates and the job should not be respawned, the job will also always be stopped. As already covered, events generated by the init daemon or received from other processes cause jobs to be started or stopped; also manual requests to start or stop a job may be received. The communication between the init daemon and other processes is bi-directional, so the status of jobs may be queries and even changes of state to all jobs be received. How does it differ from launchd? launchd is the replacement init system used in MacOS X developed as an “Open Source” project by Apple. For much of its life so far, the licence has actually been entirely non-free and thus it has only become recently interesting with the licence change. Much of the goal of both systems appears initially to be the same; they both start jobs based on system events, however the launchd system severly limits the events to only the following: Therefore it does not actually allow us to directly solve the problems we currently have; we couldn’t mount filesystems once the “filesystem checked” event has been recived, we couldn’t check filesystems when the block device is added and we certainly couldn’t start daemons once the complete filesystem (as described by /etc/fstab) is available and writable. The launchd model expects the job to “sit and wait” if it is unable to start, rather than provide a mechanism for the job to only be started when it doesn’t need to wait. Jobs that need /usr to be mounted would need to spin in a loop waiting for /usr to be available before continuing (or use a file in a tmpfs to indicate it’s available, and use that modification as the event). This is not especially surprising given that Apple have a high degree of control over both their hardware and the actual underlying operating system; they don’t need to deal with the wide array of different configurations that we have in the Linux world. Had the licence been sufficiently free at the point we began development of our own system, we would probably have extended launchd rather than implement our own. At the point Apple changed the licence, our own system was already more suitable for our purposes. How does it differ from initng? Initng by Jimmy Wennlund is another replacement init daemon intended to replace the sysvinit system used by Linux. It is a dependency-based system, where upstart is an event-based system. The notion of a dependency-based system is interesting to talk about at this point. Jobs declare dependencies on other jobs that need to happen before the job itself can be started. Starting the job causes its dependencies to be started first, and their dependencies, and so on. When jobs are stopped, if running jobs have no dependencies, they themselves can be stopped. It’s a neat solution to the problem of ordering a fixed boot sequence and the problem of keeping the number of running processes to a minimum needed. However this means that you need to have goals in mind when you boot the system, you need to have decided that you want gdm to be started in order for it, and its dependencies, to be started. Initng uses run levels to ensure this happens, where a run level is a list of goal jobs that should be running in that run level. It’s also not clear how the dependencies interact with the different types of job, a dependency on Apache would need the daemon to be running where a dependency on “checkroot” would need the script to have finished running. Upstart handles this by using different events (“apache running” vs. “checkroot stopping”). Again while interesting, Initng does not solve the problems that we wanted to solve. It can reorder a fixed set of jobs, but cannot dynamically determine the set of jobs needed for that particular boot. A typical example would be that if the only dependency on the job that configures networking is the mount network filesystems job, then should that job fail or notbe a goal (e.g. because there are no network filesystems to be mounted) the result is that network devices themselves will not be configured. You could make everything a goal, and just use the dependencies to determine the order, however this is less efficient than just ordering the existing sysv-rc scripts (which can be done at install time). Another example is that often you simply don’t know whether something is a dependency or not without reading other configuration, for example the mount network filesystems may be a dependency of everything under /usr or may just be a dependency of anything allowing the user to login if it just mounts /home. The difference in model can be summed up as “initng starts with a list of goals and works out how to get there, upstart starts with nothing and finds out where it gets to.” How does it differ from Solaris SMF? SMF is another approach to replacing init developed by Sun for the Solaris operating system. Like initng it’s a dependency-based system, so see above for the differences between those systems and upstart. SMF’s main focus is serive management; making sure that once services are running, they stay running, and allowing the system administrator to query and modify the states of jobs on the system. Upstart provides the same set of functionality in this regard, services are respawned when they fail and system administrators can at any time query the state of running services and adjust the state to their liking. Will it replace cron, inetd, etc? The goal of upstart is to replace those daemons, so that there is only one place (/etc/event.d) where system administrators need to configure when and how jobs should be run. In fact, the goal is that upstart should also replace the “run event scripts” functionality of any daemon on the system. Daemons such as acpid, apmd and Network Manager would send events to init instead of running scripts themselves with their own perculiar configuration and semantics. A system administrator who only wanted a particular daemon to be run while the computer was on AC power would simply need to edit /etc/event.d/daemon and change “on startup” to “on ac power”. What about compatibility? There’s a lot of systems administrators out there who have learned how Linux works already and will not want to learn again immediately, there’s also a large number of books that cover the existing software and won’t cover upstart for at least a couple of years. For this reason, compatibility is very important. upstart will continue to run the existing scripts for the forseeable future so that packages will not need to be updated until the author wants. Compatibility command-line tools that behave like their existing equivalents will also be implemented, a system administrator would never need to know that crontab -e is actually changing upstart jobs. Does it use D-BUS?
“To D-BUS people, every problem seems like a D-BUS problem.” —Erik Troan
The UNIX philosophy is that something should do just one job, and do it very well. upstart’s one job is starting, supervising and stopping other jobs; D-BUS’s one job is passing messages between other jobs. D-BUS does provide a mechanism for services to be activated when the first message is sent to them, thereby starting other jobs. Some people have taken this idea and extended it to suggest that all a replacement init system need do is register jobs with D-BUS and turn booting into a simple matter of message parsing. This seems wrong to me, D-BUS would need to be extended to supervise these services, provide means for them to be restarted and stopped; as well as deal with being process #1 which means cleaning up after children whose parent’s have died, etc. It seems far simpler to arrange for D-BUS to send an event to init when it needs a service to be started, and focus on being a very good message passing system. The IPC mechanism used by upstart is not currently D-BUS because of various problems, however it’s always been expected that even if init itself doesn’t communicate with D-BUS directly, there would be a D-BUS proxy that would ensure messages about all init jobs and events would be given to D-BUS and D-BUS clients could send messages to init to query and change the state of jobs. What is the implementation plan? Because this is process #1 we are changing, we want to make sure that we get it right. Therefore instead of releasing a fully-featured daemon and configuration to the world, we’re developing it in the following stages:
  1. Principal development; at the end of this stage the daemon has been implemented and can manage jobs as described.
  2. Replacement of /sbin/init while running the existing sysv-rc scripts. This is the shake-down test of the daemon, can it perform the same job as the existing sysvinit daemon without any regressions?
  3. /etc/rcS.d scripts replaced by upstart jobs. These consitute the majority of tasks for booting the system into at least single-user mode, and contain many of the current ordering problems and race conditions. If the daemon solves the problems here, it will be a success.
  4. Other daemon’s scripts replaced by upstart jobs on a package-by-package basis; this will be an ongoing effort during which upstart will continue running the existing sysv-rc scripts as well as its own jobs. During this time the event system may be tweaked to ensure it truly solves the problems we need.
  5. Replcement of cron, atd, anacron and inetd. This will happen alongside the above and result in a single place to configure system jobs.
  6. Modification of other daemons and processes to send events to init instead of trying to run things themselves.
The current plan is that we will be at least part of the way into stage #3 by the time edgy is released, with that release shipping with upstart as the init daemon and the most critical rcS scripts being run by it to correct the major problems For edgy+1 we hope to have completed stage #5 and be at least part of the way into the implementation of stage #6. From the start of development of edgy+2, no new packages will be accepted unless they provide upstart jobs instead of init scripts and init scripts will be considered deprecated. What state is it in now? The init daemon has been written and is able to manage jobs as described above, receiving events on the control socket to start and stop them. This has now been uploaded to the Ubuntu universe component in the upstart package for testing before it becomes the init daemon. We welcome any experienced users who want to help test this; install the package and follow the instructions in /usr/share/doc/upstart/README.Debian to add a boot option that will use upstart instead of init. If your system boots and shut downs normally (other than a slightly more verbose boot without usplash running) then it is working correctly. Other types of events will be added as required during development and testing. Currently only a basic client tool (initctl) has been written, compatibility tools such as shutdown will be written over the next week or two before it replaces our sysvinit package.

Scott James Remnant: Parallel Peer Programming

Here at Canonical Towers we have several staff who worship at the altar of Extreme Programming, and as such many of the methodologies and rituals prescribed by that religion find their way into our day-to-day working practices. A few of these came together in an interesting way a few weeks ago, and it was suggested by a cow-orker that I blog about it so he could give the URL to people. The first ritual is that of the sprint, I don’t think this is orthodox XP but rather something inspired from it that we picked up from the Python community. With all of the Canonical developers scattered across the globe mostly working from their own homes, it’s become a useful tool; particularly for the Launchpad team. The basic idea for those that haven’t heard of it is simple, and perhaps obvious; you get a selection of the team together in one place, sit them around the same table with particular goals to complete. In effect it’s highly compressed facetime and high bandwidth interaction to nail those tasks that need it, before you head off again and work at a more sedate pace. The second is directly from XP doctrine and is that peculiar observance known as pair programming, something that is often coupled with sprints. For anybody who hasn’t encountered this before, it’s something I’ve always found rather odd. You get two programmers together, both itching to code, and you take one of them’s laptop away; and you don’t just force them to fight over the keyboard either, the laptop-less soul isn’t allowed to touch it. The theory here is that it frees the deprived individual of the hassle of coding and allows them to direct the programmer in ways that may not be immediately obbious, or alternately think about the next bit of work that needs doing. Another interesting side-effect is it can be an interesting way to learn code you’ve not worked with before, if you’re the one doing the coding and you’re being guided what to do by a sage who already knows it. I have a funny story here, so I’m going to digress from the main stream for a moment to tell it. A few months ago I was working in the London office, Mark had been up all night coding and had then given me responsibility to get his changes landed onto the Launchpad mainline. I’m not that hot on quite a bit of Launchpad, and fade to utterly clueless the nearer the code gets to the web application itself; and when trying to merge the two there were conflicts which I needed Mark’s help to resolve. Now as anybody who’s met Mark knows, he’s a pretty good example of a Type-A personality, yet he suggested that we do a spot of pair programming to get the code in and I’d be the one with the laptop as it’d help me get to grips with the affected parts. This hilighted something I’ve always seen as a problem with pair programming, dealing with it when the a person with the keyboard has a totally different way of working to you. In particular, I’m an emacs user, whereas Mark is a die-hard vim user; but also right down to the working directory I would work from, how I test results, etc. When you’re the one without the laptop, this can be quite infuriating, as you know exactly how to solve a problem and the idiot with the keyboard is dithering about doing things you don’t understand just to get there. If you’re a Type-A personality, you generally snatch the laptop away at this point and do it yourself; or at least you would, if you could drive the strange editor the other person uses. I swear Mark was sulking as he gave the laptop back and let me do it. Anyway, there is some relevance to that and we’ll come to it in a moment. The third and final methodology is the concept of unit tests and more specifically test driven development. For anyone who hasn’t come across this before, I highly recommend it; I was suspicious too when Robert Collins took it upon himself to teach me the true way, but now I’m sold. Simply the idea is that if you have any code that doesn’t have another piece of code in a test suite that checks that it’s working correctly, that code is broken. More particularly unit testing involves checking just one feature or requirement at a time, and stacking them together to test all of the code paths. I’ve actually found that this improves the APIs I design, as I write the code in small blocks and functions to make them easier to test. Test driven development takes it even further, you write the unit tests first, before you write the code they’re supposed to test; usually one or two at a time. Obviously these tests will fail at first, it’s then your job to write as little code as possible to make them pass. If your code isn’t right, you add a unit test that will fail, and modify the code to make it pass. This really comes into its own when you’re fixing bugs later, once you’ve identified the bug you write a test case or two that cause the problem; these will of course fail. You can then modify the code to make them pass, and at the same time be sure you’ve not broken other functionality because of the existing test suite. I’ve also found it really useful for particularly complicated or tricky pieces of code, especially those intricate algorithms that do particularly heavy lifting. So onto the event itself, this was a sprint in our London office to indoctrinate Gustavo Niemeyer with the various projects he’d be working on. The goal for this sprint was decided to start the conversion of HCT to Bazaar-NG, and to do this Gustavo and I would pair program. Now my last experience of pair programming had been that story with Mark (see, it had some relevance) and I knew I’d be just as bad if I wasn’t allowed to have the keyboard. I was also acutely aware that if Gustavo was just sitting by and watching, he wouldn’t get much benefit from it either, so he needed to be actively involved in the coding so he could learn the things he’d be working on. I came to what I thought was a pretty neat, and obvious, solution to these problems. We set up my laptop with the code we’d be working on, and on my display were two side-by-side terminals both running screen sessions. Gustavo then set up two same-sized terminals on his, ssh’d into my laptop from both of them and joined the screen sessions. In the left-hand one he ran vi, and in the right-hand one I ran emacs. Thus we both had keyboards, and both had editors, yet could see each other working and even steal the keyboard without danger of violence. We didn’t just sit side-by-side and code on different things though, that’s not pair programming and is just ordinary programming with a bit of a voyeuristic twist. What we did was: in my terminal I started writing the test cases for the code we needed, it was Gustavo’s job to write the code that would make them pass. We actually added a third terminal in which we could run the test cases themselves; so I could run them when I’d added something that would fail, and Gustavo could run them when he thought he’d made them pass again. This turned out to be a rather fun way to work, and at one point I was almost able to try and convince myself that the code was writing itself to pass the test cases I was writing. It also got me thinking that it’d be really neat to use genetic algorithms to breed code to pass test cases.

Next.

Previous.