Doing Open Source the Right Way

Preview:

DESCRIPTION

Have you ever used an open source project? Well of course you have, but how about contributed to one? 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.

Citation preview

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.

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

http://www.litestep.net/snapshot2.png

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 CoreRunning a Project

http://upload.wikimedia.org/wikipedia/commons/0/07/Earth_poster.svg

Becoming a Committer

Proven track record of fixes

Respectful member of community

Sustained interest

Domain expertise

Profile: mkristian

Maven integration expert

Consistently submitting patches

Maintaining related libraries

Active user

Open Commit BitAlternative path to core

One accepted patch and you’re in

Rapidly adds new core members

Rewards early participation

Debateable benefits over time

Core members are dev, manager, evangelist,

and QA rolled into one.

A Good Core Contributor

Respectfully handles bugs and patches

Discusses changes where necessary

Does not violate others’ fixes

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

Release the Hounds!

A Good Community Member

Has a thick skin

Expects to learn from everyone

Remembers that these are real people

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