From: "peterzhu2118 (Peter Zhu)" Date: 2022-02-17T16:39:53+00:00 Subject: [ruby-core:107642] [Ruby master Bug#18249] The ABI version of dev builds of CRuby does not correspond to the ABI Issue #18249 has been updated by peterzhu2118 (Peter Zhu). I'm not sure if I agree with the approach of using a pre-commit hook. AFAIK pre-commit hooks are not automatically installed (every developer has to manually install it), so most people will probably not install it. If we check on CI, if people who commit directly to the master branch forget to update the ABI hash they will get a CI failure and we'll get extra commits with the sole purpose of updating the ABI hash. On the other hand, if we don't check it on CI, then it will probably go out of sync very quickly. ---------------------------------------- Bug #18249: The ABI version of dev builds of CRuby does not correspond to the ABI https://bugs.ruby-lang.org/issues/18249#change-96554 * Author: Eregon (Benoit Daloze) * Status: Open * Priority: Normal * Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN ---------------------------------------- In fact, it even conflicts with the next release's ABI version: ``` $ ruby -ve 'p RbConfig::CONFIG["ruby_version"]' ruby 3.1.0dev (2021-10-11T10:13:16Z master 0c3ac87345) [x86_64-linux] "3.1.0" ``` This mismatch can very easily result in segfaults, memory corruption, etc when using dev versions of CRuby, or when using a dev version and then later the release. Possible solutions: * Include the git commit sha in the ABI. Pros: always correct and simple. Cons: changing more then necessary. * Track the ABI explicitly, and bump it whenever the ABI changes. Pros: changes only when needed. Cons: easy to forget bumping it, and if checked in CI already too late. From https://bugs.ruby-lang.org/issues/18239#note-14: FWIW TruffleRuby actually tracks the ABI of dev versions through [this file](https://github.com/oracle/truffleruby/blob/master/lib/cext/ABI_version.txt) which means it is possible to sensibly cache compiled gems even for dev versions [details](https://github.com/oracle/truffleruby/issues/2284). Also it [stores](https://github.com/oracle/truffleruby/commit/d497bae73fdc60585b66cd183768a16563b2886b) the ABI version in .so/.bundle files and checks them when loading, so it can be sure the ABI used to compile and runtime ABI match (if not, an exception is raised). ruby/setup-ruby has no choice for CRuby dev but [to use the commit](https://github.com/ruby/setup-ruby/blob/a6f22865941e122a37e097fbded3dd0b54c39207/bundler.js#L188) as the ABI version. This issue is made worse by Ruby switchers like RVM & chruby setting GEM_HOME (so the ABI is effectively ignored by RubyGems in those cases, and those directories need to be cleaned manually). When GEM_HOME is not set, it would be enough to rebuild CRuby dev and remove the directory before installing (which includes both CRuby & gems), but Ruby installers don't do that yet. Bundler always includes the ABI version when setting the bundler path (`bundle config --local path`), but if the ABI version is incorrect like for CRuby dev it's of no use. -- https://bugs.ruby-lang.org/ Unsubscribe: