Slide 1

Slide 1 text

Doing Open Source (The Right Way)

Slide 2

Slide 2 text

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

Slide 23

Slide 23 text

http:/ /upload.wikimedia.org/wikipedia/commons/0/0d/ Operating_systems_used_on_top_500_supercomputers.svg

Slide 24

Slide 24 text

http:/ /upload.wikimedia.org/wikipedia/commons/8/86/Usage_share_of_web_browsers_ %28Source_StatCounter%29.svg

Slide 25

Slide 25 text

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

Slide 47

Slide 47 text

I did not know how to do these things.

Slide 48

Slide 48 text

Bug Fix Types Behavior Performance Documentation Quality http:/ /upload.wikimedia.org/wikipedia/commons/9/9b/Insect_antennae_comparison.jpg

Slide 49

Slide 49 text

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

Slide 65

Slide 65 text

Licensing http:/ /upload.wikimedia.org/wikipedia/commons/2/29/Software_Categories.png

Slide 66

Slide 66 text

I am not a lawyer.

Slide 67

Slide 67 text

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

Slide 82

Slide 82 text

Final Words

Slide 83

Slide 83 text

The world runs on OSS.

Slide 84

Slide 84 text

OSS would not exist without your help.

Slide 85

Slide 85 text

You are the most important contributor.

Slide 86

Slide 86 text

Thank you! Charles Oliver Nutter @headius