Upgrade to Pro — share decks privately, control downloads, hide ads and more …

How to take over OSS project

How to take over OSS project

SHIBATA Hiroshi

August 05, 2017
Tweet

More Decks by SHIBATA Hiroshi

Other Decks in Technology

Transcript

  1. and How hand over OSS project
    SHIBATA Hiroshi / GMO Pepabo, inc.
    2017.08.05 builderscon tokyo 2017
    How to take over OSS project

    View full-size slide

  2. Executive Officer CPO(Chief Productivity Officer)
    Director of Business Process Re-engineering Office
    Hiroshi SHIBATA @hsbt
    https://www.hsbt.org

    View full-size slide

  3. https://pepabo.com

    View full-size slide

  4. self.introduce
    =>
    {
    name: “SHIBATA Hiroshi”,
    nickname: “hsbt”,
    organizations: [“pepabo”, “ruby_core_team”, “asakusarb”],
    commit_bits: [“ruby”, “rake”, “rubygems”, “rdoc”, “psych”, “syck”, “ruby-
    build”, “railsgirls”, “railsgirls-jp”, …],
    sites: [“hsbt.org”, “ruby-lang.org”, “rubyci.org”, “railsgirls.com”,
    “railsgirls.jp”],
    }

    View full-size slide

  5. େࣄͳ͜ͱͳͷͰ೔ຊޠͰ
    wεϥΠυ͸ӳޠͰ͢ɻൃද͸೔ຊޠͰ͢ɻ
    wҰॹʹαʔϏε։ൃ͢Δ஥ؒΛେืू
    த੠͔͚͍ͯͩ͘͞ɻ
    w#VJMEFSTDPOͷͨΊʹεςοΧʔ࡞ͬͯ
    དྷ·ͨ͠ 5XJUUFSͰ൓Ԡͯ͠΋Β͑Δ
    ͱخ͍͠

    View full-size slide

  6. Introduction
    1.

    View full-size slide

  7. A History of Ruby(Short Ver.)
    •Ruby 1.8.7 bundled a lot of library named standard library a.k.a stdlib.
    •Ruby 1.9.x bundled rubygems that is ruby library packaging and distributing.
    •Many of libraries was born after that. Example for rspec, nokogiri, rake and thor. It’s
    start time for Ruby language and library ecosystems.
    •First Authors of famous library is burnout.
    •Some of useful gems are changed maintainers of second generation.
    •Ruby 2.4, 2.5
    2013
    2017
    2009
    2008

    View full-size slide

  8. How continue to maintain OSS
    •Contribute
    •Fork
    •Re-Implementation
    •Take over

    View full-size slide

  9. What I talk?
    •Case study of gem for take over.
    •They has commonly knowledge of OSS.

    View full-size slide

  10. Pattern of take over OSS
    1. If you triage or comments to Issue, an send a pull request to
    repository. Current maintainer add commit bit to you.
    2. Request to take over via E-Mail/DM/slack…Etc
    3. Request to take over via face to face communication.

    View full-size slide

  11. Case 1: ruby/rake
    2.

    View full-size slide

  12. Make in Ruby
    Rake is a Make-like program implemented in Ruby. Tasks and
    dependencies are specified in standard Ruby syntax.
    task :awesome do
    puts :bar
    end
    task beat: [:awesome] do
    puts :buzz
    end
    task default: :beat

    View full-size slide

  13. ruby/rake
    •Rake was originally created by Jim Weirich, who unfortunately
    passed away in February 2014.
    •This repository was originally hosted at github.com/
    jimweirich/rake, It has been moved to github.com/ruby/rake by
    @drbrain
    •Rake adopted SemVer policy. (v0.9.x to v10.x.y)
    •@drbrain and @hsbt maintain ruby/rake now.

    View full-size slide

  14. Rewrite hoe to bundler
    •You may invoke to `bundle` when
    to see Gemfile
    •Without bundler, you need to
    install hoe and their plugins.
    “boilerplate” is important for
    continuously development.

    View full-size slide

  15. My mistake - TaskManager#last_comment
    • I removed obsoleted attr_accessor named `@last_comment`
    with deprecated code.
    • I found a my commit is “breaking changes” when it happens.
    • It was referenced yard, rspec and rubocop. When users
    updated Rake 11, It breaks rake task with these gems.
    We should prepare “Transition Path” for breaking changes.

    View full-size slide

  16. Case 2: ruby/psych
    3.

    View full-size slide

  17. Whats psych?
    A libyaml wrapper for Ruby
    • It supports bundled libyaml-* sources. You can build psych
    without libyaml-devel(dev) packages.
    # Load YAML in to a Ruby object
    Psych.load('--- foo') # => 'foo'
    # Emit YAML from a Ruby object
    Psych.dump("foo") # => "--- foo\n...\n"

    View full-size slide

  18. History of Psych
    • Original author is Aaron Patterson a.k.a @tenderlove
    • https://github.com/tenderlove/psych
    • I’ve been backport/forwardport between tenderlove/psych
    and ruby/ruby.
    • After that, I was promoted gem maintainer. I released psych to
    rubygems.org

    View full-size slide

  19. Problem for psych case
    • I’m not project Owner. Because I could not change
    configuration of CI or project settings.
    • Sometimes I got build fail of JRuby version.
    I hope to prepare to test with JRuby on Travis CI.

    View full-size slide

  20. Solutions
    • I picked up tenderlove on RedDotRubyConf and transferred
    personal repository of Github to organization account named
    “ruby”
    • Now, canonical repository of psych is https://github.com/ruby/
    psych
    • I can update CI configuration and team of contributors.
    Face to Face is a best practice for OSS development.

    View full-size slide

  21. Security release
    We hard to fix and release these security issue. so all of release
    maintainer are volunteer work.
    If you have a plan for OSS take over, you should concern security
    handling.
    • Do you have a connection of security community?
    • Do you have a friends of security specialist?
    • etc…

    View full-size slide

  22. Case 3: ruby/rdoc
    4.

    View full-size slide

  23. Whats rdoc?
    RDoc produces HTML and online documentation for Ruby projects.
    QVUTMJTUJOHTQSPEVDUaOMJTUJOHTQSJDF

    @(FOFSBUFT@

    $IJDLFO'SJFE4UFBL
    "XFMMNFTTBHFTQBUUJF CSFBEFEBOEGSJFE

    $IJDLFO'SJFE4UFBL
    "XFMMNFTTBHFTQBUUJF CSFBEFEBOEGSJFE

    EFGJOJUJBMJ[F TUS TBGF@MFWFMOJM USJN@NPEFOJM FPVUWBS@FSCPVU

    !TBGF@MFWFMTBGF@MFWFM
    DPNQJMFSNBLF@DPNQJMFS USJN@NPEF

    TFU@FPVUWBS DPNQJMFS FPVUWBS

    !TSD !FODPEJOH !GSP[FO@TUSJOHDPNQJMFSDPNQJMF TUS

    !pMFOBNFOJM

    View full-size slide

  24. History of RDoc
    • Canonical repository of RDoc was rdoc/rdoc.
    • It maintained rdoc team (not ruby core, seattle.rb)
    • I only backport to ruby core from rdoc upstream.

    View full-size slide

  25. Problem of JSON dependency.
    • Ruby 2.4 changed Integer Unification. Therefore json-2.x breaks
    Ruby 2.4.x or later.
    • You could not install rails with Ruby 2.4 at it time.
    • `gem i rails` was stopped caused by json dependency via rdoc/
    sdoc.
    See details: https://www.hsbt.org/diary/20160829.html
    And my talk of RubyKaigi 2017

    View full-size slide

  26. Solutions
    • I was promoted RDoc maintainer.
    • I fixed json dependency from RDoc.
    • After that. I released new versions of RDoc and triage issues
    and pull requests on rdoc/rdoc.

    View full-size slide

  27. “Release” is important
    I think “Take over the OSS project” is that take over release
    management.
    Sometimes, previous maintainer only add commit bit when take
    over the OSS. If you faced it, you should request to release grant
    from previous maintainer.

    View full-size slide

  28. Current status of rdoc
    • I handle a project of rdoc and management releases(not
    product management)
    • I have no idea for improving documentation tool about rdoc
    If you are interested in rdoc or documentation tools of Ruby,
    Please discuss to me. (It’s a take over chance)

    View full-size slide

  29. Case 4: rubygems/rubygems
    5.

    View full-size slide

  30. Whats rubygems
    RubyGems is a package management framework for Ruby.
    • rubygems/rubygems.org:
    • The Ruby community's gem host.
    • rubygems/rubygems:
    • Command line tool of rubygems

    View full-size slide

  31. Problem
    • Rubygems have difference from ruby core repository. I created a
    patch for rubygems/rubygems from ruby core.
    • But I felt that rubygems has no project/product manager. In the
    past, @drbrain released new version of rubygems. But it
    decreased a number of releases in 2015.
    • In Q4 of 2015, RubyTogether taken over the rubygems projects.

    View full-size slide

  32. What happened?
    Bundler team funded RubyTogether take over rubygems/
    rubygems. (I didn’t understand that at it times.)
    • Some maintainers removed from rubygems/rubygems.
    • I requested to remain maintainer of rubygems.

    View full-size slide

  33. Current problem of rubygems
    bundler,rubygems team are not interested in ruby core collaboration.
    (It’s my point of view.)
    In the past, We easily discuss maintenance plan and policy about
    ruby and rubygems to @tenderlove and @drbrain.
    I hard to backport a patch to rubygems from ruby core. Because
    these patch only need ruby trunk. It is needless stable versions.

    View full-size slide

  34. My mistake
    • I should have declared take over at an early stage.
    • I can fork rubygems/rubygems to ruby/rubygems. But it’s worse to
    ruby world.
    We should discuss and communicate bundler/rubygems team
    continously.

    View full-size slide

  35. Gemification for Ruby 2.5.0
    6.

    View full-size slide

  36. Gemification for stdlib
    https://bugs.ruby-lang.org/issues/5481
    • We extract old or un-maintain status stdlibs like net-telnet, xmlrpc,
    tk to bundled gems.
    • These are extracted under the https://github.com/ruby/ . And
    shipped on rubygems.org
    • Other gems are also extracted at the future.

    View full-size slide

  37. Status of OpenSSL binding
    • OpenSSL is already extracted default gems. You can update it
    separated ruby core releases same as rubygems, rdoc, bigdecimal.
    • https://github.com/ruby/openssl
    • It’s maintained by @rhenium
    • Upstream was changed github repository from svn.ruby-lang.org
    • He aggressively maintains new feature of openssl

    View full-size slide

  38. fiddle
    fiddle is standard library for wrapper of libffi. But fiddle was already
    reserved another implementation rubygems.org
    https://github.com/bsm/fiddle
    I did coordinate to transfer above namespace and override CRuby
    implementation now.
    https://github.com/ruby/fiddle

    View full-size slide

  39. ·ͱΊ(େࣄͳ͜ͱͳͷͰ೔ຊޠͰ)
    • ඪ४ͷ boilerplate ʹἧ͑ͯίʔυϕʔεΛॻ͖׵͑Δ͜ͱ͸ϝ
    ϯςφϯεΛଓ্͚͍ͯ͘Ͱॏཁ
    • OSS ΛҾ͖ܧ͙࣌͸ϦϦʔεݖݶ΋΋Β͓͏
    • OSS ΋ਓͱਓͱͷίϛϡχέʔγϣϯɺbuilderscon ͷΑ͏ͳ
    ΧϯϑΝϨϯεʹߦͬͯ஻Ζ͏
    • OSS ΛҾ͖ܧ͍Ͱ։ൃ͢Δͷ΋ָ͍͠

    View full-size slide

  40. Let’s Happy Hacking!

    View full-size slide