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

How to take over OSS project

How to take over OSS project



August 05, 2017


  1. and How hand over OSS project SHIBATA Hiroshi / GMO

    Pepabo, inc. 2017.08.05 builderscon tokyo 2017 How to take over OSS project
  2. Executive Officer CPO(Chief Productivity Officer) Director of Business Process Re-engineering

    Office Hiroshi SHIBATA @hsbt https://www.hsbt.org
  3. https://pepabo.com

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

  7. Introduction 1.

  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
  9. How continue to maintain OSS •Contribute •Fork •Re-Implementation •Take over

  10. What I talk? •Case study of gem for take over.

    •They has commonly knowledge of OSS.
  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.
  12. Case 1: ruby/rake 2.

  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
  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.
  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.
  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.
  17. Case 2: ruby/psych 3.

  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"
  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
  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.
  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.
  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…
  23. Case 3: ruby/rdoc 4.

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

  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.
  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
  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.
  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.
  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)
  30. Case 4: rubygems/rubygems 5.

  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
  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.
  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.
  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.
  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.
  36. Gemification for Ruby 2.5.0 6.

  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.
  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
  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
  40. Conclusion

  41. ·ͱΊ(େࣄͳ͜ͱͳͷͰ೔ຊޠͰ) • ඪ४ͷ boilerplate ʹἧ͑ͯίʔυϕʔεΛॻ͖׵͑Δ͜ͱ͸ϝ ϯςφϯεΛଓ্͚͍ͯ͘Ͱॏཁ • OSS ΛҾ͖ܧ͙࣌͸ϦϦʔεݖݶ΋΋Β͓͏ •

    OSS ΋ਓͱਓͱͷίϛϡχέʔγϣϯɺbuilderscon ͷΑ͏ͳ ΧϯϑΝϨϯεʹߦͬͯ஻Ζ͏ • OSS ΛҾ͖ܧ͍Ͱ։ൃ͢Δͷ΋ָ͍͠
  42. Let’s Happy Hacking!