let the contribution begin (est futures)

135
Let The Contribution Begin SeongJae Park <[email protected]>

Upload: seongjae-park

Post on 16-Apr-2017

75 views

Category:

Software


2 download

TRANSCRIPT

Let The Contribution BeginSeongJae Park <[email protected]>

Great To Meet You

SeongJae Park <[email protected]>

Researcher @ DCSLAB, SNU

Programmer @ KOSSLAB

Yet Another Newbie

This Talk Is...

This Talk Is...

For Newbie, By Newbie, Of Newbie

image src: http://1.bp.blogspot.com/_i0kiD-6jeeI/TRq1fzwZh8I/AAAAAAAAAGw/2ggLbFod4II/s1600/newbie.png

This Talk Is...

For Newbie, By Newbie, Of Newbie

About F/OSS & Contribution(What, Why, How)

image src: http://www.mrmc-tool.org/images/contribute.jpg

The History Of F/OSS1961, MIT purchased PDP-1

1969, Unix, C, and ARPAnet were invented

1975, Microsoft created1977, Apple Computer created

image src: http://upload.wikimedia.org/wikipedia/commons/a/a2/Steve_Jobs_and_Bill_Gates_(522695099).jpg

The History Of F/OSS1961, MIT purchased PDP-1

1969, Unix, C, and ARPAnet were invented

1975, Microsoft created

1977, Apple Computer created

1982, RMS started GNU project1991, Linus Torvalds introduced Linux

image src: http://foro.ubuntu-guia.com/file/n3879119/rms-linus.jpg

The History Of F/OSS1961, MIT purchased PDP-1

1969, Unix, C, and ARPAnet were invented

1975, Microsoft created

1977, Apple Computer created

1982, RMS started GNU project

1991, Linus Torvalds introduced Linux

1998, Open Source Initiative was organized

http://www.open-electronics.org/wp-content/uploads/2015/12/OpenSource2.png

The History Of F/OSS

1961, MIT purchased PDP-11969, Unix, C, and ARPAnet were invented1975, Microsoft created1977, Apple Computer created1982, RMS started GNU project1991, Linus Torvalds introduced Linux1998, Open Source Initiative was organized

image src: http://upload.wikimedia.org/wikipedia/commons/a/a2/Steve_Jobs_and_Bill_Gates_(522695099).jpg

Open Source Definition

● Determine whether a software license can be labeled with the open-source certification mark.

● “Open Source doesn’t just mean access to the source code.”

● 10 Criterias include: Free Redistribution, Source Code, Derived Works, Integrity of The Author’s Source Code, No Discrimination, …

● https://opensource.org/osd-annotated

Contribution

Translation

Contribution

Translation

Bug Fix

Contribution

Translation

Bug Fix

Feature Implementation

Contribution

Translation

Bug Fix

Feature Implementation

Use

Contribution

Translation

Bug Fix

Feature Implementation

Use

In This Talk, Only Code Contribution

Why Contribution

Why Contribution

Honor

image src: http://www.mailandfemail.com/wp-content/uploads/2011/06/Medal-of-honor.jpg

Why Contribution

HonorCareer

Why Contribution

HonorCareerTraining

image src: http://1.bp.blogspot.com/-yzBPR57Pg2M/T_VmgM976VI/AAAAAAAABz0/Rgj-co8__aU/s1600/Maggie-million-dollar-baby-18619084-720-480.jpg

Why Contribution

HonorCareerTrainingUpstream Development

image src: http://dustinkirkland.files.wordpress.com/2009/07/upstream.jpg

Why Contribution

HonorCareerTrainingUpstream DevelopmentTo Change The World

image src: http://media.focusonthefamily.com/blogmedia/images/jim-daly/changetheworld.jpg

Why Contribution

HonorCareerTrainingUpstream DevelopmentTo Change The WorldBecause We Can

image src: http://www.blogtap.net/wp-content/uploads/2010/02/obama-yes-we-can.jpg

Why Contribution

HonorCareerTrainingUpstream DevelopmentTo Change The WorldBecause We Can...Need More?

General Contribution Process

General Contribution ProcessGet Source Code

General Contribution ProcessGet Source Code

Make a Goal

General Contribution ProcessGet Source Code

Modify Source Code(Make Patch)

Make a Goal

General Contribution ProcessGet Source Code

Modify Source Code(Make Patch)

Send Patch

Make a Goal

General Contribution ProcessGet Source Code

Modify Source Code(Make Patch)

Send Patch

Get Review

Make a Goal

General Contribution ProcessGet Source Code

Modify Source Code(Make Patch)

Send Patch

Get Review

Approved?No

Make a Goal

General Contribution ProcessGet Source Code

Modify Source Code(Make Patch)

Send Patch

Get Review

Approved?

Yes

No

Make a Goal

Keep In Mind

Keep In Mind

Coding style

image src: http://www.emacswiki.org/pics/static/TabsSpacesBoth.png

Keep In MindCoding style

You are just a newbie here

Keep In MindCoding Style

You Are Just A Newbie Here

Start from jab

Commit log style

Keep In Mind - Commit Log Style

Summarized title on first line

aio: v3: fix kioctx not being freed after cancellation at exit time v3 corrects a typo in v2 of this patch. The wrong version of the patch was copied over and misspelled ctx in the first hunk. A known good tree with this patch is at git://git.kvack.org/~bcrl/linux-next-20130213.git-v3 . Signed-off-by: Benjamin LaHaise <[email protected]>

Keep In Mind - Commit Log Style

Summarized title on first line

Just \n on second line

aio: v3: fix kioctx not being freed after cancellation at exit time v3 corrects a typo in v2 of this patch. The wrong version of the patch was copied over and misspelled ctx in the first hunk. A known good tree with this patch is at git://git.kvack.org/~bcrl/linux-next-20130213.git-v3 . Signed-off-by: Benjamin LaHaise <[email protected]>

Keep In Mind - Commit Log Style

Summarized title on first line

Just \n on second line

Detailed log from third line aio: v3: fix kioctx not being freed after cancellation at exit time v3 corrects a typo in v2 of this patch. The wrong version of the patch was copied over and misspelled ctx in the first hunk. A known good tree with this patch is at git://git.kvack.org/~bcrl/linux-next-20130213.git-v3 . Signed-off-by: Benjamin LaHaise <[email protected]>

Keep In Mind

Coding style

You are just a newbie here

Start from jab

Commit log style

Practice: Linux

One Of Famous, Successful F/OSS Project

Practice: Linux

One Of Famous, Successful F/OSS Project

Documentation/HOWTO

Documentation/development-process

Linux - Get Source Code

So many Source Trees at git.kernel.org

image src: https://twimg0-a.akamaihd.net/profile_images/1794549696/SourceTree_newlogo.png

Linux - Get Source Code

So many Source Trees at git.kernel.org

Use The linux-next Source TreeSource Tree For Next Release

Linux - Get Source Code

So many Source Trees at git.kernel.org

Use The linux-next Source TreeSource Tree For Next ReleaseStephen Rothwell Manages

Linux - Get Source Code

So many Source Trees at git.kernel.org

Use The linux-next Source TreeSource Tree For Next ReleaseStephen Rothwell Manages

$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git

Linux - Make a Goal

Find your task

Linux - Make a Goal

Find your task

Coding style can be a good start point

Linux - Make a Goal

Find your task

Coding style can be a good start point

$ ./scripts/checkpatch.pl --help

Linux - Version Control

Usual Life Of File

FileA ver 0 FileB ver 0

Linux - Version Control

Usual Life Of File

FileA ver 0 FileB ver 1

Linux - Version Control

Usual Life Of File

FileB ver 1 FileA ver 1

Linux - Version Control

Usual Life Of File

FileB ver 2FileA ver 1

Linux - Version Control

Usual Life Of File

FileB ver 2FileA ver 1

Linux - Version Control

Usual Life Of File

$ ls

foo.c

foo_20140111.c

foo_final.c

foo_realfinal.c

foo_planb.c

foo_finalfinal.c

Linux - Version Control

Usual Life Of File

$ ls

foo.c

foo_20140111.c

foo_final.c

foo_realfinal.c

foo_planb.c

foo_finalfinal.c

Linux - Version Control

Life Of File Under git

FileA ver 0 FileB ver 0

Linux - Version Control

Life Of File Under git

FileA ver 0 FileB ver 0

commit 1

Linux - Version Control

Life Of File Under git

FileA ver 0 FileB ver 0

commit 1

./

../FileAFileB

Linux - Version Control

Life Of File Under git

FileA ver 0 FileB ver 0

commit 1

Linux - Version Control

Life Of File Under git

FileA ver 0 FileB ver 0

commit 1

master branch

Linux - Version Control

Life Of File Under git

FileA ver 0 FileB ver 0 FileB ver 1

commit 1

master branch

Linux - Version Control

Life Of File Under git

FileA ver 0 FileB ver 0 FileB ver 1

commit 1 commit 2

master branch

Linux - Version Control

Life Of File Under git

FileA ver 0 FileB ver 0 FileB ver 1

commit 1 commit 2

master branch

Linux - Version Control

Life Of File Under git

FileA ver 0 FileA ver 1FileB ver 0 FileB ver 1 FileB ver 2

commit 1 commit 2 commit 3

master branch

Linux - Version Control

Topic Branch

FileA ver 0 FileA ver 1FileB ver 0 FileB ver 1

commit 1 commit 2 commit 3

master branch topic branch

FileB ver 2

Linux - Version Control

Topic Branch

FileA ver 0 FileA ver 1FileB ver 0 FileB ver 1 FileB ver 2

commit 1 commit 2 commit 3

master branch

FileA ver 2

commit 4

topic branch

Linux - Version Control

Upstream

Topic Branch: First time, looks unnecessary

Linux - Version Control

Upstream

Topic Branch: First time, looks unnecessary

Linux - Version Control

Upstream

Topic Branch: First time, looks unnecessary

Linux - Version Control

Upstream

Local Repository

clone!

Topic Branch: First time, looks unnecessary

Linux - Version Control

Upstream

Local Repository

Topic Branch: First time, looks unnecessary

Linux - Version Control

Upstream

Local Repository

Pull me!

Topic Branch: First time, looks unnecessary

Linux - Version Control

Upstream

Local Repository

Pull me!

Thanks :)

Topic Branch: First time, looks unnecessary

Linux - Version Control

Topic Branch: What if time goes by...

Upstream

Local Repository

Linux - Version Control

Upstream

Local Repository

Topic Branch: What if time goes by...

Linux - Version Control

Upstream

Local Repository

Pull me!

Topic Branch: What if time goes by...

Linux - Version Control

Upstream

Local Repository

Pull me!

Conflict Occurred. Why should I merge

your change manually? :p

Topic Branch: What if time goes by...

Linux - Version Control

Upstream

Local Repository

Pull me!

Also, merging you manually will make history looks ugly

Topic Branch: What if time goes by...

Linux - Version Control

Upstream

Local Repository

Pull me!

Also, merging you manually will make history looks ugly

If Upstream merge the change manually

Topic Branch: What if time goes by...

Linux - Version Control

Upstream

Local Repository

Pull me!

Also, merging you manually will make history looks ugly

If nobody use topic branch

Topic Branch: What if time goes by...

Linux - Version Control

Topic Branch: Again.

Upstream

Local Repository

Linux - Version Control

Topic Branch: Get latest code while your change resides in topic branch safely

Upstream

Local Repository

Linux - Version Control

Topic Branch: Ensure the branch can be merged cleanly

Upstream

Local Repository

Topic Branch: Ensure the branch can be merged cleanly

Linux - Version Control

Upstream

Local Repository

Pull me!

Topic Branch: Ensure the branch can be merged cleanly

Linux - Version Control

Upstream

Local Repository

Pull me!

Applied, thanks! :)

Linux - Version Control

● Golden rule○ Patch should be made from latest source code

$ git remote update

$ git merge upstream/master

○ Your change(s) should live inside topic branch

$ git checkout -b <fix_the_foo>

Linux - Make a Patch

Topic Branch

Edit Code As You Prefer

image src: http://secretgeek.net/image/real-programmers-code-in-binary.jpg

Linux - Make a Patch

Topic Branch

Edit Code As You Prefer

Commit using -s option

Linux - Make a PatchTopic Branch

Edit Code As You Prefer

Commit using -s optioncommit 106edea2fe051df65a1a6231e9ffa2876cc391cc

Author: Stephen Rothwell <[email protected]>

Date: Fri Mar 1 15:52:01 2013 +1100

Add linux-next specific files for 20130301

Signed-off-by: Stephen Rothwell <[email protected]>

Linux - Make a Patch

Signed-Off-By Means:(a) I created this change; or(b) Based this on a previous work with acompatible license; or(c) Provided to me by (a), (b), or (c) and notmodified(d) This contribution is public.

Linux - Make a Patch

Topic Branch

Edit Code As You Prefer

Commit using -s option

$ git format-patch master..HEAD

Linux - Send Patch

$ ./scripts/get_maintainer.pl \

<path to patch file>

Linux - Send Patch$ ./scripts/get_maintainer.pl \

<path to patch file>

$ sudo apt-get install git-email

Linux - Send Patch$ ./scripts/get_maintainer.pl \

<path to patch file>

$ sudo apt-get install git-email

$ git config sendemail.smtpserver \

smtp.gmail.com

$ git config sendemail.smtpserverport 587

$ git config sendemail.smtpencryption tls

$ git config sendemail.smtpuser \

<your-email-address>

Linux - Send Patch$ ./scripts/get_maintainer.pl \

<path to patch file>

$ sudo apt-get install git-email$ git config sendemail.smtpserver \

smtp.gmail.com

$ git config sendemail.smtpserverport 587

$ git config sendemail.smtpencryption tls

$ git config sendemail.smtpuser \

<your-email-address>

$ git send-email --to \

<reviewer mail address> \

<path to patch file>

Linux - Get Review

Just E-Mail

Linux - Get Review

Just E-Mail

Be gentle citizen

Linux - Get Review

Just E-Mail

Be gentle citizen

Mail should be plain text

Linux - Get Merged Notification Mail

This is a note to let you know that I've just added the patch titled

staging: csr: Remove struct CsrEvent

to my staging git tree which can be found at

git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git

in the staging-next branch.

The patch will show up in the next release of the linux-next tree

(usually sometime within the next 24 hours during the week.)

The patch will also be merged in the next major kernel release

during the merge window.

If you have any questions about this process, please let me know.

Practice: AOSP

Android Open Source Project

Practice: AOSP

Android Open Source Project

World's most closed Open Source Software

Practice: AOSP

Android Open Source Project

World's most closed Open Source Software

Development Source Tree Is Not Open

AOSP: World's Most Closed OSS

From community

Google internalsource treeAOSP

From Googler

Release

AOSP: Tools AOSP Uses

repo: Manages multiple projects of AOSP$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

$ chmod a+x ~/bin/repo

AOSP: Tools AOSP Uses

repo: Manages multiple projects of AOSP$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

$ chmod a+x ~/bin/repo

gerrit: Web UI based code review system

AOSP: Contribution Process

Get Source CodeAgree Contributor Agreement

Make Goal

Write Patch

Send Patch Merged / AbandonedCommented

Get Review / Approval

AOSP: Agree Contributor Agreement

AOSP: Agree Contributor Agreement

AOSP: Agree Contributor Agreement

AOSP: Agree Contributor Agreement

AOSP: Agree Contributor Agreement

AOSP: Get Source Code

$ repo init -u \https://android.googlesource.com/platform/manifest

$ repo sync

AOSP: Make Patch

Topic Branch$ repo start <branch_name> <project path>

AOSP - Send Patch

$ repo upload

AOSP - Get Review

AOSP - Get Review

Need Verification and Approval

AOSP - Get Review

See git log to select Appropriate Reviewer

AOSP - Upload New Patchset

Reviewer wants modified patch?

$ git commit --amend

$ repo upload

Summary

Summary

Get Source Code

Summary

Get Source Code

Make Goal

Summary

Get Source Code

Make Goal

Make Patch

Summary

Get Source Code

Make Goal

Make Patch

Send Patch

Summary

Get Source Code

Make Goal

Make Patch

Send Patch

Get Review

LET IT GOThe Code Never Bothered You Anyway

This work by SeongJae Park is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported

License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/.