Cursed Bundler: Using go get to install Ruby Gems
5 months ago
- #package-management
- #ruby
- #go
- Ruby可以通过将GOPATH设置为Ruby加载路径,使用Go的模块获取器作为传输层。
- Go的导入路径约定具有自描述性,包含托管域名、组织和仓库信息,这与集中式包管理器不同。
- Go使用proxy.golang.org和sum.golang.org进行缓存和密码学哈希,确保完整性和可审计性。
- Ruby gems可以通过添加go.mod文件利用Go的基础设施,绕过RubyGems以获得更好的供应链完整性。
- 这种设置中的依赖关系解析将镜像Bundler的逻辑,但使用Go的获取和完整性检查。
- Go的最小版本选择(MVS)确保可预测性,而Bundler则倾向于使用最新版本。
- Ruby gems中的原生扩展是一个限制,因为Go期望源代码或预编译的二进制文件。
- Deno尝试URL导入时面临与Go方法类似的权衡,最终退回到传统注册表。
- 自描述路径消除了注册表查找,但冗长,而短名称符合人体工程学但容易被抢注。
- 这个思想实验表明,包管理器可以共享一个内容寻址、透明日志记录的分发层。
- Go的模块系统意外地具有通用性,可以记录任何内容的哈希,包括Ruby文件。
- 该实验突出了包管理器的基本组件,并质疑哪些组件可以在生态系统之间共享。