Gemification for Ruby 2.5/3.0

Hiroshi SHIBATA
Hiroshi SHIBATAOSS programmer at GMO Pepabo, Inc.
Future of Ruby standard libraries
SHIBATA Hiroshi / GMO Pepabo, inc.
2017.11.16 RubyConf 2017
Gemification for Ruby
2.5/3.0
self.introduce
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”],
}
Gemification for Ruby 2.5/3.0
Ruby Sponsors
Sponsors of the Ruby language
• heroku:
Unlimited dyno resources for websites
• fastly:
OSS plan of CDN for *.ruby-lang.org
• NaCl:
Network and Compute resources for website
• Microsoft:
Provides Azure environment via MSDN Enterprise
Sponsors of the Ruby language(2)
• Ruby Association:
Grant of development
• Nihon Ruby no Kai:
macOS Server * 2
• Sugaya research laboratory:
Network resources for macOS Server
What’s a standard library?
1.
What’s the Standard library?
• We called its “標準添付ライブラリ” in Japanese.
• It needs to `require` differently from embedded libraries like
String, Thread, etc.
• It can be used without Bundler or RubyGems
Classification of standard libraries
Standard
Libraries
Default
Gems
Bundled
Gems
Ruby 69 1 7
C 23 5 0
This matrix shows number of standard libraries and their
classifications in Ruby 2.4.
What differences these libraries?
• Standard Libraries
• Upstream: Only Ruby core repository(svn.ruby-lang.org)
• Release cycle: 1 year
• Default Gems
• Upstream: Ruby core repository and GitHub(github.com/ruby)
• Release cycle: 1year or maintainer’s convenience
• Bundled Gems
• Upstream: Only GitHub
• Release cycle: Maintainer’s convenience
What number of these libraries - 2.4.0 to 2.5.0
In Ruby 2.4
Standard Libraries
• Pure ruby: 69
• Extensions: 23
Default gems
• Pure ruby: 1
• Extensions: 5
Bundled Gems
• Pure ruby: 7
• Extensions: 0
In Ruby 2.5
Standard Libraries
• Pure ruby: 64 (-5)
• Extensions: 14 (-9)
Default gems
• Pure ruby: 6 (+5)
• Extensions: 14 (+9)
Bundled Gems
• Pure ruby: 7
• Extensions: 0
Default gems
2.
Inside default gems
• `tool/rbinstall.rb` put gemspec files for default gems on Ruby
core repository.
• We can release default gems to the rubygems.org. It’s a
Standard library that seems to be installed as a gem.
• Rubygems have a detection method for default gems.
>> Gem.loaded_specs["did_you_mean"].default_gem?
=> false
>> require 'openssl'
=> true
>> Gem.loaded_specs["openssl"].default_gem?
=> true
ruby/openssl
Status of OpenSSL binding
• OpenSSL is already extracted default gems. You can update it
separated ruby core releases same as rubygems, rdoc, psych
• 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
Security release
Releasing a new security version of Ruby is hard. All release
maintainer are volunteers.
But If your Ruby supports Default gems/Bundled gems, You can
upgrade these gems without upgrading ruby interpreter.
Upgrading Ruby is hard. Upgrading Gems is easy(er)
ruby/psych
and
ruby/rdoc
Current status of psych and rdoc
I moved canonical repository under the ruby organization. Our
official tracker named “bugs.ruby-lang.org” is high threshold.
But GitHub resolve this by pull requests.
VS
Bundled gems
3.
Inside Bundled gems
• We bundled *.gem and unpacked files to tarball package for
Bundled gems.
• `make install` installed Bundled gem your box.
• It was installed by `tool/rbinstall.rb` on Ruby core repository.
• You can see list of Bundled gems via `gems/bundled_gems`
List of bundled gems on Ruby 2.5
• did_you_mean
• test-unit
• minitest
• net-telnet
	•	power_assert
	•	rake
	•	xmlrpc
Cross-compilation feature
We still have these concerns.
• We couldn’t support to compile C extension on Bundled gems.
• Bundled gems couldn’t support cross compilation.
Ex. We need to make Date gem to bundled gem before extracted
from ruby core.
We can test to bundled gems now
I created task for bundled gems named `test-bundled-gems`
~/D/g/r/ruby.trunk (trunk) > mk -C .x86_64-darwin test-bundled-gems
updating did_you_mean ...
HEAD is now at 982b11a... Version bump to 1.1.2
(snip)
updating xmlrpc ...
HEAD is now at aa29de3... bump version to 0.3.0
./miniruby -I../lib -I. -I.ext/common ../tool/runruby.rb --extout=.ext -- --disable-gems -C ".." bin/gem install --no-ri
--no-rdoc 
--install-dir .bundle --conservative "minitest:~> 5" 'test-unit' 'rake' 'hoe' 'yard' 'pry' 'packnga'
testing did_you_mean gem
(snip)
DidYouMean version: 1.1.2
Run options: --seed 9770
# Running:
...................................
Fabulous run in 0.043525s, 804.1356 runs/s, 3009.7645 assertions/s.
35 runs, 131 assertions, 0 failures, 0 errors, 0 skips
…
What’s Gemification?
4.
Gemification for standard library
https://bugs.ruby-lang.org/issues/5481
• We extracted stdlibs like net-telnet, xmlrpc, rake 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.
Pros of Gemification(1)
• Maintainers can release gem for bugfix, new feature
independent with Ruby core.
• Easily backport stable version from develop version. Ruby
users can use new feature on stable version.
Pros of Gemification(2)
• If upstream is available on GitHub, Ruby users easily send
patch via Pull request.
• Ruby interpreter developper can concentrate development
Ruby internal.
Cons of Gemification(1)
• Abandoned and complex dependency on rubygems and
bundler.
• Maintainers need to maintain ruby core and GitHub
repositories both.
• It’s hard to maintain compatibility.
Cons of Gemification(2)
Backport is hard. Rubygems still supports Ruby 1.8.
% g show a34fb569e41cd87866e644d92a9df4be89b3cad2 test/rubygems/test_gem_package.rb
commit a34fb569e41cd87866e644d92a9df4be89b3cad2
Author: Eric Hodel <drbrain@segment7.net>
(snip)
--- test/rubygems/test_gem_package.rb
+++ test/rubygems/test_gem_package.rb
@@ -638,7 +638,7 @@ class TestGemPackage < Gem::Package::TarTestCase
e.message
io
end
- tf.close!
+ tf.close! if tf.respond_to? :close!
end
def test_verify_empty
RubyGems and
Gemification for Ruby 2.5
5.
What’s rubygems
RubyGems is a package management framework for Ruby.
• rubygems/rubygems.org:
• The Ruby community's gem host.
• rubygems.org is maintain by infrastructure team of rubygems. It is different
team from rubygems cli team.
• rubygems/rubygems:
• Command line tool of rubygems
• Rubygems are created by Seattle.rb
Reserved words on rubygems.org
Rubygems block reserved name same as standard libraries.
Ref. https://github.com/rubygems/rubygems.org/blob/master/
lib/patterns.rb#L10
Problem of fileutils
You can see: https://rubygems.org/gems/fileutils/versions/0.7
If you install fileutils-0.7, fileutils-0.7 break your ruby
environment.
Why???
fiddle
fiddle is standard library for wrapper of libffi. But fiddle
was already reserved another implementation(https://
github.com/bsm/fiddle) on rubygems.org
I did coordinate to transfer above namespace and
override CRuby implementation(https://github.com/ruby/
fiddle) now.
Gemification for Ruby 2.5/3.0
What we will do?
I offered to transfer ownership of these gems to rubygems.org
and overwrite it used by ruby stdlib.
My activities for reserved gems in this summer:
・Transfer request to owners of reserved gems.
・Removed gemification gems from blacklist on rubygems.org.
・Override reserved gems by standard libraries.
Default gems on Ruby 2.5
bigdecimal (default: 1.3.2)
bundler (default: 1.16.0)
cmath (default: 0.0.1)
csv (default: 0.1.0)
date (default: 0.0.1)
dbm (default: 1.0.0.beta1)
digest (default: 0.1.0)
etc (default: 0.2.1)
fcntl (default: 0.0.1)
fiddle (default: 1.0.0.beta2)
fileutils (default: 0.7.2)
gdbm (default: 2.0.0.beta1)
io-console (default: 0.4.6)
ipaddr (default: 1.0.0)
json (default: 2.1.0)
openssl (default: 2.1.0.beta1)
psych (default: 3.0.0.beta3)
rdoc (default: 6.0.0.beta2, 5.1.0)
scanf (default: 0.0.1)
sdbm (default: 0.0.1)
stringio (default: 0.0.1)
strscan (default: 0.0.1)
webrick (default: 1.4.0.beta1)
zlib (default: 0.1.0)
Current status of Default gems. I’m going to promote following
libraries to default gem at Ruby
2.5.0 or 2.6.0
• matrix
• digest
• ostruct
• stringio
• logger
Gamification for Ruby 3.0
6.
Reducing Ruby package size
•In Ruby 2.5, We added “bundler” to default gems.
•Bundler will be integrated RubyGems until Ruby 3.0 releasing.
•I will promote all of standard libraries to default gems.
•I will promote all of default gems without Rubygems
dependencies to bundled gems.
Bundle Bundler to Ruby core
• Bundler uses rspec.
• I made `test-bundler` task that is invoking rspec examples of
Bundler.
~/D/r/trunk > mk test-bundler
./miniruby -I../../github.com/ruby/ruby/lib -I. -I.ext/common ../../github.com/ruby/ruby/tool/runruby.rb
--extout=.ext -- --disable-gems -C "../../github.com/ruby/ruby" bin/gem install --no-ri --no-rdoc 
--install-dir spec/rspec --conservative 'rspec:~> 3.5'
Run options: exclude {:ruby_repo=>true, :rubygems_master=>true, :git=>"=< 2.14.1", :rubygems=>"=< 2.6.13",
:ruby=>"=< 2.5.0", :realworld=>true, :sudo=>true}
..........................................................................................................
..........................................................................................................
....................
Migration status of Rubygems and Bundler
• rubygems-2.7.0 partly uses bundler feature now.
• After bundler-2.0 released, We will target rubygems-3.0
• Ruby 2.5.0 have rubygems(-2.7.2) and bundler(-1.16.0), It
helps migration plan of rubygems/bundler.
We can get Ruby 3.0 and Rubygems 3.0 and Bundler 3.0 in
2020. So It’s a Ruby 3x3x3.
Activated problem for Rubygems
• Rubygems have a activated problem with default gems.
• https://bugs.ruby-lang.org/issues/13847
$ ruby -ropenssl -e 'p OpenSSL::VERSION'
"2.0.5"
$ cat Gemfile
# frozen_string_literal: true
source "https://rubygems.org"
gem 'openssl', '2.0.4'
$ bundle exec ruby -ropenssl -e 'p OpenSSL::VERSION'
/path/to/2.4.1/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/runtime.rb:317:in
`check_for_activated_spec!': You have already activated openssl 2.0.5, but your Gemfile
requires openssl 2.0.4. Prepending `bundle exec` to your command may solve this.
(Gem::LoadError)
require :into
https://bugs.ruby-lang.org/issues/10320
Matz has some concerns about ruby internal.
• Conflicts versions of a shared library like libyaml-., libssl-,
libffi, etc...
• Order of LOADED_FEATURE
So, This feature is difficult to implement on current ruby
specification now.
require 'libfile', into: :Lib
What are dependencies of Rubygems?
base64
benchmark
cgi
digest
English
erb
fileutils
find
io/console
monitor
net/http
net/https
openssl
optparse
pathname
pp
rbconfig
resolv
set
shellwords
socket
stringio
strscan
tempfile
thread
time
timeout
tmpdir
tsort
uri
webrick
Win32API
zlib
Does Gemification make happy Rubyists?
• It’s heavy to maintain like github triage, gem release,
resolve dependency.
• We can upgrade standard library without language
upgrade.
• Ruby developer uses GitHub workflow for default/
bundled gems.
👍👎
👎
Conclusion
Summary of Today’s talk
• I described about a standard libraries of the Ruby language.
• I introduced specification of default gems/bundled gems of
Ruby.
• I shared current status of Rubygems and Gemification
projects.
• I shared my plan towards Ruby 3.0.
Executive Officer CPO(Chief Productivity Officer)
Director of Business Process Re-engineering Office
at GMO Pepabo, Inc. @pepabo
Hiroshi SHIBATA @hsbt
https://www.hsbt.org
Matz
k0kubun
ko1
shyouhei
amatsuda
mrkn
akr
nalsh
n0kada
Towards Ruby 3.0
1 of 50

Recommended

How to distribute Ruby to the world by
How to distribute Ruby to the worldHow to distribute Ruby to the world
How to distribute Ruby to the worldHiroshi SHIBATA
3.8K views51 slides
How to distribute Ruby to the world by
How to distribute Ruby to the worldHow to distribute Ruby to the world
How to distribute Ruby to the worldHiroshi SHIBATA
937 views47 slides
Dependency Resolution with Standard Libraries by
Dependency Resolution with Standard LibrariesDependency Resolution with Standard Libraries
Dependency Resolution with Standard LibrariesHiroshi SHIBATA
803 views24 slides
Gems on Ruby by
Gems on RubyGems on Ruby
Gems on RubyHiroshi SHIBATA
999 views42 slides
The Future of Dependency Management for Ruby by
The Future of Dependency Management for RubyThe Future of Dependency Management for Ruby
The Future of Dependency Management for RubyHiroshi SHIBATA
7.4K views72 slides
The Future of library dependency manageement of Ruby by
The Future of library dependency manageement of RubyThe Future of library dependency manageement of Ruby
The Future of library dependency manageement of RubyHiroshi SHIBATA
988 views55 slides

More Related Content

What's hot

RubyGems 3 & 4 by
RubyGems 3 & 4RubyGems 3 & 4
RubyGems 3 & 4Hiroshi SHIBATA
1.3K views36 slides
The Future of Bundled Bundler by
The Future of Bundled BundlerThe Future of Bundled Bundler
The Future of Bundled BundlerHiroshi SHIBATA
4.7K views60 slides
OSS Security the hard way by
OSS Security the hard wayOSS Security the hard way
OSS Security the hard wayHiroshi SHIBATA
4.5K views62 slides
Gems on Ruby by
Gems on RubyGems on Ruby
Gems on RubyHiroshi SHIBATA
1.9K views35 slides
The Future of library dependency management of Ruby by
 The Future of library dependency management of Ruby The Future of library dependency management of Ruby
The Future of library dependency management of RubyHiroshi SHIBATA
644 views33 slides
How to develop the Standard Libraries of Ruby? by
How to develop the Standard Libraries of Ruby?How to develop the Standard Libraries of Ruby?
How to develop the Standard Libraries of Ruby?Hiroshi SHIBATA
3.6K views25 slides

What's hot(20)

The Future of Bundled Bundler by Hiroshi SHIBATA
The Future of Bundled BundlerThe Future of Bundled Bundler
The Future of Bundled Bundler
Hiroshi SHIBATA4.7K views
The Future of library dependency management of Ruby by Hiroshi SHIBATA
 The Future of library dependency management of Ruby The Future of library dependency management of Ruby
The Future of library dependency management of Ruby
Hiroshi SHIBATA644 views
How to develop the Standard Libraries of Ruby? by Hiroshi SHIBATA
How to develop the Standard Libraries of Ruby?How to develop the Standard Libraries of Ruby?
How to develop the Standard Libraries of Ruby?
Hiroshi SHIBATA3.6K views
Gemification plan of Standard Library on Ruby by Hiroshi SHIBATA
Gemification plan of Standard Library on RubyGemification plan of Standard Library on Ruby
Gemification plan of Standard Library on Ruby
Hiroshi SHIBATA351 views
Middleware as Code with mruby by Hiroshi SHIBATA
Middleware as Code with mrubyMiddleware as Code with mruby
Middleware as Code with mruby
Hiroshi SHIBATA5.2K views
How to Begin to Develop Ruby Core by Hiroshi SHIBATA
How to Begin to Develop Ruby CoreHow to Begin to Develop Ruby Core
How to Begin to Develop Ruby Core
Hiroshi SHIBATA2.9K views
tDiary annual report 2009 - Sapporo Ruby Kaigi02 by Hiroshi SHIBATA
tDiary annual report 2009 - Sapporo Ruby Kaigi02tDiary annual report 2009 - Sapporo Ruby Kaigi02
tDiary annual report 2009 - Sapporo Ruby Kaigi02
Hiroshi SHIBATA1.5K views
The details of CI/CD environment for Ruby by Hiroshi SHIBATA
The details of CI/CD environment for RubyThe details of CI/CD environment for Ruby
The details of CI/CD environment for Ruby
Hiroshi SHIBATA1.1K views
Large-scaled Deploy Over 100 Servers in 3 Minutes by Hiroshi SHIBATA
Large-scaled Deploy Over 100 Servers in 3 MinutesLarge-scaled Deploy Over 100 Servers in 3 Minutes
Large-scaled Deploy Over 100 Servers in 3 Minutes
Hiroshi SHIBATA3.8K views

Similar to Gemification for Ruby 2.5/3.0

The story of language development by
The story of language developmentThe story of language development
The story of language developmentHiroshi SHIBATA
11K views45 slides
Week6 by
Week6Week6
Week6reneedv
293 views26 slides
The secret of programming language development and future by
The secret of programming  language development and futureThe secret of programming  language development and future
The secret of programming language development and futureHiroshi SHIBATA
1.1K views76 slides
RubyConfBD 2013 decouple, bundle and share with ruby gems by
RubyConfBD 2013   decouple, bundle and share with ruby gems RubyConfBD 2013   decouple, bundle and share with ruby gems
RubyConfBD 2013 decouple, bundle and share with ruby gems nhm taveer hossain khan
902 views28 slides
Crate - ruby based standalone executables by
Crate - ruby based standalone executablesCrate - ruby based standalone executables
Crate - ruby based standalone executablesJeremy Hinegardner
1.4K views49 slides
Dbdeployer by
DbdeployerDbdeployer
DbdeployerGiuseppe Maxia
1K views45 slides

Similar to Gemification for Ruby 2.5/3.0(19)

The story of language development by Hiroshi SHIBATA
The story of language developmentThe story of language development
The story of language development
Hiroshi SHIBATA11K views
Week6 by reneedv
Week6Week6
Week6
reneedv293 views
The secret of programming language development and future by Hiroshi SHIBATA
The secret of programming  language development and futureThe secret of programming  language development and future
The secret of programming language development and future
Hiroshi SHIBATA1.1K views
Crate - ruby based standalone executables by Jeremy Hinegardner
Crate - ruby based standalone executablesCrate - ruby based standalone executables
Crate - ruby based standalone executables
Jeremy Hinegardner1.4K views
The Enterprise Strikes Back by Burke Libbey
The Enterprise Strikes BackThe Enterprise Strikes Back
The Enterprise Strikes Back
Burke Libbey1.2K views
Painless ruby deployment on shelly cloud by Giedrius Rimkus
Painless ruby deployment on shelly cloudPainless ruby deployment on shelly cloud
Painless ruby deployment on shelly cloud
Giedrius Rimkus839 views
Практики применения JRuby by .toster
Практики применения JRubyПрактики применения JRuby
Практики применения JRuby
.toster967 views
Test complex database systems in your laptop with dbdeployer by Giuseppe Maxia
Test complex database systems in your laptop with dbdeployerTest complex database systems in your laptop with dbdeployer
Test complex database systems in your laptop with dbdeployer
Giuseppe Maxia563 views
How to start using Scala by Ngoc Dao
How to start using ScalaHow to start using Scala
How to start using Scala
Ngoc Dao2.2K views
Introduction to JRuby by ajuckel
Introduction to JRubyIntroduction to JRuby
Introduction to JRuby
ajuckel1.2K views
How to make a Ruby Gem - Austin on Rails, January 2014 by Clare Glinka
How to make a Ruby Gem - Austin on Rails, January 2014How to make a Ruby Gem - Austin on Rails, January 2014
How to make a Ruby Gem - Austin on Rails, January 2014
Clare Glinka2.5K views
RubyStack: the easiest way to deploy Ruby on Rails by elliando dias
RubyStack: the easiest way to deploy Ruby on RailsRubyStack: the easiest way to deploy Ruby on Rails
RubyStack: the easiest way to deploy Ruby on Rails
elliando dias489 views
Crate Packaging Standalone Ruby Applications by railsconf
Crate  Packaging Standalone Ruby ApplicationsCrate  Packaging Standalone Ruby Applications
Crate Packaging Standalone Ruby Applications
railsconf707 views

More from Hiroshi SHIBATA

How resolve Gem dependencies in your code? by
How resolve Gem dependencies in your code?How resolve Gem dependencies in your code?
How resolve Gem dependencies in your code?Hiroshi SHIBATA
44 views50 slides
How resolve Gem dependencies in your code? by
How resolve Gem dependencies in your code?How resolve Gem dependencies in your code?
How resolve Gem dependencies in your code?Hiroshi SHIBATA
15 views54 slides
Ruby コミッターと歩む Ruby を用いたプロダクト開発 by
Ruby コミッターと歩む Ruby を用いたプロダクト開発Ruby コミッターと歩む Ruby を用いたプロダクト開発
Ruby コミッターと歩む Ruby を用いたプロダクト開発Hiroshi SHIBATA
49 views14 slides
Why ANDPAD commit Ruby and RubyKaigi? by
Why ANDPAD commit Ruby and RubyKaigi?Why ANDPAD commit Ruby and RubyKaigi?
Why ANDPAD commit Ruby and RubyKaigi?Hiroshi SHIBATA
222 views17 slides
RailsGirls から始める エンジニアリングはじめの一歩 by
RailsGirls から始める エンジニアリングはじめの一歩RailsGirls から始める エンジニアリングはじめの一歩
RailsGirls から始める エンジニアリングはじめの一歩Hiroshi SHIBATA
846 views16 slides
Productive Organization with Ruby by
Productive Organization with RubyProductive Organization with Ruby
Productive Organization with RubyHiroshi SHIBATA
545 views18 slides

More from Hiroshi SHIBATA(7)

How resolve Gem dependencies in your code? by Hiroshi SHIBATA
How resolve Gem dependencies in your code?How resolve Gem dependencies in your code?
How resolve Gem dependencies in your code?
Hiroshi SHIBATA44 views
How resolve Gem dependencies in your code? by Hiroshi SHIBATA
How resolve Gem dependencies in your code?How resolve Gem dependencies in your code?
How resolve Gem dependencies in your code?
Hiroshi SHIBATA15 views
Ruby コミッターと歩む Ruby を用いたプロダクト開発 by Hiroshi SHIBATA
Ruby コミッターと歩む Ruby を用いたプロダクト開発Ruby コミッターと歩む Ruby を用いたプロダクト開発
Ruby コミッターと歩む Ruby を用いたプロダクト開発
Hiroshi SHIBATA49 views
Why ANDPAD commit Ruby and RubyKaigi? by Hiroshi SHIBATA
Why ANDPAD commit Ruby and RubyKaigi?Why ANDPAD commit Ruby and RubyKaigi?
Why ANDPAD commit Ruby and RubyKaigi?
Hiroshi SHIBATA222 views
RailsGirls から始める エンジニアリングはじめの一歩 by Hiroshi SHIBATA
RailsGirls から始める エンジニアリングはじめの一歩RailsGirls から始める エンジニアリングはじめの一歩
RailsGirls から始める エンジニアリングはじめの一歩
Hiroshi SHIBATA846 views
Productive Organization with Ruby by Hiroshi SHIBATA
Productive Organization with RubyProductive Organization with Ruby
Productive Organization with Ruby
Hiroshi SHIBATA545 views
How to Begin Developing Ruby Core by Hiroshi SHIBATA
How to Begin Developing Ruby CoreHow to Begin Developing Ruby Core
How to Begin Developing Ruby Core
Hiroshi SHIBATA1.9K views

Recently uploaded

Automating a World-Class Technology Conference; Behind the Scenes of CiscoLive by
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLiveAutomating a World-Class Technology Conference; Behind the Scenes of CiscoLive
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLiveNetwork Automation Forum
50 views35 slides
"Surviving highload with Node.js", Andrii Shumada by
"Surviving highload with Node.js", Andrii Shumada "Surviving highload with Node.js", Andrii Shumada
"Surviving highload with Node.js", Andrii Shumada Fwdays
53 views29 slides
Why and How CloudStack at weSystems - Stephan Bienek - weSystems by
Why and How CloudStack at weSystems - Stephan Bienek - weSystemsWhy and How CloudStack at weSystems - Stephan Bienek - weSystems
Why and How CloudStack at weSystems - Stephan Bienek - weSystemsShapeBlue
197 views13 slides
What’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlue by
What’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlueWhat’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlue
What’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlueShapeBlue
222 views23 slides
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P... by
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...ShapeBlue
154 views62 slides
How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ... by
How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ...How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ...
How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ...ShapeBlue
123 views28 slides

Recently uploaded(20)

Automating a World-Class Technology Conference; Behind the Scenes of CiscoLive by Network Automation Forum
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLiveAutomating a World-Class Technology Conference; Behind the Scenes of CiscoLive
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLive
"Surviving highload with Node.js", Andrii Shumada by Fwdays
"Surviving highload with Node.js", Andrii Shumada "Surviving highload with Node.js", Andrii Shumada
"Surviving highload with Node.js", Andrii Shumada
Fwdays53 views
Why and How CloudStack at weSystems - Stephan Bienek - weSystems by ShapeBlue
Why and How CloudStack at weSystems - Stephan Bienek - weSystemsWhy and How CloudStack at weSystems - Stephan Bienek - weSystems
Why and How CloudStack at weSystems - Stephan Bienek - weSystems
ShapeBlue197 views
What’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlue by ShapeBlue
What’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlueWhat’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlue
What’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlue
ShapeBlue222 views
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P... by ShapeBlue
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...
ShapeBlue154 views
How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ... by ShapeBlue
How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ...How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ...
How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ...
ShapeBlue123 views
Declarative Kubernetes Cluster Deployment with Cloudstack and Cluster API - O... by ShapeBlue
Declarative Kubernetes Cluster Deployment with Cloudstack and Cluster API - O...Declarative Kubernetes Cluster Deployment with Cloudstack and Cluster API - O...
Declarative Kubernetes Cluster Deployment with Cloudstack and Cluster API - O...
ShapeBlue88 views
Live Demo Showcase: Unveiling Dell PowerFlex’s IaaS Capabilities with Apache ... by ShapeBlue
Live Demo Showcase: Unveiling Dell PowerFlex’s IaaS Capabilities with Apache ...Live Demo Showcase: Unveiling Dell PowerFlex’s IaaS Capabilities with Apache ...
Live Demo Showcase: Unveiling Dell PowerFlex’s IaaS Capabilities with Apache ...
ShapeBlue85 views
CloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlue by ShapeBlue
CloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlueCloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlue
CloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlue
ShapeBlue93 views
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or... by ShapeBlue
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...
ShapeBlue158 views
Centralized Logging Feature in CloudStack using ELK and Grafana - Kiran Chava... by ShapeBlue
Centralized Logging Feature in CloudStack using ELK and Grafana - Kiran Chava...Centralized Logging Feature in CloudStack using ELK and Grafana - Kiran Chava...
Centralized Logging Feature in CloudStack using ELK and Grafana - Kiran Chava...
ShapeBlue101 views
Backroll, News and Demo - Pierre Charton, Matthias Dhellin, Ousmane Diarra - ... by ShapeBlue
Backroll, News and Demo - Pierre Charton, Matthias Dhellin, Ousmane Diarra - ...Backroll, News and Demo - Pierre Charton, Matthias Dhellin, Ousmane Diarra - ...
Backroll, News and Demo - Pierre Charton, Matthias Dhellin, Ousmane Diarra - ...
ShapeBlue146 views
Confidence in CloudStack - Aron Wagner, Nathan Gleason - Americ by ShapeBlue
Confidence in CloudStack - Aron Wagner, Nathan Gleason - AmericConfidence in CloudStack - Aron Wagner, Nathan Gleason - Americ
Confidence in CloudStack - Aron Wagner, Nathan Gleason - Americ
ShapeBlue88 views
DRaaS using Snapshot copy and destination selection (DRaaS) - Alexandre Matti... by ShapeBlue
DRaaS using Snapshot copy and destination selection (DRaaS) - Alexandre Matti...DRaaS using Snapshot copy and destination selection (DRaaS) - Alexandre Matti...
DRaaS using Snapshot copy and destination selection (DRaaS) - Alexandre Matti...
ShapeBlue98 views
Elevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlue by ShapeBlue
Elevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlueElevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlue
Elevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlue
ShapeBlue179 views
Extending KVM Host HA for Non-NFS Storage - Alex Ivanov - StorPool by ShapeBlue
Extending KVM Host HA for Non-NFS Storage -  Alex Ivanov - StorPoolExtending KVM Host HA for Non-NFS Storage -  Alex Ivanov - StorPool
Extending KVM Host HA for Non-NFS Storage - Alex Ivanov - StorPool
ShapeBlue84 views

Gemification for Ruby 2.5/3.0

  • 1. Future of Ruby standard libraries SHIBATA Hiroshi / GMO Pepabo, inc. 2017.11.16 RubyConf 2017 Gemification for Ruby 2.5/3.0
  • 3. 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”], }
  • 6. Sponsors of the Ruby language • heroku: Unlimited dyno resources for websites • fastly: OSS plan of CDN for *.ruby-lang.org • NaCl: Network and Compute resources for website • Microsoft: Provides Azure environment via MSDN Enterprise
  • 7. Sponsors of the Ruby language(2) • Ruby Association: Grant of development • Nihon Ruby no Kai: macOS Server * 2 • Sugaya research laboratory: Network resources for macOS Server
  • 8. What’s a standard library? 1.
  • 9. What’s the Standard library? • We called its “標準添付ライブラリ” in Japanese. • It needs to `require` differently from embedded libraries like String, Thread, etc. • It can be used without Bundler or RubyGems
  • 10. Classification of standard libraries Standard Libraries Default Gems Bundled Gems Ruby 69 1 7 C 23 5 0 This matrix shows number of standard libraries and their classifications in Ruby 2.4.
  • 11. What differences these libraries? • Standard Libraries • Upstream: Only Ruby core repository(svn.ruby-lang.org) • Release cycle: 1 year • Default Gems • Upstream: Ruby core repository and GitHub(github.com/ruby) • Release cycle: 1year or maintainer’s convenience • Bundled Gems • Upstream: Only GitHub • Release cycle: Maintainer’s convenience
  • 12. What number of these libraries - 2.4.0 to 2.5.0 In Ruby 2.4 Standard Libraries • Pure ruby: 69 • Extensions: 23 Default gems • Pure ruby: 1 • Extensions: 5 Bundled Gems • Pure ruby: 7 • Extensions: 0 In Ruby 2.5 Standard Libraries • Pure ruby: 64 (-5) • Extensions: 14 (-9) Default gems • Pure ruby: 6 (+5) • Extensions: 14 (+9) Bundled Gems • Pure ruby: 7 • Extensions: 0
  • 14. Inside default gems • `tool/rbinstall.rb` put gemspec files for default gems on Ruby core repository. • We can release default gems to the rubygems.org. It’s a Standard library that seems to be installed as a gem. • Rubygems have a detection method for default gems. >> Gem.loaded_specs["did_you_mean"].default_gem? => false >> require 'openssl' => true >> Gem.loaded_specs["openssl"].default_gem? => true
  • 16. Status of OpenSSL binding • OpenSSL is already extracted default gems. You can update it separated ruby core releases same as rubygems, rdoc, psych • 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
  • 17. Security release Releasing a new security version of Ruby is hard. All release maintainer are volunteers. But If your Ruby supports Default gems/Bundled gems, You can upgrade these gems without upgrading ruby interpreter. Upgrading Ruby is hard. Upgrading Gems is easy(er)
  • 19. Current status of psych and rdoc I moved canonical repository under the ruby organization. Our official tracker named “bugs.ruby-lang.org” is high threshold. But GitHub resolve this by pull requests. VS
  • 21. Inside Bundled gems • We bundled *.gem and unpacked files to tarball package for Bundled gems. • `make install` installed Bundled gem your box. • It was installed by `tool/rbinstall.rb` on Ruby core repository. • You can see list of Bundled gems via `gems/bundled_gems`
  • 22. List of bundled gems on Ruby 2.5 • did_you_mean • test-unit • minitest • net-telnet • power_assert • rake • xmlrpc
  • 23. Cross-compilation feature We still have these concerns. • We couldn’t support to compile C extension on Bundled gems. • Bundled gems couldn’t support cross compilation. Ex. We need to make Date gem to bundled gem before extracted from ruby core.
  • 24. We can test to bundled gems now I created task for bundled gems named `test-bundled-gems` ~/D/g/r/ruby.trunk (trunk) > mk -C .x86_64-darwin test-bundled-gems updating did_you_mean ... HEAD is now at 982b11a... Version bump to 1.1.2 (snip) updating xmlrpc ... HEAD is now at aa29de3... bump version to 0.3.0 ./miniruby -I../lib -I. -I.ext/common ../tool/runruby.rb --extout=.ext -- --disable-gems -C ".." bin/gem install --no-ri --no-rdoc --install-dir .bundle --conservative "minitest:~> 5" 'test-unit' 'rake' 'hoe' 'yard' 'pry' 'packnga' testing did_you_mean gem (snip) DidYouMean version: 1.1.2 Run options: --seed 9770 # Running: ................................... Fabulous run in 0.043525s, 804.1356 runs/s, 3009.7645 assertions/s. 35 runs, 131 assertions, 0 failures, 0 errors, 0 skips …
  • 26. Gemification for standard library https://bugs.ruby-lang.org/issues/5481 • We extracted stdlibs like net-telnet, xmlrpc, rake 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.
  • 27. Pros of Gemification(1) • Maintainers can release gem for bugfix, new feature independent with Ruby core. • Easily backport stable version from develop version. Ruby users can use new feature on stable version.
  • 28. Pros of Gemification(2) • If upstream is available on GitHub, Ruby users easily send patch via Pull request. • Ruby interpreter developper can concentrate development Ruby internal.
  • 29. Cons of Gemification(1) • Abandoned and complex dependency on rubygems and bundler. • Maintainers need to maintain ruby core and GitHub repositories both. • It’s hard to maintain compatibility.
  • 30. Cons of Gemification(2) Backport is hard. Rubygems still supports Ruby 1.8. % g show a34fb569e41cd87866e644d92a9df4be89b3cad2 test/rubygems/test_gem_package.rb commit a34fb569e41cd87866e644d92a9df4be89b3cad2 Author: Eric Hodel <drbrain@segment7.net> (snip) --- test/rubygems/test_gem_package.rb +++ test/rubygems/test_gem_package.rb @@ -638,7 +638,7 @@ class TestGemPackage < Gem::Package::TarTestCase e.message io end - tf.close! + tf.close! if tf.respond_to? :close! end def test_verify_empty
  • 32. What’s rubygems RubyGems is a package management framework for Ruby. • rubygems/rubygems.org: • The Ruby community's gem host. • rubygems.org is maintain by infrastructure team of rubygems. It is different team from rubygems cli team. • rubygems/rubygems: • Command line tool of rubygems • Rubygems are created by Seattle.rb
  • 33. Reserved words on rubygems.org Rubygems block reserved name same as standard libraries. Ref. https://github.com/rubygems/rubygems.org/blob/master/ lib/patterns.rb#L10
  • 34. Problem of fileutils You can see: https://rubygems.org/gems/fileutils/versions/0.7 If you install fileutils-0.7, fileutils-0.7 break your ruby environment. Why???
  • 35. fiddle fiddle is standard library for wrapper of libffi. But fiddle was already reserved another implementation(https:// github.com/bsm/fiddle) on rubygems.org I did coordinate to transfer above namespace and override CRuby implementation(https://github.com/ruby/ fiddle) now.
  • 37. What we will do? I offered to transfer ownership of these gems to rubygems.org and overwrite it used by ruby stdlib. My activities for reserved gems in this summer: ・Transfer request to owners of reserved gems. ・Removed gemification gems from blacklist on rubygems.org. ・Override reserved gems by standard libraries.
  • 38. Default gems on Ruby 2.5 bigdecimal (default: 1.3.2) bundler (default: 1.16.0) cmath (default: 0.0.1) csv (default: 0.1.0) date (default: 0.0.1) dbm (default: 1.0.0.beta1) digest (default: 0.1.0) etc (default: 0.2.1) fcntl (default: 0.0.1) fiddle (default: 1.0.0.beta2) fileutils (default: 0.7.2) gdbm (default: 2.0.0.beta1) io-console (default: 0.4.6) ipaddr (default: 1.0.0) json (default: 2.1.0) openssl (default: 2.1.0.beta1) psych (default: 3.0.0.beta3) rdoc (default: 6.0.0.beta2, 5.1.0) scanf (default: 0.0.1) sdbm (default: 0.0.1) stringio (default: 0.0.1) strscan (default: 0.0.1) webrick (default: 1.4.0.beta1) zlib (default: 0.1.0) Current status of Default gems. I’m going to promote following libraries to default gem at Ruby 2.5.0 or 2.6.0 • matrix • digest • ostruct • stringio • logger
  • 40. Reducing Ruby package size •In Ruby 2.5, We added “bundler” to default gems. •Bundler will be integrated RubyGems until Ruby 3.0 releasing. •I will promote all of standard libraries to default gems. •I will promote all of default gems without Rubygems dependencies to bundled gems.
  • 41. Bundle Bundler to Ruby core • Bundler uses rspec. • I made `test-bundler` task that is invoking rspec examples of Bundler. ~/D/r/trunk > mk test-bundler ./miniruby -I../../github.com/ruby/ruby/lib -I. -I.ext/common ../../github.com/ruby/ruby/tool/runruby.rb --extout=.ext -- --disable-gems -C "../../github.com/ruby/ruby" bin/gem install --no-ri --no-rdoc --install-dir spec/rspec --conservative 'rspec:~> 3.5' Run options: exclude {:ruby_repo=>true, :rubygems_master=>true, :git=>"=< 2.14.1", :rubygems=>"=< 2.6.13", :ruby=>"=< 2.5.0", :realworld=>true, :sudo=>true} .......................................................................................................... .......................................................................................................... ....................
  • 42. Migration status of Rubygems and Bundler • rubygems-2.7.0 partly uses bundler feature now. • After bundler-2.0 released, We will target rubygems-3.0 • Ruby 2.5.0 have rubygems(-2.7.2) and bundler(-1.16.0), It helps migration plan of rubygems/bundler. We can get Ruby 3.0 and Rubygems 3.0 and Bundler 3.0 in 2020. So It’s a Ruby 3x3x3.
  • 43. Activated problem for Rubygems • Rubygems have a activated problem with default gems. • https://bugs.ruby-lang.org/issues/13847 $ ruby -ropenssl -e 'p OpenSSL::VERSION' "2.0.5" $ cat Gemfile # frozen_string_literal: true source "https://rubygems.org" gem 'openssl', '2.0.4' $ bundle exec ruby -ropenssl -e 'p OpenSSL::VERSION' /path/to/2.4.1/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/runtime.rb:317:in `check_for_activated_spec!': You have already activated openssl 2.0.5, but your Gemfile requires openssl 2.0.4. Prepending `bundle exec` to your command may solve this. (Gem::LoadError)
  • 44. require :into https://bugs.ruby-lang.org/issues/10320 Matz has some concerns about ruby internal. • Conflicts versions of a shared library like libyaml-., libssl-, libffi, etc... • Order of LOADED_FEATURE So, This feature is difficult to implement on current ruby specification now. require 'libfile', into: :Lib
  • 45. What are dependencies of Rubygems? base64 benchmark cgi digest English erb fileutils find io/console monitor net/http net/https openssl optparse pathname pp rbconfig resolv set shellwords socket stringio strscan tempfile thread time timeout tmpdir tsort uri webrick Win32API zlib
  • 46. Does Gemification make happy Rubyists? • It’s heavy to maintain like github triage, gem release, resolve dependency. • We can upgrade standard library without language upgrade. • Ruby developer uses GitHub workflow for default/ bundled gems. 👍👎 👎
  • 48. Summary of Today’s talk • I described about a standard libraries of the Ruby language. • I introduced specification of default gems/bundled gems of Ruby. • I shared current status of Rubygems and Gemification projects. • I shared my plan towards Ruby 3.0.
  • 49. Executive Officer CPO(Chief Productivity Officer) Director of Business Process Re-engineering Office at GMO Pepabo, Inc. @pepabo Hiroshi SHIBATA @hsbt https://www.hsbt.org