Bug #21855
closedBundle `win32-registry` or implement it without `fiddle`
Description
win32-registry (a default gem), is currently implemented via fiddle (a bundled gem). This makes it impossible to use under bundler without adding fiddle to the gemfile.
In the past it has lead to issues like https://bugs.ruby-lang.org/issues/21645. It was solved by simply not using win32-registry anymore in resolv and implementing it via C (https://github.com/ruby/resolv/pull/110), although the overarching issue is still present. There is also a report for this for rubygems https://github.com/ruby/rubygems/issues/9277. This should be solved by updating the vendored resolv version I think.
Still, the dependecy relation between win32-registry and fiddle is pretty incompatible. A default gem can't depend on a bundled gem without breaking dependency resolution.
To solve this it would have to be implemented without using fiddle, similar to how resolv did it. But now that resolv doesn't use win32-registry, I don't think anything in ruby uses it anymore. So moving it to a bundled gem could also be a solution without rewriting the whole thing.
Here is an issue about this in the win32-registry repo: https://github.com/ruby/win32-registry/issues/11
Updated by Earlopain (Earlopain _) 24 days ago
- Related to Bug #21645: Can't `require "resolve"` on Windows under Bundler without warnings added
Updated by Earlopain (Earlopain _) 24 days ago
- Related to Feature #20775: Gemify win32-registry, win32-sspi and win32-resolv added
Updated by Earlopain (Earlopain _) 24 days ago
- Related to Feature #20309: Bundled gems for Ruby 3.5 added
Updated by larskanis (Lars Kanis) 21 days ago
I recommended to make win32-registry a bundled gem in #20775, but maybe it was forgotten to that time. I still think this would be the best solution.
Updated by hsbt (Hiroshi SHIBATA) 11 days ago
- Status changed from Open to Assigned
No one opposed it at devmeeting. I will ask usa and handle to extract that as bundled gems at Ruby 4.1.
Updated by larskanis (Lars Kanis) 6 days ago
Updated by hsbt (Hiroshi SHIBATA) 4 days ago
@usa (Usaku NAKAMURA) has no objection for that. I will merge https://bugs.ruby-lang.org/issues/21855#note-6 and handle related works.
Updated by larskanis (Lars Kanis) 4 days ago
- Status changed from Assigned to Closed
Applied in changeset git|f01f66ca249405ec125ba864e48e51944cc51c6f.
Move win32-registry from default to bundled gems
Because win32-registry needs fiddle and fiddle is a bundled gem.
[Bug #21855]
Updated by hsbt (Hiroshi SHIBATA) 4 days ago
- Assignee set to hsbt (Hiroshi SHIBATA)
Updated by larskanis (Lars Kanis) 3 days ago
Thanks for merging!
There is a second bug, that is fixed by making win32-registry a bundled gem: The gemspec of the default gem looks like so:
$ cat c:\Ruby40-arm\lib\ruby\gems\4.0.0\specifications\default\win32-registry-0.1.2.gemspec
# -*- encoding: utf-8 -*-
# stub: win32-registry 0.1.2 ruby lib
Gem::Specification.new do |s|
s.name = "win32-registry".freeze
s.version = "0.1.2".freeze
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
s.metadata = { "homepage_uri" => "https://github.com/ruby/win32-registry", "source_code_uri" => "https://github.com/ruby/win32-registry" } if s.respond_to? :metadata=
s.require_paths = ["lib".freeze]
s.authors = ["U.Nakamura".freeze]
s.bindir = "exe".freeze
s.date = "2026-01-13"
s.description = "Provides an interface to the Windows Registry in Ruby".freeze
s.email = ["usa@garbagecollect.jp".freeze]
s.files = ["lib/win32/registry.rb".freeze, "lib/win32/resolv.rb".freeze]
s.homepage = "https://github.com/ruby/win32-registry".freeze
s.required_ruby_version = Gem::Requirement.new(">= 2.6.0".freeze)
s.rubygems_version = "4.0.3".freeze
s.summary = "Provides an interface to the Windows Registry in Ruby".freeze
s.specification_version = 4
s.add_runtime_dependency(%q<fiddle>.freeze, ["~> 1.0".freeze])
end
The problem is, it contains a foreign file win32/revolv.rb:
s.files = ["lib/win32/registry.rb".freeze, "lib/win32/resolv.rb".freeze]
That leads to fetching the gemspec of win32-registry, although win32/resolv is required and although win32/resolv is independent from win32-registry since ruby-4.0. That leads to failures like here:
- https://github.com/ruby/rubygems/issues/9277#issue-3869290287 and
- https://github.com/ruby/rubygems/pull/9235/changes/e85c31f02a75ffeac73b4d491b8f989ff31c029e
So is could this commit be backported to ruby-4.0.x? If no: Do you think there are issues if I backport it specifically for RubyInstaller-4.0.2+?