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 Slide

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

    View Slide

  3. https://pepabo.com

    View 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 Slide

  5. View Slide

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

    View Slide

  7. Introduction
    1.

    View Slide

  8. 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 Slide

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

    View Slide

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

    View Slide

  11. 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 Slide

  12. Case 1: ruby/rake
    2.

    View Slide

  13. 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 Slide

  14. 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 Slide

  15. 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 Slide

  16. 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 Slide

  17. Case 2: ruby/psych
    3.

    View Slide

  18. 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 Slide

  19. 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 Slide

  20. 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 Slide

  21. 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 Slide

  22. 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 Slide

  23. Case 3: ruby/rdoc
    4.

    View Slide

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

    @([email protected]

    $IJDLFO'SJFE4UFBL
    "XFMMNFTTBHFTQBUUJF CSFBEFEBOEGSJFE

    $IJDLFO'SJFE4UFBL
    "XFMMNFTTBHFTQBUUJF CSFBEFEBOEGSJFE

    EFGJOJUJBMJ[F TUS [email protected] [email protected] [email protected]

    [email protected]@MFWFM
    [email protected] [email protected]

    [email protected] DPNQJMFS FPVUWBS

    !TSD !FODPEJOH !GSP[[email protected] TUS

    !pMFOBNFOJM

    View Slide

  25. 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 Slide

  26. 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 Slide

  27. 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 Slide

  28. “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 Slide

  29. 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 Slide

  30. Case 4: rubygems/rubygems
    5.

    View Slide

  31. 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 Slide

  32. 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 Slide

  33. 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 Slide

  34. 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 Slide

  35. 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 Slide

  36. Gemification for Ruby 2.5.0
    6.

    View Slide

  37. 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 Slide

  38. 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 Slide

  39. 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 Slide

  40. Conclusion

    View Slide

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

    View Slide

  42. Let’s Happy Hacking!

    View Slide