%include "default.mgp" %default 1 bgrad %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page %nodefault %back "blue" %center %size 7 How to interact with the Free Software Community %center %size 4 by Harald Welte %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page How to interact with the Free Software Community Contents Introduction What is Free Software? What is the FOSS Community? People / Groups involved Development Process Motivations FOSS likes FOSS disliks Weak Points Practical Rules Thanks %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page How to interact with the Free Software Community Introduction Who is speaking to you? an independent Free Software developer, consultant and trainer who is a member of the free software community for 10 years who has a background in both the community and the corporate crowd who will therefore not have fancy animated slides ;) Why is he speaking to you? because every working day he suffers the lack of understanding between the community and the business world %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page How to interact with the Free Software Community What is Free Software? Software that is available in source code is licensed in a way to allow unlimited distribution allows modifications, and distribution of modifications is not freeware, but copyrighted work subject to license conditions, like any proprietary software READ THE LICENSE What is Open Source? Practically speaking, not much difference Remainder of this presentation will use the term FOSS (Free and Open Source Software) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page How to interact with the Free Software Community What is the FOSS Community? Diverse any individual can contribute no formal membership required every project has it's own culture, rules, ... International the internet boosted FOSS development very common to have developers from all continents closely working together Evolutionary developers come and go, as their time permits projects evolve over time, based on individual contributions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page How to interact with the Free Software Community People / Groups involved Really depends on size of projects Small projects often a one-man show Bigger project have groups / subgroups Common Terms / Definitions Maintainer The person who formally maintains a project Core Team / Steering Committee A group of skilled developers who make important decisions Subsystem Maintainer Somebody who is responsible for a particular sub-project Developer Community All developers involved with a project User Community Users of the software who often share their experience with others %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page How to interact with the Free Software Community Development Process "Rough concensus and running code" Decisions made by technically most skilled people Reputaion based hierarchy Direct Communication between developers Not driven by size of a target market Release early, release often %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page How to interact with the Free Software Community Motivations gaining reputation (like in the scientific community) gaining development experience with real-world software solving problems that the author encounters on his computer fighting for free software as ideology work in creative environment with skilled people and no managers ;) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page How to interact with the Free Software Community FOSS Community likes generic solutions portable code vendor-independent architecture clean code (coding style!) open standards good technical documentation raw hardware, no bundle of hardware and software sold as solution %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page How to interact with the Free Software Community FOSS Community dislikes monopolistic structures e.g. intel-centrism closed 'industry forums' with rediculous fees e.g. Infiniband, SD Card Association standard documents that cost rediculous fees NDA's, if they prevent development of FOSS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page How to interact with the Free Software Community Weak Ponts of FOSS often way behind schedule (if there is any) already too late when projects start started when there already is a real need often a lack of (good) documentation programmers write code, not enduser docs... strong in infrastructure, weak in applications traditionally developers interested in very technical stuff %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page How to interact with the Free Software Community Practical Rules 1. Much more communication It's not a consumer/producer model, but cooperative! Before you start implementation, talk to project maintainers It's likely that someone has tried a similar thing before It's likely that project maintainers have already an idea how to proceed with implementation Avoid later hazzles when you want your code merged upstream %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page How to interact with the Free Software Community Practical Rules 2. Interfaces If there is a standard interface, use it Don't invent new interfaces, try to extend existing ones If there is an existing interface in a later (e.g. development) release upstream, backport that interface Don't be afraid to touch API's if they're inefficient Remember, you have the source and _can_ change them %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page How to interact with the Free Software Community Practical Rules 3. Merge your code upstream Initially you basically create a fork Development of upstream project continues sometimes at high speed If you keep it out of tree for too long time, conflicts arise Submissions might get rejected in the first round Cleanups needed, in coordination with upstream project Code will eventually get merged No further maintainance needed for synchronization between your contribution and the ongoing upstream development Don't be surprised if your code won't be accepted if you didn't discuss it with maintainers upfront and they don't like your implementation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page How to interact with the Free Software Community Practical Rules 4. Write portable code don't assume you're on 32bit cpu don't assume you're on little endian if you use assembly optimized code, put it in a plugin %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page How to interact with the Free Software Community Practical Rules 5. Write clean code as opposed to closed-source software, people actually read it it will be noticed if coding style is bad lots of projects have official CodingStyle rules if you comment, do it only in english! don't clutter hardware/product specific hacks over common code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page How to interact with the Free Software Community Practical Rules 6. Binary-only software will not be accepted yes, there are corner cases like FTC regulation on softradios but as a general rule of thumb, the community will not consider object code as a solution to any problem %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page How to interact with the Free Software Community Practical Rules 7. Avoid fancy business models If you ship the same hardware with two different drivers (half featured and full-featured), any free software will likely make full features available on that hardware. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page How to interact with the Free Software Community Practical Rules 8. Show your support for the Community By visibly contributing to the project discussions code equipment By funding developer meetings By making cheap hardware offers to developers By contracting / sponsoring / hiring developers from the community %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page GNU GPL - Copyright helps Copyleft Thanks Thanks to Alan Cox, Alexey Kuznetsov, David Miller, Andi Kleen for implementing (one of?) the world's best TCP/IP stacks Paul 'Rusty' Russell for starting the netfilter/iptables project for trusting me to maintain it today Astaro AG for sponsoring parts of my netfilter work Free Software Foundation for the GNU Project for the GNU General Public License %size 3 The slides of this presentation are available at http://www.gnumonks.org/