SlideShare a Scribd company logo
The integration for package ecosystem
Hiroshi SHIBATA / GMO Pepabo, Inc.
2020.04.13 Ruby3さみっと
Roadmap for
RubyGems 4 and Bundler 3
Hiroshi SHIBATA @hsbt
https://www.hsbt.org
Executive Officer VP of Engineering
Technical Director
at GMO Pepabo, Inc. @pepabo
Agenda
•The introduction for RubyGems 3.1 and Bundler 2.1
•Recent Update for RubyGems and Bundler
•The feature plan and Roadmap for Ruby 3.0
What’s new in RubyGems 3.1?
•I released RubyGems 3.1 at 16 Dec 2019
•https://blog.rubygems.org/2019/12/16/3.1.0-released.html
•This version dropped the compatibility code of Ruby 1.8
and 1.9
•Bundle Bundler 2.1
•Multi-factor authentication for yank command
What’s new in Bundler 2.1?
•Bundler 2.1 has been released at 15 Dec 2019.
•https://github.com/bundler/bundler/releases/tag/v2.1.4
•There is no incompatible feature from Bundler
2.0.x(maybe…)
•Cleanup the compatibility code for Ruby 1.8 and 1.9
•Tuned on the deprecation warnings for Bundler 3
Tuned on the deprecation warnings for v3
•`bundle console`
•`bundle vis`
•`bundle inject`
•Bundler.environment → Bundler.load
•Bundler.clean_{env,exec} → Bundler.unbundled_{env,exec}
•Bundler.with_clean_env → Bundler.with_unbundled_env
Bundler::SharedHelpers.major_deprecation 2
The feature flag for Bundler 3
settings_flag(:allow_bundler_dependency_conflicts) { bundler_3_mode? }
settings_flag(:allow_offline_install) { bundler_3_mode? }
settings_flag(:auto_clean_without_path) { bundler_3_mode? }
settings_flag(:auto_config_jobs) { bundler_3_mode? }
settings_flag(:cache_all) { bundler_3_mode? }
settings_flag(:default_install_uses_path) { bundler_3_mode? }
settings_flag(:deployment_means_frozen) { bundler_3_mode? }
settings_flag(:disable_multisource) { bundler_3_mode? }
settings_flag(:forget_cli_options) { bundler_3_mode? }
settings_flag(:global_gem_cache) { bundler_3_mode? }
settings_flag(:only_update_to_newer_versions) { bundler_3_mode? }
settings_flag(:path_relative_to_cwd) { bundler_3_mode? }
settings_flag(:plugins) { @bundler_version >= Gem::Version.new("1.14") }
settings_flag(:print_only_version_number) { bundler_3_mode? }
settings_flag(:setup_makes_kernel_gem_public) { !bundler_3_mode? }
settings_flag(:skip_default_git_sources) { bundler_3_mode? }
settings_flag(:specific_platform) { bundler_3_mode? }
settings_flag(:suppress_install_using_messages) { bundler_3_mode? }
settings_flag(:unlock_source_unlocks_spec) { !bundler_3_mode? }
settings_flag(:update_requires_all_flag) { bundler_4_mode? }
settings_flag(:use_gem_version_promoter_for_major_updates) { bundler_3_mode? }
settings_option(:default_cli_command) { bundler_3_mode? ? :cli_help : :install }
RubyGems/Bundler integration
•We put the bundler as
submodule in rubygems
repository in 2019
RubyGems/Bundler integration
•We merged bundler org into
rubygems org.
•The repository, team,
maintainers was merged.
RubyGems/Bundler integration
•We also merged bundler
repo into rubygems repo as
monorepo.
•The commits, CI, mainainers
documents was merged
Before
After
Finally, We start to merge
the code-base
Feature works
•We still use separated release workflow about RubyGems
and Bundler
•We hope to release simultaneously like this.
•Release RubyGems 3.2 and Bundler 2.2
•After that, RubyGems 3.2.1 and Bundler 2.2.1 and
RubyGems 3.3 and Bundler 2.3
•Or, Bump Version to RubyGems 4.0 and Bundler 4.0
Bump up RubyGems/Bundler
•We will merge into RubyGems 3.2 into Ruby 2.8.0-dev.
After that, RubyGems 4.0 will be merge Ruby 3.
Ruby
Bundler
RubyGems
2.7.0 3.0
3.1
2.0
3.0
2.1
3.2 4.0
?
2.2
Dependency Resolver incompatible
• RubyGems 2.x and 3.x uses Molinillo-0.5.7
• Bundler 1.x and 2.x also uses Molinillo-0.6.4
• These are different versions and behavior of dependency
resolver.
~/D/g/r/rubygems (master) > ls lib/rubygems/resolver/molinillo/lib/molinillo
delegates dependency_graph.rb gem_metadata.rb resolution.rb state.rb
dependency_graph errors.rb modules resolver.rb
~/D/g/b/bundler (master) > ls lib/bundler/vendor/molinillo/lib/molinillo
compatibility.rb dependency_graph errors.rb modules resolver.rb
delegates dependency_graph.rb gem_metadata.rb resolution.rb state.rb
Gemification for Ruby 3
Standard
Libraries
Default
Gems
Bundled
Gems
Pure Ruby 22 36 6
C extensions 12 17 0
This matrix shows number of standard libraries and their
classifications in Ruby 2.8/3.0.
Gemification for Ruby 3.0
Gemification for Ruby 3.0
•Notable Changes
•`net-telnet` was removed from the bundled gems
•`rexml` and `rss` promoted the bundled gems from the default gems.
•I’ll work to publish the all of stdlibs to the default gems for Ruby 3.0
•Except to use `internal.h` or `internal/*.h` and depends on Ruby version
•mkmf.rb, objspace, pty, ripper, socket, coverage
Gamification on Ruby 3.0(TBD)
We will extract the standard libraries to the default gems.
Abbrev
Base64
DEBUGGER__
DRb
ERB
Find
OpenURI
OptionParser
PP
PrettyPrinter
RbConfig
resolv-replace.rb
Resolv
Rinda
SecureRandom
Set
Shellwords
Time
TSort
un.rb
Digest
IO
Monitor
NKF
Pathname
Syslog
WIN32OLE
Activation issues about default gems
•You couldn’t use the specified version of default gems like json when
RubyGems/Bundler activated them.
•When rubygems uses json-2.1.0, You couldn’t use json 1.8.x. Because ruby
gems and rubygems.org never uses JSON format.
•We can resolve it with `vendoring` approach. But json, psych, and openssl
is C extension library.
Gamification on Ruby 3.0(TBD)
We will extract the default gems to the bundled gems without them.
English
base64
benchmark
cgi
digest
erb
etc
fileutils
find
io/console
json
monitor
net/http
net/https
openssl
optparse
pathname
pp
psych
rbconfig
rdoc
resolv
set
shellwords
socket
stringio
strscan
tempfile
thread
time
timeout
tmpdir
tsort
uri
webrick
yaml
zlib
We should remove the
dependency of stdlib from
rubygems and bundler
Conclusion
•Finally, We will start to merge RubyGems and Bundler for
unifying the one command.
•I’m working to extract stdlib to the default gems in Ruby3
•We should remove the current dependency from rubygems
and bundler.
See you in
Matsumoto

More Related Content

PDF
Gems on Ruby
PDF
The Future of Dependency Management for Ruby
PDF
How to distribute Ruby to the world
PDF
What's new in RubyGems3
PDF
Dependency Resolution with Standard Libraries
PDF
RubyGems 3 & 4
PDF
Gems on Ruby
PDF
The Future of library dependency manageement of Ruby
Gems on Ruby
The Future of Dependency Management for Ruby
How to distribute Ruby to the world
What's new in RubyGems3
Dependency Resolution with Standard Libraries
RubyGems 3 & 4
Gems on Ruby
The Future of library dependency manageement of Ruby

What's hot (20)

PDF
The Future of library dependency management of Ruby
PDF
The Future of Bundled Bundler
PDF
Gemification for Ruby 2.5/3.0
PDF
How to distribute Ruby to the world
PDF
OSS Security the hard way
PDF
Ruby Security the Hard Way
PDF
How to develop the Standard Libraries of Ruby?
PDF
20140419 oedo rubykaigi04
PDF
20140425 ruby conftaiwan2014
PDF
RubyGems 3 & 4
PDF
20140918 ruby kaigi2014
KEY
tDiary annual report 2009 - Sapporo Ruby Kaigi02
PDF
20140925 rails pacific
PDF
Middleware as Code with mruby
PDF
How to Begin to Develop Ruby Core
PDF
From 'Legacy' to 'Edge'
PDF
Gemification for Ruby 2.5/3.0
PDF
How DSL works on Ruby
PDF
Gemification plan of Standard Library on Ruby
PDF
Large-scaled Deploy Over 100 Servers in 3 Minutes
The Future of library dependency management of Ruby
The Future of Bundled Bundler
Gemification for Ruby 2.5/3.0
How to distribute Ruby to the world
OSS Security the hard way
Ruby Security the Hard Way
How to develop the Standard Libraries of Ruby?
20140419 oedo rubykaigi04
20140425 ruby conftaiwan2014
RubyGems 3 & 4
20140918 ruby kaigi2014
tDiary annual report 2009 - Sapporo Ruby Kaigi02
20140925 rails pacific
Middleware as Code with mruby
How to Begin to Develop Ruby Core
From 'Legacy' to 'Edge'
Gemification for Ruby 2.5/3.0
How DSL works on Ruby
Gemification plan of Standard Library on Ruby
Large-scaled Deploy Over 100 Servers in 3 Minutes
Ad

Similar to Roadmap for RubyGems 4 and Bundler 3 (20)

PDF
Long journey of Ruby Standard library at RubyKaigi 2024
PPTX
Chennai.rb feb 2016
DOCX
PPTX
Bundler
PDF
Extracting ruby gem
PDF
How resolve Gem dependencies in your code?
PDF
How to make a Ruby Gem - Austin on Rails, January 2014
PDF
Long journey of Ruby standard library at RubyConf AU 2024
KEY
Ruby on rails toolbox
KEY
Week6
PPTX
RubyConfBD 2013 decouple, bundle and share with ruby gems
PDF
Bundler is the Best
KEY
What's new and great in Rails 3 - Matt Gauger - Milwaukee Ruby Users Group De...
PDF
Searched gems which supports only ruby 2.6
ODP
Build-a-Gem Workshop
ODP
Build-a-Gem Workshop
KEY
RVM, Bundler and Ruby Tracker
PPTX
PDF
Ruby Presentation - Article
PDF
Release responsibly (Maintaining Backwards Compatibility)
Long journey of Ruby Standard library at RubyKaigi 2024
Chennai.rb feb 2016
Bundler
Extracting ruby gem
How resolve Gem dependencies in your code?
How to make a Ruby Gem - Austin on Rails, January 2014
Long journey of Ruby standard library at RubyConf AU 2024
Ruby on rails toolbox
Week6
RubyConfBD 2013 decouple, bundle and share with ruby gems
Bundler is the Best
What's new and great in Rails 3 - Matt Gauger - Milwaukee Ruby Users Group De...
Searched gems which supports only ruby 2.6
Build-a-Gem Workshop
Build-a-Gem Workshop
RVM, Bundler and Ruby Tracker
Ruby Presentation - Article
Release responsibly (Maintaining Backwards Compatibility)
Ad

More from Hiroshi SHIBATA (10)

PDF
Introduction of Cybersecurity with Ruby at RedDotRubyConf 2024
PDF
Introduction of Cybersecurity with OSS at Code Europe 2024
PDF
Deep dive into Ruby's require - RubyConf Taiwan 2023
PDF
How resolve Gem dependencies in your code?
PDF
Ruby コミッターと歩む Ruby を用いたプロダクト開発
PDF
Why ANDPAD commit Ruby and RubyKaigi?
PDF
RailsGirls から始める エンジニアリングはじめの一歩
PDF
The details of CI/CD environment for Ruby
PDF
Productive Organization with Ruby
PDF
The secret of programming language development and future
Introduction of Cybersecurity with Ruby at RedDotRubyConf 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
Deep dive into Ruby's require - RubyConf Taiwan 2023
How resolve Gem dependencies in your code?
Ruby コミッターと歩む Ruby を用いたプロダクト開発
Why ANDPAD commit Ruby and RubyKaigi?
RailsGirls から始める エンジニアリングはじめの一歩
The details of CI/CD environment for Ruby
Productive Organization with Ruby
The secret of programming language development and future

Recently uploaded (20)

PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Encapsulation theory and applications.pdf
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Modernizing your data center with Dell and AMD
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Approach and Philosophy of On baking technology
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
KodekX | Application Modernization Development
PPTX
A Presentation on Artificial Intelligence
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Encapsulation_ Review paper, used for researhc scholars
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Spectral efficient network and resource selection model in 5G networks
Reach Out and Touch Someone: Haptics and Empathic Computing
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Encapsulation theory and applications.pdf
Building Integrated photovoltaic BIPV_UPV.pdf
Advanced methodologies resolving dimensionality complications for autism neur...
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
Review of recent advances in non-invasive hemoglobin estimation
The Rise and Fall of 3GPP – Time for a Sabbatical?
Modernizing your data center with Dell and AMD
Unlocking AI with Model Context Protocol (MCP)
Approach and Philosophy of On baking technology
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Network Security Unit 5.pdf for BCA BBA.
KodekX | Application Modernization Development
A Presentation on Artificial Intelligence

Roadmap for RubyGems 4 and Bundler 3

  • 1. The integration for package ecosystem Hiroshi SHIBATA / GMO Pepabo, Inc. 2020.04.13 Ruby3さみっと Roadmap for RubyGems 4 and Bundler 3
  • 2. Hiroshi SHIBATA @hsbt https://www.hsbt.org Executive Officer VP of Engineering Technical Director at GMO Pepabo, Inc. @pepabo
  • 3. Agenda •The introduction for RubyGems 3.1 and Bundler 2.1 •Recent Update for RubyGems and Bundler •The feature plan and Roadmap for Ruby 3.0
  • 4. What’s new in RubyGems 3.1? •I released RubyGems 3.1 at 16 Dec 2019 •https://blog.rubygems.org/2019/12/16/3.1.0-released.html •This version dropped the compatibility code of Ruby 1.8 and 1.9 •Bundle Bundler 2.1 •Multi-factor authentication for yank command
  • 5. What’s new in Bundler 2.1? •Bundler 2.1 has been released at 15 Dec 2019. •https://github.com/bundler/bundler/releases/tag/v2.1.4 •There is no incompatible feature from Bundler 2.0.x(maybe…) •Cleanup the compatibility code for Ruby 1.8 and 1.9 •Tuned on the deprecation warnings for Bundler 3
  • 6. Tuned on the deprecation warnings for v3 •`bundle console` •`bundle vis` •`bundle inject` •Bundler.environment → Bundler.load •Bundler.clean_{env,exec} → Bundler.unbundled_{env,exec} •Bundler.with_clean_env → Bundler.with_unbundled_env Bundler::SharedHelpers.major_deprecation 2
  • 7. The feature flag for Bundler 3 settings_flag(:allow_bundler_dependency_conflicts) { bundler_3_mode? } settings_flag(:allow_offline_install) { bundler_3_mode? } settings_flag(:auto_clean_without_path) { bundler_3_mode? } settings_flag(:auto_config_jobs) { bundler_3_mode? } settings_flag(:cache_all) { bundler_3_mode? } settings_flag(:default_install_uses_path) { bundler_3_mode? } settings_flag(:deployment_means_frozen) { bundler_3_mode? } settings_flag(:disable_multisource) { bundler_3_mode? } settings_flag(:forget_cli_options) { bundler_3_mode? } settings_flag(:global_gem_cache) { bundler_3_mode? } settings_flag(:only_update_to_newer_versions) { bundler_3_mode? } settings_flag(:path_relative_to_cwd) { bundler_3_mode? } settings_flag(:plugins) { @bundler_version >= Gem::Version.new("1.14") } settings_flag(:print_only_version_number) { bundler_3_mode? } settings_flag(:setup_makes_kernel_gem_public) { !bundler_3_mode? } settings_flag(:skip_default_git_sources) { bundler_3_mode? } settings_flag(:specific_platform) { bundler_3_mode? } settings_flag(:suppress_install_using_messages) { bundler_3_mode? } settings_flag(:unlock_source_unlocks_spec) { !bundler_3_mode? } settings_flag(:update_requires_all_flag) { bundler_4_mode? } settings_flag(:use_gem_version_promoter_for_major_updates) { bundler_3_mode? } settings_option(:default_cli_command) { bundler_3_mode? ? :cli_help : :install }
  • 8. RubyGems/Bundler integration •We put the bundler as submodule in rubygems repository in 2019
  • 9. RubyGems/Bundler integration •We merged bundler org into rubygems org. •The repository, team, maintainers was merged.
  • 10. RubyGems/Bundler integration •We also merged bundler repo into rubygems repo as monorepo. •The commits, CI, mainainers documents was merged Before After
  • 11. Finally, We start to merge the code-base
  • 12. Feature works •We still use separated release workflow about RubyGems and Bundler •We hope to release simultaneously like this. •Release RubyGems 3.2 and Bundler 2.2 •After that, RubyGems 3.2.1 and Bundler 2.2.1 and RubyGems 3.3 and Bundler 2.3 •Or, Bump Version to RubyGems 4.0 and Bundler 4.0
  • 13. Bump up RubyGems/Bundler •We will merge into RubyGems 3.2 into Ruby 2.8.0-dev. After that, RubyGems 4.0 will be merge Ruby 3. Ruby Bundler RubyGems 2.7.0 3.0 3.1 2.0 3.0 2.1 3.2 4.0 ? 2.2
  • 14. Dependency Resolver incompatible • RubyGems 2.x and 3.x uses Molinillo-0.5.7 • Bundler 1.x and 2.x also uses Molinillo-0.6.4 • These are different versions and behavior of dependency resolver. ~/D/g/r/rubygems (master) > ls lib/rubygems/resolver/molinillo/lib/molinillo delegates dependency_graph.rb gem_metadata.rb resolution.rb state.rb dependency_graph errors.rb modules resolver.rb ~/D/g/b/bundler (master) > ls lib/bundler/vendor/molinillo/lib/molinillo compatibility.rb dependency_graph errors.rb modules resolver.rb delegates dependency_graph.rb gem_metadata.rb resolution.rb state.rb
  • 16. Standard Libraries Default Gems Bundled Gems Pure Ruby 22 36 6 C extensions 12 17 0 This matrix shows number of standard libraries and their classifications in Ruby 2.8/3.0. Gemification for Ruby 3.0
  • 17. Gemification for Ruby 3.0 •Notable Changes •`net-telnet` was removed from the bundled gems •`rexml` and `rss` promoted the bundled gems from the default gems. •I’ll work to publish the all of stdlibs to the default gems for Ruby 3.0 •Except to use `internal.h` or `internal/*.h` and depends on Ruby version •mkmf.rb, objspace, pty, ripper, socket, coverage
  • 18. Gamification on Ruby 3.0(TBD) We will extract the standard libraries to the default gems. Abbrev Base64 DEBUGGER__ DRb ERB Find OpenURI OptionParser PP PrettyPrinter RbConfig resolv-replace.rb Resolv Rinda SecureRandom Set Shellwords Time TSort un.rb Digest IO Monitor NKF Pathname Syslog WIN32OLE
  • 19. Activation issues about default gems •You couldn’t use the specified version of default gems like json when RubyGems/Bundler activated them. •When rubygems uses json-2.1.0, You couldn’t use json 1.8.x. Because ruby gems and rubygems.org never uses JSON format. •We can resolve it with `vendoring` approach. But json, psych, and openssl is C extension library.
  • 20. Gamification on Ruby 3.0(TBD) We will extract the default gems to the bundled gems without them. English base64 benchmark cgi digest erb etc fileutils find io/console json monitor net/http net/https openssl optparse pathname pp psych rbconfig rdoc resolv set shellwords socket stringio strscan tempfile thread time timeout tmpdir tsort uri webrick yaml zlib
  • 21. We should remove the dependency of stdlib from rubygems and bundler
  • 22. Conclusion •Finally, We will start to merge RubyGems and Bundler for unifying the one command. •I’m working to extract stdlib to the default gems in Ruby3 •We should remove the current dependency from rubygems and bundler.