SlideShare a Scribd company logo
1 of 56
Download to read offline
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
✤ 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

More Related Content

What's hot

I/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 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
 
도커 없이 컨테이너 만들기 4편 네트워크네임스페이스 (2)
도커 없이 컨테이너 만들기 4편 네트워크네임스페이스 (2)도커 없이 컨테이너 만들기 4편 네트워크네임스페이스 (2)
도커 없이 컨테이너 만들기 4편 네트워크네임스페이스 (2)Sam Kim
 
Profiling and optimizing go programs
Profiling and optimizing go programsProfiling and optimizing go programs
Profiling and optimizing go programsBadoo Development
 
Make container without_docker_6-overlay-network_1
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
 
Building an inflight entertainment system controller in twisted
Building an inflight entertainment system controller in twistedBuilding an inflight entertainment system controller in twisted
Building an inflight entertainment system controller in twistedDavid Novakovic
 
Node.js Event Loop & EventEmitter
Node.js Event Loop & EventEmitterNode.js Event Loop & EventEmitter
Node.js Event Loop & EventEmitterSimen Li
 
nouka inventry manager
nouka inventry managernouka inventry manager
nouka inventry managerToshiaki Baba
 
Connecting to the network
Connecting to the networkConnecting to the network
Connecting to the networkMu Chun Wang
 
Fluentd v0.12 master guide
Fluentd v0.12 master guideFluentd v0.12 master guide
Fluentd v0.12 master guideN Masahiro
 
Akmal Khaleeq Waheed - Challenge 3 p2
Akmal Khaleeq Waheed - Challenge 3 p2Akmal Khaleeq Waheed - Challenge 3 p2
Akmal Khaleeq Waheed - Challenge 3 p2tovmug
 
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,...
Big Data Day LA 2016/ Big Data Track - Fluentd and Embulk: Collect More Data,...Data Con LA
 

What's hot (20)

I/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 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
 
도커 없이 컨테이너 만들기 4편 네트워크네임스페이스 (2)
도커 없이 컨테이너 만들기 4편 네트워크네임스페이스 (2)도커 없이 컨테이너 만들기 4편 네트워크네임스페이스 (2)
도커 없이 컨테이너 만들기 4편 네트워크네임스페이스 (2)
 
Profiling and optimizing go programs
Profiling and optimizing go programsProfiling and optimizing go programs
Profiling and optimizing go programs
 
skipfish
skipfishskipfish
skipfish
 
Make container without_docker_6-overlay-network_1
Make container without_docker_6-overlay-network_1 Make container without_docker_6-overlay-network_1
Make container without_docker_6-overlay-network_1
 
Building an inflight entertainment system controller in twisted
Building an inflight entertainment system controller in twistedBuilding an inflight entertainment system controller in twisted
Building an inflight entertainment system controller in twisted
 
Node.js Event Loop & EventEmitter
Node.js Event Loop & EventEmitterNode.js Event Loop & EventEmitter
Node.js Event Loop & EventEmitter
 
nouka inventry manager
nouka inventry managernouka inventry manager
nouka inventry manager
 
Hands-on ethernet driver
Hands-on ethernet driverHands-on ethernet driver
Hands-on ethernet driver
 
tit
tittit
tit
 
Laravel Day / Deploy
Laravel Day / DeployLaravel Day / Deploy
Laravel Day / Deploy
 
Connecting to the network
Connecting to the networkConnecting to the network
Connecting to the network
 
Os Cook
Os CookOs Cook
Os Cook
 
Fluentd v0.12 master guide
Fluentd v0.12 master guideFluentd v0.12 master guide
Fluentd v0.12 master guide
 
Akmal Khaleeq Waheed - Challenge 3 p2
Akmal Khaleeq Waheed - Challenge 3 p2Akmal Khaleeq Waheed - Challenge 3 p2
Akmal Khaleeq Waheed - Challenge 3 p2
 
One Click Ownage
One Click OwnageOne Click Ownage
One Click Ownage
 
Perl6 web-app
Perl6 web-appPerl6 web-app
Perl6 web-app
 
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,...
Big Data Day LA 2016/ Big Data Track - Fluentd and Embulk: Collect More Data,...
 
Reactive Java (GeeCON 2014)
Reactive Java (GeeCON 2014)Reactive Java (GeeCON 2014)
Reactive Java (GeeCON 2014)
 
Introduction to Reactive Java
Introduction to Reactive JavaIntroduction to Reactive Java
Introduction to Reactive Java
 

Similar to All bugfixes are incompatibilities

Low Level Exploits
Low Level ExploitsLow Level Exploits
Low Level Exploitshughpearse
 
Road to sbt 1.0 paved with server
Road to sbt 1.0   paved with serverRoad to sbt 1.0   paved with server
Road to sbt 1.0 paved with serverEugene Yokota
 
Infrastructureascode slideshare-160331143725
Infrastructureascode slideshare-160331143725Infrastructureascode slideshare-160331143725
Infrastructureascode slideshare-160331143725miguel dominguez
 
Infrastructureascode slideshare-160331143725
Infrastructureascode slideshare-160331143725Infrastructureascode slideshare-160331143725
Infrastructureascode slideshare-160331143725MortazaJohari
 
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,...
Infrastructure as code: running microservices on AWS using Docker, Terraform,...Yevgeniy Brikman
 
Symfony 2.0
Symfony 2.0Symfony 2.0
Symfony 2.0GrUSP
 
(1) cpp introducing the_cpp_programming_language
(1) cpp introducing the_cpp_programming_language(1) cpp introducing the_cpp_programming_language
(1) cpp introducing the_cpp_programming_languageNico Ludwig
 
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)
Making Exceptions on Exception Handling (WEH 2012 Keynote Speech)Tao Xie
 
Design Summit - Migrating to Ruby 2 - Joe Rafaniello
Design Summit - Migrating to Ruby 2 - Joe RafanielloDesign Summit - Migrating to Ruby 2 - Joe Rafaniello
Design Summit - Migrating to Ruby 2 - Joe RafanielloManageIQ
 
The why and how of moving to php 7
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 7Wim Godden
 
Release responsibly (Maintaining Backwards Compatibility)
Release responsibly (Maintaining Backwards Compatibility)Release responsibly (Maintaining Backwards Compatibility)
Release responsibly (Maintaining Backwards Compatibility)Emily Stolfo
 
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...
TDC2016POA | Trilha Ruby - Stack Level too Deep e Tail Call Optimization: É u...tdc-globalcode
 
Parallel Ruby: Managing the Memory Monster
Parallel Ruby: Managing the Memory MonsterParallel Ruby: Managing the Memory Monster
Parallel Ruby: Managing the Memory MonsterKevin Miller
 
Fisl - Deployment
Fisl - DeploymentFisl - Deployment
Fisl - DeploymentFabio Akita
 
Cloud meets Fog & Puppet A Story of Version Controlled Infrastructure
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 InfrastructureHabeeb Rahman
 

Similar to All bugfixes are incompatibilities (20)

Low Level Exploits
Low Level ExploitsLow Level Exploits
Low Level Exploits
 
New features in Ruby 2.5
New features in Ruby 2.5New features in Ruby 2.5
New features in Ruby 2.5
 
Road to sbt 1.0 paved with server
Road to sbt 1.0   paved with serverRoad to sbt 1.0   paved with server
Road to sbt 1.0 paved with server
 
Infrastructureascode slideshare-160331143725
Infrastructureascode slideshare-160331143725Infrastructureascode slideshare-160331143725
Infrastructureascode slideshare-160331143725
 
Infrastructureascode slideshare-160331143725
Infrastructureascode slideshare-160331143725Infrastructureascode slideshare-160331143725
Infrastructureascode slideshare-160331143725
 
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,...
Infrastructure as code: running microservices on AWS using Docker, Terraform,...
 
Symfony 2 (PHP day 2009)
Symfony 2 (PHP day 2009)Symfony 2 (PHP day 2009)
Symfony 2 (PHP day 2009)
 
Symfony 2.0
Symfony 2.0Symfony 2.0
Symfony 2.0
 
(1) cpp introducing the_cpp_programming_language
(1) cpp introducing the_cpp_programming_language(1) cpp introducing the_cpp_programming_language
(1) cpp introducing the_cpp_programming_language
 
55j7
55j755j7
55j7
 
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)
Making Exceptions on Exception Handling (WEH 2012 Keynote Speech)
 
Design Summit - Migrating to Ruby 2 - Joe Rafaniello
Design Summit - Migrating to Ruby 2 - Joe RafanielloDesign Summit - Migrating to Ruby 2 - Joe Rafaniello
Design Summit - Migrating to Ruby 2 - Joe Rafaniello
 
Fabric Fast & Furious edition
Fabric Fast & Furious editionFabric Fast & Furious edition
Fabric Fast & Furious edition
 
The why and how of moving to php 7
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
 
Release responsibly (Maintaining Backwards Compatibility)
Release responsibly (Maintaining Backwards Compatibility)Release responsibly (Maintaining Backwards Compatibility)
Release responsibly (Maintaining Backwards Compatibility)
 
Concurrency in ruby
Concurrency in rubyConcurrency in ruby
Concurrency in ruby
 
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...
TDC2016POA | Trilha Ruby - Stack Level too Deep e Tail Call Optimization: É u...
 
Parallel Ruby: Managing the Memory Monster
Parallel Ruby: Managing the Memory MonsterParallel Ruby: Managing the Memory Monster
Parallel Ruby: Managing the Memory Monster
 
Fisl - Deployment
Fisl - DeploymentFisl - Deployment
Fisl - Deployment
 
Cloud meets Fog & Puppet A Story of Version Controlled Infrastructure
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
 

More from nagachika t

Make Ruby Differentiable
Make Ruby DifferentiableMake Ruby Differentiable
Make Ruby Differentiablenagachika t
 
Inspection of CloudML Hyper Parameter Tuning
Inspection of CloudML Hyper Parameter TuningInspection of CloudML Hyper Parameter Tuning
Inspection of CloudML Hyper Parameter Tuningnagachika t
 
Functional Music Composition
Functional Music CompositionFunctional Music Composition
Functional Music Compositionnagachika t
 
BigQuery case study in Groovenauts & Dive into the DataflowJavaSDK
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
 
Magellan on Google Cloud Platform
Magellan on Google Cloud PlatformMagellan on Google Cloud Platform
Magellan on Google Cloud Platformnagachika t
 
CRuby Committers Who's Who in 2013
CRuby Committers Who's Who in 2013CRuby Committers Who's Who in 2013
CRuby Committers Who's Who in 2013nagachika t
 
CRuby_Committers_Whos_Who_in_2014
CRuby_Committers_Whos_Who_in_2014CRuby_Committers_Whos_Who_in_2014
CRuby_Committers_Whos_Who_in_2014nagachika t
 
怠惰なRubyistへの道 fukuoka rubykaigi01
怠惰なRubyistへの道 fukuoka rubykaigi01怠惰なRubyistへの道 fukuoka rubykaigi01
怠惰なRubyistへの道 fukuoka rubykaigi01nagachika t
 
Ruby on azure で game server service
Ruby on azure で game server serviceRuby on azure で game server service
Ruby on azure で game server servicenagachika t
 
怠惰なRubyistへの道
怠惰なRubyistへの道怠惰なRubyistへの道
怠惰なRubyistへの道nagachika t
 
Ruby Kaja のご提案
Ruby Kaja のご提案Ruby Kaja のご提案
Ruby Kaja のご提案nagachika t
 
Ruby trunk changes 統計版
Ruby trunk changes 統計版Ruby trunk changes 統計版
Ruby trunk changes 統計版nagachika t
 
Pd Kai#3 Startup Process
Pd Kai#3 Startup ProcessPd Kai#3 Startup Process
Pd Kai#3 Startup Processnagachika t
 
Pd Kai#2 Object Model
Pd Kai#2 Object ModelPd Kai#2 Object Model
Pd Kai#2 Object Modelnagachika t
 

More from nagachika t (14)

Make Ruby Differentiable
Make Ruby DifferentiableMake Ruby Differentiable
Make Ruby Differentiable
 
Inspection of CloudML Hyper Parameter Tuning
Inspection of CloudML Hyper Parameter TuningInspection of CloudML Hyper Parameter Tuning
Inspection of CloudML Hyper Parameter Tuning
 
Functional Music Composition
Functional Music CompositionFunctional Music Composition
Functional Music Composition
 
BigQuery case study in Groovenauts & Dive into the DataflowJavaSDK
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
 
Magellan on Google Cloud Platform
Magellan on Google Cloud PlatformMagellan on Google Cloud Platform
Magellan on Google Cloud Platform
 
CRuby Committers Who's Who in 2013
CRuby Committers Who's Who in 2013CRuby Committers Who's Who in 2013
CRuby Committers Who's Who in 2013
 
CRuby_Committers_Whos_Who_in_2014
CRuby_Committers_Whos_Who_in_2014CRuby_Committers_Whos_Who_in_2014
CRuby_Committers_Whos_Who_in_2014
 
怠惰なRubyistへの道 fukuoka rubykaigi01
怠惰なRubyistへの道 fukuoka rubykaigi01怠惰なRubyistへの道 fukuoka rubykaigi01
怠惰なRubyistへの道 fukuoka rubykaigi01
 
Ruby on azure で game server service
Ruby on azure で game server serviceRuby on azure で game server service
Ruby on azure で game server service
 
怠惰なRubyistへの道
怠惰なRubyistへの道怠惰なRubyistへの道
怠惰なRubyistへの道
 
Ruby Kaja のご提案
Ruby Kaja のご提案Ruby Kaja のご提案
Ruby Kaja のご提案
 
Ruby trunk changes 統計版
Ruby trunk changes 統計版Ruby trunk changes 統計版
Ruby trunk changes 統計版
 
Pd Kai#3 Startup Process
Pd Kai#3 Startup ProcessPd Kai#3 Startup Process
Pd Kai#3 Startup Process
 
Pd Kai#2 Object Model
Pd Kai#2 Object ModelPd Kai#2 Object Model
Pd Kai#2 Object Model
 

Recently uploaded

2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesBoston Institute of Analytics
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 

Recently uploaded (20)

2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 

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…
  • 27.
  • 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