Charles
Oliver
Nutter
@headius
JRuby Guy at Red Hat
Slide 3
Slide 3 text
And you?
Developer?
Using open source?
Contributor?
Leader?
http:/
/upload.wikimedia.org/wikipedia/en/a/ad/UnknownComic.jpg
Slide 4
Slide 4 text
Open Source
Slide 5
Slide 5 text
Open Source
Software
Slide 6
Slide 6 text
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
Slide 7
Slide 7 text
…study, change and
distribute the software to
anyone and for any purpose.
Slide 8
Slide 8 text
Free Software
Slide 9
Slide 9 text
Free as in freedom
Slide 10
Slide 10 text
Free as in liberty
Slide 11
Slide 11 text
Free and Open Source
Software
Slide 12
Slide 12 text
…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
Slide 13
Slide 13 text
freely licensed
Slide 14
Slide 14 text
use, copy, study, and
change the software
Slide 15
Slide 15 text
source code is openly
shared
Slide 16
Slide 16 text
people are encouraged to
voluntarily improve the
design of the software
Slide 17
Slide 17 text
https:/
/www.openhub.net/
Slide 18
Slide 18 text
https:/
/www.openhub.net/p/firefox
Slide 19
Slide 19 text
https:/
/www.openhub.net/p/firefox
Slide 20
Slide 20 text
Big Wins
Linux and the BSDs
Firefox and Chrome
PHP, Python, Ruby, Perl, Erlang, Go, Dart, …
OpenJDK and Mono
Slide 21
Slide 21 text
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
Slide 22
Slide 22 text
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
Benefits to User
Cost savings…sometimes
Visibility
Empowered to make changes
Commercial support is available
Red Hat, e.g.
Slide 26
Slide 26 text
All because of you
Slide 27
Slide 27 text
Not possible
without you.
Slide 28
Slide 28 text
Why Get Involved?
Huge learning opportunity
Great resume builder
Community and social aspects
It’s great fun!
Slide 29
Slide 29 text
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
Slide 30
Slide 30 text
LiteStep
http:/
/www.litestep.net/snapshot2.png
Slide 31
Slide 31 text
LiteStep
A project I was using myself
Development had slowed
Large, monolithic codebase
Languages and APIs I was familiar with
Slide 32
Slide 32 text
JRuby
Implementation of Ruby
Written in Java
Development had slowed
Many tasks
Beginner to advanced
Slide 33
Slide 33 text
Getting Involved
Slide 34
Slide 34 text
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
Slide 35
Slide 35 text
No content
Slide 36
Slide 36 text
No content
Slide 37
Slide 37 text
A Good Contributor
1. Respects and forgives others
2. Recognizes expertise
3. Increases the pool of resources
Slide 38
Slide 38 text
JRuby Commits
49% 51%
Paid Unpaid
Slide 39
Slide 39 text
Things to Contribute
Help field questions on lists, forums, IRC
Improve documentation
Present at a conf or user group
File bugs or submit fixes
Slide 40
Slide 40 text
A Good Bug Reporter
Clearly states expectation vs reality
Provides code or steps to reproduce
Volunteers relevant env details
Responds to updates and comments
Slide 41
Slide 41 text
No content
Slide 42
Slide 42 text
No content
Slide 43
Slide 43 text
No content
Slide 44
Slide 44 text
Going Deeper
Bug triage
Help guide other bug reporters
Observe fixes for other bugs
Attempt your own fix!
Slide 45
Slide 45 text
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
Slide 46
Slide 46 text
My JRuby Contributions
Several rewrites of interpreter
JIT compiler to JVM bytecode
Native I/O and process subsystem
Ruby/Java integration layer
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
Slide 50
Slide 50 text
A Good Patch
Fixes the original problem
Limits changes to the actual fix
Matches coding style
Maintains documentation truths
Includes a regression test
Slide 51
Slide 51 text
No content
Slide 52
Slide 52 text
No content
Slide 53
Slide 53 text
More Tips
Ask for help
Accept that patch review takes time
Not all patches are accepted
Be willing to iterate
Slide 54
Slide 54 text
Into the Core
Becoming a Committer
http:/
/upload.wikimedia.org/wikipedia/commons/0/07
/Earth_poster.svg
Slide 55
Slide 55 text
Becoming a Committer
Proven track record of contributions
Respectful member of community
Sustained interest
Domain expertise
Slide 56
Slide 56 text
Profile: mkristian
Maven integration expert
Consistently submitting patches
Maintaining related libraries
Active user
Slide 57
Slide 57 text
Open Commit Bit
Alternative path to core
One accepted patch and you’re in
Rapidly adds new core members
Rewards early participation
Slide 58
Slide 58 text
Core members are dev,
manager, evangelist,
and QA rolled into one.
Slide 59
Slide 59 text
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
Slide 60
Slide 60 text
Assume you are
wrong.
Slide 61
Slide 61 text
No content
Slide 62
Slide 62 text
Not all bugs are in
code.
Slide 63
Slide 63 text
User experience
matters.
Slide 64
Slide 64 text
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
Criteria
Sharing of source
Assignment of rights
Attribution
Lifecycle of alterations
Slide 68
Slide 68 text
http:/
/choosealicense.com/
Slide 69
Slide 69 text
Contributor Agreement?
Requires users to “sign” an agreement
Permission to release changes
Copyright assignment
Permission to change licensing
Public assertion is often enough
Slide 70
Slide 70 text
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.
Slide 71
Slide 71 text
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
Slide 72
Slide 72 text
https:/
/github.com
Slide 73
Slide 73 text
https:/
/github.com/jruby/jruby
Slide 74
Slide 74 text
https:/
/bitbucket.org/headius/jdk-panama
Slide 75
Slide 75 text
https:/
/www.codeplex.com/
Slide 76
Slide 76 text
Release the Hounds!
Slide 77
Slide 77 text
http:/
/rubygems.org/
Slide 78
Slide 78 text
https:/
/vidcoder.codeplex.com/
Slide 79
Slide 79 text
A Good Community
Member
Has a thick skin
Expects to learn from everyone
Remembers that these are real people
Slide 80
Slide 80 text
Making Time
Make it a fun hobby
Prefer jobs that support OSS
Explain the benefits to your partner
Keep projects and interest aligned
Slide 81
Slide 81 text
Encouraging
Contribution
Ask for help
Be honest
Be responsive
Empathize