open source software needs you!
TRANSCRIPT
Doing Open Source(The Right Way)
Charles Oliver Nutter
@headius JRuby Guy at Red Hat
And you?
Developer?
Using open source?
Contributor?
Leader?
http://upload.wikimedia.org/wikipedia/en/a/ad/UnknownComic.jpg
Open Source
Open Source Software
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
…study, change and distribute the software to
anyone and for any purpose.
Free Software
Free as in freedom
Free as in liberty
Free and Open Source Software
…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
freely licensed
use, copy, study, and change the software
source code is openly shared
people are encouraged to voluntarily improve the design of the software
https://www.openhub.net/
https://www.openhub.net/p/firefox
https://www.openhub.net/p/firefox
Big Wins
Linux and the BSDs
Firefox and Chrome
PHP, Python, Ruby, Perl, Erlang, Go, Dart, …
OpenJDK and Mono
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
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
http://upload.wikimedia.org/wikipedia/commons/0/0d/Operating_systems_used_on_top_500_supercomputers.svg
http://upload.wikimedia.org/wikipedia/commons/8/86/Usage_share_of_web_browsers_%28Source_StatCounter%29.svg
Benefits to UserCost savings…sometimes
Visibility
Empowered to make changes
Commercial support is available
Red Hat, e.g.
All because of you
Not possible without you.
Why Get Involved?
Huge learning opportunity
Great resume builder
Community and social aspects
It’s great fun!
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
LiteStep
A project I was using myself
Development had slowed
Large, monolithic codebase
Languages and APIs I was familiar with
JRuby
Implementation of Ruby
Written in Java
Development had slowed
Many tasks
Beginner to advanced
Getting Involved
Meet the Community
Mailing lists and forums
Chat services like IRC or Gitter
Q/A sites like Stack Overflow
Social sites like LinkedIn or Facebook
A Good Contributor
1. Respects and forgives others
2. Recognizes expertise
3. Increases the pool of resources
JRuby Commits
49% 51%Paid Unpaid
Things to Contribute
Help field questions on lists, forums, IRC
Improve documentation
Present at a conf or user group
File bugs or submit fixes
A Good Bug Reporter
Clearly states expectation vs reality
Provides code or steps to reproduce
Volunteers relevant env details
Responds to updates and comments
Going Deeper
Bug triage
Help guide other bug reporters
Observe fixes for other bugs
Attempt your own fix!
Fear Itself
Afraid I’m not good enough
Afraid I don’t know the best solution
Afraid to make things worse
Afraid I’ll be mocked or insulted
My JRuby Contributions
Several rewrites of interpreter
JIT compiler to JVM bytecode
Native I/O and process subsystem
Ruby/Java integration layer
I did not know how to do these things.
Bug Fix Types
Behavior
Performance
Documentation
Quality
http://upload.wikimedia.org/wikipedia/commons/9/9b/Insect_antennae_comparison.jpg
Crafting a FixGet 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
A Good PatchFixes the original problem
Limits changes to the actual fix
Matches coding style
Maintains documentation truths
Includes a regression test
More Tips
Ask for help
Accept that patch review takes time
Not all patches are accepted
Be willing to iterate
Into the CoreBecoming a Committer
http://upload.wikimedia.org/wikipedia/commons/0/07/Earth_poster.svg
Becoming a Committer
Proven track record of contributions
Respectful member of community
Sustained interest
Domain expertise
Profile: mkristian
Maven integration expert
Consistently submitting patches
Maintaining related libraries
Active user
Open Commit Bit
Alternative path to core
One accepted patch and you’re in
Rapidly adds new core members
Rewards early participation
Core members are dev, manager, evangelist,
and QA rolled into one.
A Good Core ContributorRespectfully handles bugs and patches
Discusses changes where necessary
Does not violate others’ code
Keeps the project’s tests green
Remains humble
Assume you are wrong.
Not all bugs are in code.
User experience matters.
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
Licensing
http://upload.wikimedia.org/wikipedia/commons/2/29/Software_Categories.png
I am not a lawyer.
Criteria
Sharing of source
Assignment of rights
Attribution
Lifecycle of alterations
http://choosealicense.com/
Contributor Agreement?Requires users to “sign” an agreement
Permission to release changes
Copyright assignment
Permission to change licensing
Public assertion is often enough
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.
Get It Out ThereUse 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
https://github.com
https://github.com/jruby/jruby
https://bitbucket.org/headius/jdk-panama
https://www.codeplex.com/
Release the Hounds!
http://rubygems.org/
https://vidcoder.codeplex.com/
A Good Community Member
Has a thick skin
Expects to learn from everyone
Remembers that these are real people
Making Time
Make it a fun hobby
Prefer jobs that support OSS
Explain the benefits to your partner
Keep projects and interest aligned
Encouraging Contribution
Ask for help
Be honest
Be responsive
Empathize
Final Words
The world runs on OSS.
OSS would not exist without your help.
You are the most important
contributor.
Thank you!Charles Oliver Nutter
@headius