Have you ever used an open source project? Of course you have, but have you made any contributions yourself? Filed a bug report? Submitted a patch? Have you ever started your own OSS project, or taken a closed/private project public? What licenses should you use? How do you manage contributions? How do you encourage contributors and get work done? In this talk we'll go over the basics of OSS: how to get involved, how to start a project, how to manage contributions. We'll discuss project lifecycles, legal CYA tips, and how to keep projects moving. You'll see the inner workings of real OSS projects, and learn how to be a better OSS user and producer.
Presented at Jfokus 2015
6. Open-source software (OSS) is computer software
with its source code made available with a license
in which the copyright holder provides the rights
to study, change and distribute the software to
anyone and for any purpose.
http://en.wikipedia.org/wiki/Open-source_software
12. …computer software that can be classified as both
free software and open source software…anyone
is freely licensed to use, copy, study, and change
the software in any way, and the source code is
openly shared so that people are encouraged to
voluntarily improve the design of the software.
http://en.wikipedia.org/wiki/Free_and_open-
source_software
20. Big Wins
Linux and the BSDs
Firefox and Chrome
PHP, Python, Ruby, Perl, Erlang, Go, Dart, …
OpenJDK and Mono
21. Web Server Share
Source Date
Unix, Unix-
like
Windows
W3Techs
February
2014
67% 33%
Security
Space
November
2012
62-82% 18-38%
http://en.wikipedia.org/wiki/Usage_share_of_operating_systems#Servers_on_the_Internet
22. Unix or Unix-like?
Linux - 54.9%
BSD - 1.4%
Darwin, HP-UX, Solaris - < 0.1%
Unknown - 43.6
http://en.wikipedia.org/wiki/Usage_share_of_operating_systems#Servers_on_the_Internet
28. Why Get Involved?
Huge learning opportunity
Great resume builder
Community and social aspects
It’s great fun!
29. Finding a Project
A tool or library you already use
A technology you are interested in
A language you want to learn
A project you simply want to help
39. Things to Contribute
Help field questions on lists, forums, IRC
Improve documentation
Present at a conf or user group
File bugs or submit fixes
40. A Good Bug Reporter
Clearly states expectation vs reality
Provides code or steps to reproduce
Volunteers relevant env details
Responds to updates and comments
49. Crafting a Fix
Get a local copy of the code
Make your changes
Confirm they fix the original issue
Confirm they do not fail tests
Submit fix as a patch or pull request
50. A Good Patch
Fixes the original problem
Limits changes to the actual fix
Matches coding style
Maintains documentation truths
Includes a regression test
51.
52.
53. More Tips
Ask for help
Accept that patch review takes time
Not all patches are accepted
Be willing to iterate
54. Into the Core
Becoming a Committer
http://upload.wikimedia.org/wikipedia/commons/0/07/Earth_poster.svg
55. Becoming a Committer
Proven track record of contributions
Respectful member of community
Sustained interest
Domain expertise
57. Open Commit Bit
Alternative path to core
One accepted patch and you’re in
Rapidly adds new core members
Rewards early participation
58. Core members are dev,
manager, evangelist,
and QA rolled into one.
59. A Good Core Contributor
Respectfully handles bugs and patches
Discusses changes where necessary
Does not violate others’ code
Keeps the project’s tests green
Remains humble
64. Starting a Project
Missing tool or library
Code others find useful
Community needed
An itch to scratch
http://upload.wikimedia.org/wikipedia/commons/1/13/Michelangelo%2C_Creation_of_Adam_06.jpg
69. Contributor Agreement?
Requires users to “sign” an agreement
Permission to release changes
Copyright assignment
Permission to change licensing
Public assertion is often enough
70. Relicensing?
Changing software license requires
permission of all contributors
Get it right the first time or you’ll be
chasing people around
Some licenses have upgrade clause
CPL to EPL, e.g.
71. Get It Out There
Use services familiar to community
Include license from day 0
Include README, build scripts, examples
Tell others in the community
…but don’t expect a flood of users