All bugfixes are incompatibilities

nagachika t
nagachika tSound.rb
2019-04-19
All bug-fixes are incompatibilities
nagachika @ RubyKaigi 2019
Important Notification about RubyGems.org
The attackers try to hijack your
account with compromised
password list.
Example: bootstrap-sass was
compromised by this attack. It was
injected the vulnerable RCE code.
We should prepare the multi-factor
authentication on RubyGems.org
for protecting from them.
✤ @nagachika
✤ CRuby committer
✤ CRuby stable branch maintainer (2.5 → 2.6)
✤ ruby trunk changes
✤ Fukuoka.rb/TFUG Fukuoka
WHO AM I
✤ @nagachika
✤ CRuby committer
✤ CRuby stable branch maintainer (2.5 → 2.6)
✤ ruby trunk changes
✤ Fukuoka.rb/TFUG Fukuoka
WHO AM I
“What’s the Ruby’s

stable branch maintenance?”
✤ We backport fixes into stable branches from trunk
Ruby’s stable branch model
EoL
ruby_2_2
ruby_2_5
ruby_2_6
backport
trunk
bugfix
✤ We backport fixes into stable branches from trunk
Ruby’s stable branch model
nurse
unak
Release

Manager
Stable

Branch

Maintainer
EoL
ruby_2_2
ruby_2_5
ruby_2_6
backport
trunk
bugfix
nagachika
✤ Backport bug-fixes from trunk into stable branches
✤ Release stable packages.
✤ Handle security issues in concert with
stakeholders.
Stable Branch Maintainer
✤ Backport bug-fixes from trunk into stable branches
✤ Release stable packages
✤ Handle security issues in concert with
stakeholders
Stable Branch Maintainer
✤ Watch commits on trunk.
✤ Backport bug-fixes.
Stable Branch Maintainer’s daily work
✤ Watch commits on trunk

→ Watch backport requests on Redmine.
✤ Backport bug-fixes.
Stable Branch Maintainer’s daily work
✤ Redmine: bugs.ruby-lang.org
Ruby’s stable maintenance policy
✤ File tickets with rubyʼs version information
Ruby’s stable maintenance policy
✤ You can maintain only one stable branch at once.
Ruby’s stable branch model
nurse
nagachika
unak
Release

Manager
Stable

Branch

Maintainer
EoL
ruby_2_2
ruby_2_5
ruby_2_6
backport
trunk
bugfix
“How can I become a Ruby stable
maintainer?”
Requirements for Stable Branch Maintainers
✤ Wide understandings for the Ruby implementation
✤ Sustainability to some extent
✤ Understanding maintenance policy
Requirements for Stable Branch Maintainers
✤ Backport bug-fixes
✤ Donʼt backport new features/spec changes
Ruby’s maintenance policy
stable
trunk
bug-fix
new feature
IO.read could execute a command
IO.read(“|cmd…”) executes the command
(same as Kernel#open)
IO.read and File.read
IO.read and File.read
% ruby -ve 'puts File.read("|echo foo")'
ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-darwin15]
foo
% ruby -ve 'puts File.read("|echo foo")'
ruby 2.5.4p155 (2019-03-13 revision 67245) [x86_64-darwin15]
-e:1: warning: IO.read called on File to invoke external command
foo
% ruby -ve 'puts File.read("|echo foo")'
ruby 2.6.2p47 (2019-03-13 revision 67232) [x86_64-darwin15]
Traceback (most recent call last):
1: from -e:1:in `<main>'
-e:1:in `read': No such file or directory @ rb_sysopen - |echo foo (Errno::ENOENT)
IO.read and File.read
✤ 2.0.0: 469
✤ 2.1: 250
✤ 2.2: 205
✤ 2.3: 217
✤ 2.4: 190
✤ 2.5: 101
Backport commits by nagachika
✤ 2.0.0: 469
✤ 2.1: 250
✤ 2.2: 205
✤ 2.3: 217
✤ 2.4: 190
✤ 2.5: 101
Backport commits by nagachika
include
Documentation,
performance improvement,
memory usage improvement…
Lessons learned from

failures
Backport performance improvements
All bugfixes are incompatibilities
✤ The change broke CI on mswin
Backport performance improvements
✤ The lesson learned
✤ Donʼt backport performance improvements
Backport performance improvements
Backport introduced memory violation
Backport introduced memory violation
Backport introduced memory violation
✤ The lesson learned
✤ Bug-fixes for Method/Constants search in edge
cases sometimes introduce another memory
violation.
✤ Fixing a minor bug can introduce severe bugs
Backport introduced memory violation
Refinements
Refinements
✤ The lesson learned
✤ “Refinements” is not a matured feature and
continue expanding its scope of adaptation.
✤ Deal it carefully.
Refinements
Fixing SyntaxError caused another SyntaxError
Fixing SyntaxError caused another SyntaxError
Fixing SyntaxError caused another SyntaxError
cond ? expr1 :expr2
Fixing SyntaxError caused another SyntaxError
{ key:(expr rescue nil) }
{ key:<<EOF }
EOF
✤ The lesson learned
✤ parse.y is “魔境” (mass of legendary complexity)
✤ SyntaxError is the one of the most severe issues
✤ Monkey patching cannot get rid of SyntaxError
Fixing SyntaxError caused another SyntaxError
Fixing SyntaxError caused another SyntaxError(2)
Fixing SyntaxError caused another SyntaxError(2)
Fixing SyntaxError caused another SyntaxError(2)
def foo key1:
…
end
Fixing SyntaxError caused another SyntaxError(2)
{ key:if foo then 1 else 0 }
✤ The lesson learned(?)
✤ Fixing the SyntaxError introduced another
SyntaxError in the more rare case
✤ But the prior SyntaxError was in the new syntax

(Mandatory keyword arguments)
✤ There was maybe no real application affected
by the prior SyntaxError.
Fixing SyntaxError caused another SyntaxError(2)
Fixing SyntaxError caused another SyntaxError(3)
Fixing SyntaxError caused another SyntaxError(3)
Fixing SyntaxError caused another SyntaxError(3)
✤ The lesson learned
✤ parse.y is “魔境”
✤ Long-standing bugs have less priority

→ “Long-standing” means thereʼs no real
application affected
✤ “Known bug” can be better than “Regression”
Fixing SyntaxError caused another SyntaxError(3)
Load FIFO
✤ Release GVL during open fd for `load`
Load FIFO
✤ Performance degradation of YAML.parse on

multi-threads environments
Load FIFO
✤ The lesson learned
✤ Donʼt backport bug-fixes for imaginary use case.

No one wanted to load from FIFO!
Load FIFO
✤ Donʼt backport performance improvements
✤ Donʼt backport fix for the long-standing bugs
✤ Donʼt jump at the fix in parse.y, constants/
methods search and refinements
✤ Donʼt backport fixes on one wanted to backport
The Lessons Learned from failures
✤ Be-Practical!
The Lessons Learned from failures
1 of 56

Recommended

Stackless Python In Eve by
Stackless Python In EveStackless Python In Eve
Stackless Python In Evel xf
15.3K views29 slides
Don’t block the event loop! by
Don’t block the event loop!Don’t block the event loop!
Don’t block the event loop!hujinpu
1.8K views35 slides
L'odyssée de la log by
L'odyssée de la logL'odyssée de la log
L'odyssée de la logGérald Quintana
478 views53 slides
Event loop by
Event loopEvent loop
Event loopcodepitbull
2K views32 slides
From Zero To Production (NixOS, Erlang) @ Erlang Factory SF 2016 by
From Zero To Production (NixOS, Erlang) @ Erlang Factory SF 2016From Zero To Production (NixOS, Erlang) @ Erlang Factory SF 2016
From Zero To Production (NixOS, Erlang) @ Erlang Factory SF 2016Susan Potter
2.5K views64 slides
Ruby 1.9 And Rails 3.0 by
Ruby 1.9 And Rails 3.0Ruby 1.9 And Rails 3.0
Ruby 1.9 And Rails 3.0ArrrrCamp
1.4K views64 slides

More Related Content

What's hot

I/O, You Own: Regaining Control of Your Disk in the Presence of Bootkits by
I/O, You Own: Regaining Control of Your Disk in the Presence of BootkitsI/O, You Own: Regaining Control of Your Disk in the Presence of Bootkits
I/O, You Own: Regaining Control of Your Disk in the Presence of BootkitsCrowdStrike
5.3K views78 slides
도커 없이 컨테이너 만들기 4편 네트워크네임스페이스 (2) by
도커 없이 컨테이너 만들기 4편 네트워크네임스페이스 (2)도커 없이 컨테이너 만들기 4편 네트워크네임스페이스 (2)
도커 없이 컨테이너 만들기 4편 네트워크네임스페이스 (2)Sam Kim
265 views63 slides
Profiling and optimizing go programs by
Profiling and optimizing go programsProfiling and optimizing go programs
Profiling and optimizing go programsBadoo Development
8K views84 slides
skipfish by
skipfishskipfish
skipfishChristian Heinrich
4.3K views36 slides
Make container without_docker_6-overlay-network_1 by
Make container without_docker_6-overlay-network_1 Make container without_docker_6-overlay-network_1
Make container without_docker_6-overlay-network_1 Sam Kim
238 views70 slides
Building an inflight entertainment system controller in twisted by
Building an inflight entertainment system controller in twistedBuilding an inflight entertainment system controller in twisted
Building an inflight entertainment system controller in twistedDavid Novakovic
1.3K views24 slides

What's hot(20)

I/O, You Own: Regaining Control of Your Disk in the Presence of Bootkits by CrowdStrike
I/O, You Own: Regaining Control of Your Disk in the Presence of BootkitsI/O, You Own: Regaining Control of Your Disk in the Presence of Bootkits
I/O, You Own: Regaining Control of Your Disk in the Presence of Bootkits
CrowdStrike5.3K views
도커 없이 컨테이너 만들기 4편 네트워크네임스페이스 (2) by Sam Kim
도커 없이 컨테이너 만들기 4편 네트워크네임스페이스 (2)도커 없이 컨테이너 만들기 4편 네트워크네임스페이스 (2)
도커 없이 컨테이너 만들기 4편 네트워크네임스페이스 (2)
Sam Kim265 views
Make container without_docker_6-overlay-network_1 by Sam Kim
Make container without_docker_6-overlay-network_1 Make container without_docker_6-overlay-network_1
Make container without_docker_6-overlay-network_1
Sam Kim238 views
Building an inflight entertainment system controller in twisted by David Novakovic
Building an inflight entertainment system controller in twistedBuilding an inflight entertainment system controller in twisted
Building an inflight entertainment system controller in twisted
David Novakovic1.3K views
Node.js Event Loop & EventEmitter by Simen Li
Node.js Event Loop & EventEmitterNode.js Event Loop & EventEmitter
Node.js Event Loop & EventEmitter
Simen Li4.9K views
nouka inventry manager by Toshiaki Baba
nouka inventry managernouka inventry manager
nouka inventry manager
Toshiaki Baba2.3K views
Connecting to the network by Mu Chun Wang
Connecting to the networkConnecting to the network
Connecting to the network
Mu Chun Wang530 views
Fluentd v0.12 master guide by N Masahiro
Fluentd v0.12 master guideFluentd v0.12 master guide
Fluentd v0.12 master guide
N Masahiro8.9K views
Akmal Khaleeq Waheed - Challenge 3 p2 by tovmug
Akmal Khaleeq Waheed - Challenge 3 p2Akmal Khaleeq Waheed - Challenge 3 p2
Akmal Khaleeq Waheed - Challenge 3 p2
tovmug506 views
Big Data Day LA 2016/ Big Data Track - Fluentd and Embulk: Collect More Data,... by Data Con LA
Big Data Day LA 2016/ Big Data Track - Fluentd and Embulk: Collect More Data,...Big Data Day LA 2016/ Big Data Track - Fluentd and Embulk: Collect More Data,...
Big Data Day LA 2016/ Big Data Track - Fluentd and Embulk: Collect More Data,...
Data Con LA561 views

Similar to All bugfixes are incompatibilities

Low Level Exploits by
Low Level ExploitsLow Level Exploits
Low Level Exploitshughpearse
1.5K views66 slides
New features in Ruby 2.5 by
New features in Ruby 2.5New features in Ruby 2.5
New features in Ruby 2.5Ireneusz Skrobiś
112 views29 slides
Road to sbt 1.0 paved with server by
Road to sbt 1.0   paved with serverRoad to sbt 1.0   paved with server
Road to sbt 1.0 paved with serverEugene Yokota
4.9K views53 slides
Infrastructureascode slideshare-160331143725 by
Infrastructureascode slideshare-160331143725Infrastructureascode slideshare-160331143725
Infrastructureascode slideshare-160331143725miguel dominguez
53 views167 slides
Infrastructureascode slideshare-160331143725 by
Infrastructureascode slideshare-160331143725Infrastructureascode slideshare-160331143725
Infrastructureascode slideshare-160331143725MortazaJohari
25 views167 slides
Infrastructure as code: running microservices on AWS using Docker, Terraform,... by
Infrastructure as code: running microservices on AWS using Docker, Terraform,...Infrastructure as code: running microservices on AWS using Docker, Terraform,...
Infrastructure as code: running microservices on AWS using Docker, Terraform,...Yevgeniy Brikman
177.5K views167 slides

Similar to All bugfixes are incompatibilities(20)

Low Level Exploits by hughpearse
Low Level ExploitsLow Level Exploits
Low Level Exploits
hughpearse1.5K views
Road to sbt 1.0 paved with server by Eugene Yokota
Road to sbt 1.0   paved with serverRoad to sbt 1.0   paved with server
Road to sbt 1.0 paved with server
Eugene Yokota4.9K views
Infrastructureascode slideshare-160331143725 by miguel dominguez
Infrastructureascode slideshare-160331143725Infrastructureascode slideshare-160331143725
Infrastructureascode slideshare-160331143725
miguel dominguez53 views
Infrastructureascode slideshare-160331143725 by MortazaJohari
Infrastructureascode slideshare-160331143725Infrastructureascode slideshare-160331143725
Infrastructureascode slideshare-160331143725
MortazaJohari25 views
Infrastructure as code: running microservices on AWS using Docker, Terraform,... by Yevgeniy Brikman
Infrastructure as code: running microservices on AWS using Docker, Terraform,...Infrastructure as code: running microservices on AWS using Docker, Terraform,...
Infrastructure as code: running microservices on AWS using Docker, Terraform,...
Yevgeniy Brikman177.5K views
Symfony 2.0 by GrUSP
Symfony 2.0Symfony 2.0
Symfony 2.0
GrUSP1K views
(1) cpp introducing the_cpp_programming_language by Nico Ludwig
(1) cpp introducing the_cpp_programming_language(1) cpp introducing the_cpp_programming_language
(1) cpp introducing the_cpp_programming_language
Nico Ludwig722 views
55j7 by swein2
55j755j7
55j7
swein22.7K views
Making Exceptions on Exception Handling (WEH 2012 Keynote Speech) by Tao Xie
Making Exceptions on  Exception Handling (WEH 2012 Keynote Speech)Making Exceptions on  Exception Handling (WEH 2012 Keynote Speech)
Making Exceptions on Exception Handling (WEH 2012 Keynote Speech)
Tao Xie1.3K views
Design Summit - Migrating to Ruby 2 - Joe Rafaniello by ManageIQ
Design Summit - Migrating to Ruby 2 - Joe RafanielloDesign Summit - Migrating to Ruby 2 - Joe Rafaniello
Design Summit - Migrating to Ruby 2 - Joe Rafaniello
ManageIQ1.5K views
The why and how of moving to php 7 by Wim Godden
The why and how of moving to php 7The why and how of moving to php 7
The why and how of moving to php 7
Wim Godden232 views
Release responsibly (Maintaining Backwards Compatibility) by Emily Stolfo
Release responsibly (Maintaining Backwards Compatibility)Release responsibly (Maintaining Backwards Compatibility)
Release responsibly (Maintaining Backwards Compatibility)
Emily Stolfo1.9K views
TDC2016POA | Trilha Ruby - Stack Level too Deep e Tail Call Optimization: É u... by tdc-globalcode
TDC2016POA | Trilha Ruby - Stack Level too Deep e Tail Call Optimization: É u...TDC2016POA | Trilha Ruby - Stack Level too Deep e Tail Call Optimization: É u...
TDC2016POA | Trilha Ruby - Stack Level too Deep e Tail Call Optimization: É u...
tdc-globalcode367 views
Parallel Ruby: Managing the Memory Monster by Kevin Miller
Parallel Ruby: Managing the Memory MonsterParallel Ruby: Managing the Memory Monster
Parallel Ruby: Managing the Memory Monster
Kevin Miller296 views
Fisl - Deployment by Fabio Akita
Fisl - DeploymentFisl - Deployment
Fisl - Deployment
Fabio Akita934 views
Cloud meets Fog & Puppet A Story of Version Controlled Infrastructure by Habeeb Rahman
Cloud meets Fog & Puppet A Story of Version Controlled InfrastructureCloud meets Fog & Puppet A Story of Version Controlled Infrastructure
Cloud meets Fog & Puppet A Story of Version Controlled Infrastructure
Habeeb Rahman3.3K views

More from nagachika t

Make Ruby Differentiable by
Make Ruby DifferentiableMake Ruby Differentiable
Make Ruby Differentiablenagachika t
2.3K views14 slides
Inspection of CloudML Hyper Parameter Tuning by
Inspection of CloudML Hyper Parameter TuningInspection of CloudML Hyper Parameter Tuning
Inspection of CloudML Hyper Parameter Tuningnagachika t
2.4K views55 slides
Functional Music Composition by
Functional Music CompositionFunctional Music Composition
Functional Music Compositionnagachika t
1.2K views32 slides
BigQuery case study in Groovenauts & Dive into the DataflowJavaSDK by
BigQuery case study in Groovenauts & Dive into the DataflowJavaSDKBigQuery case study in Groovenauts & Dive into the DataflowJavaSDK
BigQuery case study in Groovenauts & Dive into the DataflowJavaSDKnagachika t
3.3K views68 slides
Magellan on Google Cloud Platform by
Magellan on Google Cloud PlatformMagellan on Google Cloud Platform
Magellan on Google Cloud Platformnagachika t
1.5K views19 slides
CRuby Committers Who's Who in 2013 by
CRuby Committers Who's Who in 2013CRuby Committers Who's Who in 2013
CRuby Committers Who's Who in 2013nagachika t
1.2K views56 slides

More from nagachika t(14)

Make Ruby Differentiable by nagachika t
Make Ruby DifferentiableMake Ruby Differentiable
Make Ruby Differentiable
nagachika t2.3K views
Inspection of CloudML Hyper Parameter Tuning by nagachika t
Inspection of CloudML Hyper Parameter TuningInspection of CloudML Hyper Parameter Tuning
Inspection of CloudML Hyper Parameter Tuning
nagachika t2.4K views
Functional Music Composition by nagachika t
Functional Music CompositionFunctional Music Composition
Functional Music Composition
nagachika t1.2K views
BigQuery case study in Groovenauts & Dive into the DataflowJavaSDK by nagachika t
BigQuery case study in Groovenauts & Dive into the DataflowJavaSDKBigQuery case study in Groovenauts & Dive into the DataflowJavaSDK
BigQuery case study in Groovenauts & Dive into the DataflowJavaSDK
nagachika t3.3K views
Magellan on Google Cloud Platform by nagachika t
Magellan on Google Cloud PlatformMagellan on Google Cloud Platform
Magellan on Google Cloud Platform
nagachika t1.5K views
CRuby Committers Who's Who in 2013 by nagachika t
CRuby Committers Who's Who in 2013CRuby Committers Who's Who in 2013
CRuby Committers Who's Who in 2013
nagachika t1.2K views
CRuby_Committers_Whos_Who_in_2014 by nagachika t
CRuby_Committers_Whos_Who_in_2014CRuby_Committers_Whos_Who_in_2014
CRuby_Committers_Whos_Who_in_2014
nagachika t1.4K views
怠惰なRubyistへの道 fukuoka rubykaigi01 by nagachika t
怠惰なRubyistへの道 fukuoka rubykaigi01怠惰なRubyistへの道 fukuoka rubykaigi01
怠惰なRubyistへの道 fukuoka rubykaigi01
nagachika t865 views
Ruby on azure で game server service by nagachika t
Ruby on azure で game server serviceRuby on azure で game server service
Ruby on azure で game server service
nagachika t1.6K views
怠惰なRubyistへの道 by nagachika t
怠惰なRubyistへの道怠惰なRubyistへの道
怠惰なRubyistへの道
nagachika t1.3K views
Ruby Kaja のご提案 by nagachika t
Ruby Kaja のご提案Ruby Kaja のご提案
Ruby Kaja のご提案
nagachika t934 views
Ruby trunk changes 統計版 by nagachika t
Ruby trunk changes 統計版Ruby trunk changes 統計版
Ruby trunk changes 統計版
nagachika t868 views
Pd Kai#3 Startup Process by nagachika t
Pd Kai#3 Startup ProcessPd Kai#3 Startup Process
Pd Kai#3 Startup Process
nagachika t943 views
Pd Kai#2 Object Model by nagachika t
Pd Kai#2 Object ModelPd Kai#2 Object Model
Pd Kai#2 Object Model
nagachika t539 views

Recently uploaded

Igniting Next Level Productivity with AI-Infused Data Integration Workflows by
Igniting Next Level Productivity with AI-Infused Data Integration Workflows Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration Workflows Safe Software
344 views86 slides
PharoJS - Zürich Smalltalk Group Meetup November 2023 by
PharoJS - Zürich Smalltalk Group Meetup November 2023PharoJS - Zürich Smalltalk Group Meetup November 2023
PharoJS - Zürich Smalltalk Group Meetup November 2023Noury Bouraqadi
141 views17 slides
NTGapps NTG LowCode Platform by
NTGapps NTG LowCode Platform NTGapps NTG LowCode Platform
NTGapps NTG LowCode Platform Mustafa Kuğu
141 views30 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
111 views13 slides
HTTP headers that make your website go faster - devs.gent November 2023 by
HTTP headers that make your website go faster - devs.gent November 2023HTTP headers that make your website go faster - devs.gent November 2023
HTTP headers that make your website go faster - devs.gent November 2023Thijs Feryn
28 views151 slides
DRBD Deep Dive - Philipp Reisner - LINBIT by
DRBD Deep Dive - Philipp Reisner - LINBITDRBD Deep Dive - Philipp Reisner - LINBIT
DRBD Deep Dive - Philipp Reisner - LINBITShapeBlue
62 views21 slides

Recently uploaded(20)

Igniting Next Level Productivity with AI-Infused Data Integration Workflows by Safe Software
Igniting Next Level Productivity with AI-Infused Data Integration Workflows Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Safe Software344 views
PharoJS - Zürich Smalltalk Group Meetup November 2023 by Noury Bouraqadi
PharoJS - Zürich Smalltalk Group Meetup November 2023PharoJS - Zürich Smalltalk Group Meetup November 2023
PharoJS - Zürich Smalltalk Group Meetup November 2023
Noury Bouraqadi141 views
NTGapps NTG LowCode Platform by Mustafa Kuğu
NTGapps NTG LowCode Platform NTGapps NTG LowCode Platform
NTGapps NTG LowCode Platform
Mustafa Kuğu141 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
ShapeBlue111 views
HTTP headers that make your website go faster - devs.gent November 2023 by Thijs Feryn
HTTP headers that make your website go faster - devs.gent November 2023HTTP headers that make your website go faster - devs.gent November 2023
HTTP headers that make your website go faster - devs.gent November 2023
Thijs Feryn28 views
DRBD Deep Dive - Philipp Reisner - LINBIT by ShapeBlue
DRBD Deep Dive - Philipp Reisner - LINBITDRBD Deep Dive - Philipp Reisner - LINBIT
DRBD Deep Dive - Philipp Reisner - LINBIT
ShapeBlue62 views
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT by ShapeBlue
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBITUpdates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT
ShapeBlue91 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...
ShapeBlue82 views
Transitioning from VMware vCloud to Apache CloudStack: A Path to Profitabilit... by ShapeBlue
Transitioning from VMware vCloud to Apache CloudStack: A Path to Profitabilit...Transitioning from VMware vCloud to Apache CloudStack: A Path to Profitabilit...
Transitioning from VMware vCloud to Apache CloudStack: A Path to Profitabilit...
ShapeBlue57 views
Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda... by ShapeBlue
Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda...Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda...
Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda...
ShapeBlue63 views
Business Analyst Series 2023 - Week 3 Session 5 by DianaGray10
Business Analyst Series 2023 -  Week 3 Session 5Business Analyst Series 2023 -  Week 3 Session 5
Business Analyst Series 2023 - Week 3 Session 5
DianaGray10369 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
ShapeBlue46 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 ...
ShapeBlue65 views
Five Things You SHOULD Know About Postman by Postman
Five Things You SHOULD Know About PostmanFive Things You SHOULD Know About Postman
Five Things You SHOULD Know About Postman
Postman40 views
KVM Security Groups Under the Hood - Wido den Hollander - Your.Online by ShapeBlue
KVM Security Groups Under the Hood - Wido den Hollander - Your.OnlineKVM Security Groups Under the Hood - Wido den Hollander - Your.Online
KVM Security Groups Under the Hood - Wido den Hollander - Your.Online
ShapeBlue102 views
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ... by Jasper Oosterveld
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...

All bugfixes are incompatibilities

  • 1. 2019-04-19 All bug-fixes are incompatibilities nagachika @ RubyKaigi 2019
  • 2. Important Notification about RubyGems.org The attackers try to hijack your account with compromised password list. Example: bootstrap-sass was compromised by this attack. It was injected the vulnerable RCE code. We should prepare the multi-factor authentication on RubyGems.org for protecting from them.
  • 3. ✤ @nagachika ✤ CRuby committer ✤ CRuby stable branch maintainer (2.5 → 2.6) ✤ ruby trunk changes ✤ Fukuoka.rb/TFUG Fukuoka WHO AM I
  • 4. ✤ @nagachika ✤ CRuby committer ✤ CRuby stable branch maintainer (2.5 → 2.6) ✤ ruby trunk changes ✤ Fukuoka.rb/TFUG Fukuoka WHO AM I
  • 5. “What’s the Ruby’s
 stable branch maintenance?”
  • 6. ✤ We backport fixes into stable branches from trunk Ruby’s stable branch model EoL ruby_2_2 ruby_2_5 ruby_2_6 backport trunk bugfix
  • 7. ✤ We backport fixes into stable branches from trunk Ruby’s stable branch model nurse unak Release
 Manager Stable
 Branch
 Maintainer EoL ruby_2_2 ruby_2_5 ruby_2_6 backport trunk bugfix nagachika
  • 8. ✤ Backport bug-fixes from trunk into stable branches ✤ Release stable packages. ✤ Handle security issues in concert with stakeholders. Stable Branch Maintainer
  • 9. ✤ Backport bug-fixes from trunk into stable branches ✤ Release stable packages ✤ Handle security issues in concert with stakeholders Stable Branch Maintainer
  • 10. ✤ Watch commits on trunk. ✤ Backport bug-fixes. Stable Branch Maintainer’s daily work
  • 11. ✤ Watch commits on trunk
 → Watch backport requests on Redmine. ✤ Backport bug-fixes. Stable Branch Maintainer’s daily work
  • 12. ✤ Redmine: bugs.ruby-lang.org Ruby’s stable maintenance policy
  • 13. ✤ File tickets with rubyʼs version information Ruby’s stable maintenance policy
  • 14. ✤ You can maintain only one stable branch at once. Ruby’s stable branch model nurse nagachika unak Release
 Manager Stable
 Branch
 Maintainer EoL ruby_2_2 ruby_2_5 ruby_2_6 backport trunk bugfix
  • 15. “How can I become a Ruby stable maintainer?”
  • 16. Requirements for Stable Branch Maintainers
  • 17. ✤ Wide understandings for the Ruby implementation ✤ Sustainability to some extent ✤ Understanding maintenance policy Requirements for Stable Branch Maintainers
  • 18. ✤ Backport bug-fixes ✤ Donʼt backport new features/spec changes Ruby’s maintenance policy stable trunk bug-fix new feature
  • 19. IO.read could execute a command IO.read(“|cmd…”) executes the command (same as Kernel#open)
  • 22. % ruby -ve 'puts File.read("|echo foo")' ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-darwin15] foo % ruby -ve 'puts File.read("|echo foo")' ruby 2.5.4p155 (2019-03-13 revision 67245) [x86_64-darwin15] -e:1: warning: IO.read called on File to invoke external command foo % ruby -ve 'puts File.read("|echo foo")' ruby 2.6.2p47 (2019-03-13 revision 67232) [x86_64-darwin15] Traceback (most recent call last): 1: from -e:1:in `<main>' -e:1:in `read': No such file or directory @ rb_sysopen - |echo foo (Errno::ENOENT) IO.read and File.read
  • 23. ✤ 2.0.0: 469 ✤ 2.1: 250 ✤ 2.2: 205 ✤ 2.3: 217 ✤ 2.4: 190 ✤ 2.5: 101 Backport commits by nagachika
  • 24. ✤ 2.0.0: 469 ✤ 2.1: 250 ✤ 2.2: 205 ✤ 2.3: 217 ✤ 2.4: 190 ✤ 2.5: 101 Backport commits by nagachika include Documentation, performance improvement, memory usage improvement…
  • 28. ✤ The change broke CI on mswin Backport performance improvements
  • 29. ✤ The lesson learned ✤ Donʼt backport performance improvements Backport performance improvements
  • 33. ✤ The lesson learned ✤ Bug-fixes for Method/Constants search in edge cases sometimes introduce another memory violation. ✤ Fixing a minor bug can introduce severe bugs Backport introduced memory violation
  • 36. ✤ The lesson learned ✤ “Refinements” is not a matured feature and continue expanding its scope of adaptation. ✤ Deal it carefully. Refinements
  • 37. Fixing SyntaxError caused another SyntaxError
  • 38. Fixing SyntaxError caused another SyntaxError
  • 39. Fixing SyntaxError caused another SyntaxError
  • 40. cond ? expr1 :expr2 Fixing SyntaxError caused another SyntaxError { key:(expr rescue nil) } { key:<<EOF } EOF
  • 41. ✤ The lesson learned ✤ parse.y is “魔境” (mass of legendary complexity) ✤ SyntaxError is the one of the most severe issues ✤ Monkey patching cannot get rid of SyntaxError Fixing SyntaxError caused another SyntaxError
  • 42. Fixing SyntaxError caused another SyntaxError(2)
  • 43. Fixing SyntaxError caused another SyntaxError(2)
  • 44. Fixing SyntaxError caused another SyntaxError(2)
  • 45. def foo key1: … end Fixing SyntaxError caused another SyntaxError(2) { key:if foo then 1 else 0 }
  • 46. ✤ The lesson learned(?) ✤ Fixing the SyntaxError introduced another SyntaxError in the more rare case ✤ But the prior SyntaxError was in the new syntax
 (Mandatory keyword arguments) ✤ There was maybe no real application affected by the prior SyntaxError. Fixing SyntaxError caused another SyntaxError(2)
  • 47. Fixing SyntaxError caused another SyntaxError(3)
  • 48. Fixing SyntaxError caused another SyntaxError(3)
  • 49. Fixing SyntaxError caused another SyntaxError(3)
  • 50. ✤ The lesson learned ✤ parse.y is “魔境” ✤ Long-standing bugs have less priority
 → “Long-standing” means thereʼs no real application affected ✤ “Known bug” can be better than “Regression” Fixing SyntaxError caused another SyntaxError(3)
  • 52. ✤ Release GVL during open fd for `load` Load FIFO
  • 53. ✤ Performance degradation of YAML.parse on
 multi-threads environments Load FIFO
  • 54. ✤ The lesson learned ✤ Donʼt backport bug-fixes for imaginary use case.
 No one wanted to load from FIFO! Load FIFO
  • 55. ✤ Donʼt backport performance improvements ✤ Donʼt backport fix for the long-standing bugs ✤ Donʼt jump at the fix in parse.y, constants/ methods search and refinements ✤ Donʼt backport fixes on one wanted to backport The Lessons Learned from failures
  • 56. ✤ Be-Practical! The Lessons Learned from failures