Dieter Plaetinck
Belgium
What the open source community can learn from Devops
For the sake of getting a point across, I'll simplify some things.
First, a crashcourse into Devops...
A commonly used organisatorial idiom used in tech companies is that of developers and operations.
Developers:
- develop a product
- improve their product based on feedback from production usage
Operations:
- put the product in production, making it available for users/customers
- give feedback to devs
Experience shows this model often falls short. 'Dev' and 'Ops' being too artificially separated from each other, resulting in improper communication, clashing procedures and tools,
resulting in devs disliking ops ("we need to push this out to users, ops are holding us back"), and the other way around ("again new code that will cause trouble, when will they finally release something stable")
It doesn't take a genious to see this is pretty ineffective. There's a better way: integrating and reconciling dev and ops, so that all involved know the hard parts of each others' jobs, and in fact letting each other do the others' job. (developers being responsible for their own checkouts, ops working on the code, etc). Most of all it's about culture over processes. About being smart and nice human beings.
The exact methods are still being experimented with and preached about under the name of "Devops".
There is a really good Devops explanation online, with more details. Read it.
Often enough we're talking about teams working for the same company, usually under the same roof, so it isn't too terribly hard to implement these visions.
Now, let's look at the open source community
Open source developers ("upstream"):
- develop stuff
- improve their stuff based on feedback from end users
Distributions ("downstream"):
- package software and make it available to end users
- get bugreports, which often get forwarded to upstream
Looks familiar?
The problems are similar too...
Some upstreams:
- like to use "weird" (home grown) build systems
- violate FHS
- use home grown packaging systems. Languages and applications with plugins like to do this
- mix bugfixes, security patches and feature additions in the same code branch (often there is not enough manpower to maintain them in separation, and the need for it is dependent on how/when downstreams ship it anyway)
- run into the chicken/egg problem: they need to release software to have it shipped and tested, but it should only be released after being properly tested. ("Release early, release often" alleviates this, but it's not always that easy)
..making it hard for downstreams.
Even for each other: unannounced/frequent API changes come to mind.
Dowstreams, often:
- Lack discipline and/or tools to properly report back to upstream
- Have to make hard choices. Not shipping software at all or patching beyond recognition
- Don't contribute patches back to upstream. Posting them on some obscure albeit "public" mailing list or code archive isn't the most effective either
Nothing pleases an upstream more then complaints from end users running into problems that only happen witch patches applied by the distributor (patches that are deemed necessary to make the app work properly in the distro. The irony..) Runner up is getting plenty of complaints from users, but no patches.
Some distributions focus on shipping "only stable software", causing them to be obsolete by definition. (Time to production often extends in the order of years), and are forced to apply so many patches that they are essentially forking their upstreams.
Other distributions limit their role to giving you the real open source software experience in it's current state, and that state is not always pretty.
but they are much harder to solve
- Upstream and downstream are separated much more, resulting in very little communication between both parties. So the incompatibilities manifest themselves even harder.
- Among distributions, there are very different visions on and implementations of tools and processes. Pretty much each distro has a vision which separates it from the others.
Among upstreams, there are as well some different ideas on how things should be done. Luckily enough upstream developers agree on some things. But there are some "clusters" doing things their - often radically different - way (freedesktop.org and suckless.org come to mind)
The amount of incompatibilities is pretty much the carthesian product of the amount of distributions with the amount of "different visions" among upstreams - Despite their differences, some upstreams and downstreams actually do have some common ground, but as they don't involve each other in tools nor processes, they hardly benefit from each other
So, in contrast to popular belief, open source is not a magical wonderland where everyone works nicely together.
Tech companies are usually on their way if they understand and can introduce agile and devops, but I think in the open source ecosystem it's much harder to bring unity.
Luckily, some smart people are already working on bridging the gap between up- and downstream, and between each other.
some examples:
- transifex.net provides a common translation infrastructure and service
- launchpad.net provides code hosting and cross-project issue tracking
I also think about Fosdem's cross-distro miniconf and the freedesktop.org project, which encourage closer cooperation between different downstreams and desktop projects, respectively.
I don't know if we should try to go much beyond "some" common infrastructure and some best practices. People will always have different opinions on how things should be done. And that's a good thing, it's the very definiton of the open source community: scratch your own itch.
But at the very least, I find it an interesting topic.





