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
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
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)
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
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
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)
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)
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