Homebrew 的 maintainer 真的是有点魔怔了 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
xuegy
V2EX    程序员

Homebrew 的 maintainer 真的是有点魔怔了

  •  
  •   xuegy 130 天前 7861 次点击
    这是一个创建于 130 天前的主题,其中的信息可能已经有所发展或是发生改变。
    手滑 brew 更新了一把,结果 cmake 就挂了,一看直接大版本给干到了 4.0 。
    某位正常思维的老哥试图让他们把 3.x 加回来,被 maintainer 一顿批评教育: https://github.com/orgs/Homebrew/discussions/6058
    上一次类似的事情,就因为某个人提了一个稀奇古怪的 issue ,他们把 libomp 不声不响的变成 keg-only ,一堆科学计算软件都挂了。可能因为科学计算圈子太小,大家自己默默的重新适配了。
    这帮人得是魔怔到什么程度才敢得罪全体码农折腾 cmake 这种基础工具?
    49 条回复    2025-07-22 12:03:38 +08:00
    springz
        1
    springz  
       130 天前   4
    homebrew 这种就类似滚动发行版,始终是保持最新的。你可以换一个确定性的,比如 Nix 对 macOS 支持也不错。
    xuegy
        2
    xuegy  
    OP
       130 天前 via iPad
    @springz 软件可以滚动,工具链可不兴滚动,起码应该保留上一个大版本。
    yyfearth
        3
    yyfearth  
       130 天前
    其实也不奇怪 你看 NodeJS 和 Python 那一大堆 keg 每个人的需求不太一样
    不过 Homebrew 还是不会像 pip/uv/nvm/fnm 那样做多版本虚拟环境管理
    始终是保持最新也是正常的
    yyfearth
        4
    yyfearth  
       130 天前
    @xuegy homebrew 的构架一个包只能运行一个版本 其他就是 keg only
    除非你能说服他们用一个不同的名字 比如 cmake3 不过大概率不行
    而且就算不同名字了 其他依赖的工具链一样都不能用了

    但是这也是没办法的事情 大版本更新了 你一直停在老版本也不是个办法
    Homebrew 不是那种 deterministic 的包管理 可以处理多个版本的互相依赖问题
    springz
        5
    springz  
       130 天前
    发行版包管理本来就分滚动还是固定版本的,Linux 发行版也有两派,Debian/Ubuntu or ArchLinux ,HomeBrew 滚动策略是一点问题没有。
    springz
        6
    springz  
       130 天前
    如果有需求的话,HomeBrew 其实可以锁定版本,或者在 git 仓库找老版本的 rb 脚本手动装一下。
    jjx
        7
    jjx  
       130 天前
    别说 homebrew, macos 很多软件都这个德行

    明明不支持当前版本了(这没有问题), 但它还是自动升级, 结果一升就挂了, 需要重新安装
    iorilu
        8
    iorilu  
       130 天前
    还是那句话, 只要能有, 别乱升级, 包括操作系统
    fang2hou
        9
    fang2hou  
       130 天前
    我是觉得挺好的,私下里就喜欢用新版本的,甚至有时候觉得 homebrew 跟随版本太慢,总得过两天。
    公司或者固定版本的项目都是用的手动安装的固定版本,绑定在 homebrew 这种能自动更新的管理器上本身也是不可靠的。
    ryants
        10
    ryants  
       130 天前 via iPhone   3
    破坏性更新那也应该吐槽 cmake 而不是 homebrew 啊,人家要怎么做。万一有人有项目用到 4.0 的新特性,是不是又要发个帖子说卡在旧版本动不了。我就记得 archlinux 的一个版本的 clang 卡了好久,贼难受。软件版本管理一直是这样众口难调,有定制需求自己编译安装。
    BlackSas
        11
    BlackSas  
       130 天前
    我装 dotnet 也是一样,安装 dotnet 是最新的 9.0 。但 LTS 版本是 8.0 。
    还好可以手动选择,卸载后安装 dotnet@8 就可以。
    不知道 cmake 可不可以这样。
    xuegy
        12
    xuegy  
    OP
       130 天前
    @BlackSas 问题就在于很多人劝留一个 cmake@3 ,维护者就是不听还跟你辩经。
    Alias4ck
        13
    Alias4ck  
       130 天前
    确实 别乱升级 上次 macos 升级直接电脑干蹦了 还好东西还在重装系统又给弄回来咯 再也不更新系统了 锁版本了
    xuegy
        14
    xuegy  
    OP
       130 天前
    @ryants 所以才说他们魔怔啊,明知道 4.0 不向后兼容,强行升级会导致无数软件挂掉,就是要坚持自己那套哲学。既然 gcc 和 python 可以多个大版本共存,为什么 cmake 就不行?
    ericguo
        15
    ericguo  
       130 天前
    检查了一下我本地的 brew ,cmake 4.0.3 ,暂时没有看到影响,先这样吧。

    总的来说,升级版本是不可避免的,cmake 升级到 4 ,的确应该是下游去适配的。
    julyclyde
        16
    julyclyde  
       130 天前   2
    你赖着不升级,还要求全世界不进步来等你?

    诛心一点反问你:是不是还在用 centos7
    DefoliationM
        17
    DefoliationM  
       130 天前 via Android
    魔怔了?你不喜欢滚动发行你就不要用 brew 装这个包,你手动也能装呀,经典既要又要还要。
    webcape233
        18
    webcape233  
       130 天前
    @springz 一般是不带数字的始终跟随最新发布的版本,而会旧版本会带上数字
    例如 python 是 3.13 ,额外有 python-3.12 python-3.11 这种

    cmake 看了下只有个 cmake 了,不过需要的人应该提个 cmake3 的上去就是了
    webcape233
        19
    webcape233  
       130 天前
    @xuegy 可以提 pr 增加 cmake@3 吧,我看 python 一堆旧的版本 [email protected] 这种
    lvlongxiang199
        20
    lvlongxiang199  
       130 天前
    我觉得 homebrew 干的没错....
    需要特定版本的 cmake, 自个额外装一个呗.....
    nbndco
        21
    nbndco  
       130 天前   12
    @xuegy 可以啊,不是说了么,cmake 官方承诺维护 3 到什么时候就可以加 cmake@3 到什么时候,因为 cmake 官方没有任何承诺,所以不再维护的就不能加进去了,有什么问题?

    homebrew 没有组织你写自己的 tap 或者用别人的,并且直接给出了 brew extract 的解决方案。

    全天下不按你的想法出牌就是魔怔了么
    cigarzh
        22
    cigarzh  
       130 天前 via iPhone   2
    全世界都得围着你转呗
    HojiOShi
        23
    HojiOShi  
       130 天前
    又不是付费商业软件,开源免费软件开发者爱咋整咋整,不爽自己 Fork 一份维护。
    w568w
        24
    w568w  
       130 天前
    @springz #5 Arch 在重要的包大版本升级时,也会把旧包移动到 AUR: https://aur.archlinux.org/packages/cmake3-bin (这一点 Debian 和 Ubuntu 也一样),和滚不滚动发行其实关系不大。

    我也认为 Homebrew 应该留个 cmake@3 或者 cmake3 啥的,或者提供方法让人去找旧版本的 ruby 脚本装
    MIUIOS
        25
    MIUIOS  
       130 天前
    cmake4.0 和 3.x 区别好大
    MrKrabs
        26
    MrKrabs  
       130 天前
    你可以 just copy 一个 formulae
    wuruxu
        27
    wuruxu  
       130 天前   1
    maintainer 的潜台词,就是爱用就用,不用滚
    roundgis
        28
    roundgis  
       130 天前 via Android
    @xuegy 看那个讨论 也看不出有很多人需要保留 cmake@3
    star9029
        29
    star9029  
       130 天前
    典中典之在开发中滥用系统包管理,特别还是滚动发行版。
    其实大部分包管理都是这样的,每天都会无意中 break 下游。就算包管理定期全部包都构建一次,依然顶不住这个复杂度,所以还是得专门学构建知识来维护使用的工具链和包。
    hugozach
        30
    hugozach  
       130 天前
    用容器啊 vscode 支持新建.devcontainer 来设置
    简直就是神仙解决方案
    icyalala
        31
    icyalala  
       130 天前   1
    cmake 带来的破坏性变更,为什么不去骂 cmake ?
    你去搜搜 cmake4 ,多少项目都被提 issues 说构建出问题的?
    是 brew 折腾你还是 cmake 折腾你?

    有人给我的库提 issue ,我为了兼容最新的 cmake4 和早期的 cmake3 ,和专门搞了好几个平台下载各个版本的 cmake 来测试,好一顿折腾。。。
    minami
        32
    minami  
       130 天前
    包管理都是这样子的,不出问题的时候都是好好好,牛逼,秒杀某个没有包管理的系统,出问题时候就变成自己是第一责任人了,这就是中心化的弊端
    kingfire
        33
    kingfire  
       130 天前
    用 nix 吧,可以多版本共存,不担心这问题
    archean
        34
    archean  
       130 天前
    可以试试用 mise 来管理工具链
    duzhuo
        35
    duzhuo  
       130 天前
    好家伙,你不能又 roll 又不 pin 啊 真危险
    SingeeKing
        36
    SingeeKing  
    PRO
       130 天前
    建议试试 asdf ,很方便管理多版本工具链的情况

    当然,也可以一步到位上 nix
    bao3
        37
    bao3  
       129 天前
    这个锅真的要怪 cmake 。而 homebrew 机制本来就是这样,它直接更新到 4.0 没什么不对,不保留 cmake 旧版本的理由也说得通。homebrew 每次使用时,都会提示你如何关闭自动更新以及如何关掉 cleanup 。 其实背后是有原因的。
    另外 homebrew 应该不是营利组织在做这件事,如果没收你钱,你也没有理由要求他们服从你,直白点就,一切要看人家的脸色,爱用就用,不爱用就滚,这一点问题也没有。
    rick13
        38
    rick13  
       129 天前 via iPhone
    你又想更新又想不升级,上 nix
    zengxs
        39
    zengxs  
       128 天前
    这种问题,自己提个 pr 就能解决
    homebrew 的 formula 都是志愿者写的,人家用不到 cmake 3 自然就不会去制作这个 formula
    maintainer 只是管理合并 pr 的而已,他没有义务帮你制作这个 formula
    james122333
        40
    james122333  
       128 天前 via Android
    通常这时候都是自己改包会比较好 或 git 回推版本就好
    而 homebrew 貌似没有类似 archlinux 下 provides 配置?
    其实也不一定要用 homebrew
    james122333
        41
    james122333  
       128 天前 via Android
    如果你不希望管理多版本又稳定 我推荐给你一个东西 netbsd pkgsrc
    支持很多系统 以下是 mac 安装配置
    https://pkgsrc.smartos.org/install-on-macos/
    james122333
        42
    james122333  
       128 天前 via Android
    可以安装以上工具 加入怪人阵营
    guo4224
        43
    guo4224  
       128 天前 via iPhone
    @?
    NessajCN
        44
    NessajCN  
       128 天前   1
    我进去看了这个 discussion ,人家 maintainer 说得挺好的,
    既给了解决方案又解释了理念和原因,语气用词也很平和,
    怎么就被扣了个魔怔的帽子?
    deplives
        45
    deplives  
       128 天前
    不知道是谁魔怔了,这个锅不让 cmake 来背,让 homebrew 背
    destinism
        46
    destinism  
       128 天前
    可以自己提交旧版啊,surge 现在都还有 V4
    jjnox
        47
    jjnox  
       128 天前
    用这个吧 https://vfox.dev/plugins/available.html

    vfox ,或者 asdf 来管理编程语言,别用 brew ,brew 一般管理其他非编程依赖
    jjnox
        48
    jjnox  
       128 天前
    用这个吧 https://vfox.dev/plugins/available.html

    vfox ,或者 asdf 来管理编程语言,别用 brew ,brew 一般管理其他非编程依赖
    yinxs2003
        49
    yinxs2003  
       128 天前
    brew 感觉有些地方挺难用的。不升级系统就没法用了,可太奇葩了
    CKylinMC
        50
    CKylinMC  
       127 天前
    cmake 通过大版本更新来推送破坏性改动这点我不知道有哪错了,反而是包管理器管理不好软件包版本才是最大的失职。homebrew 维护者似乎没能理解到版本冻结对于开发环境的重要性,搁那坚持来坚持去把自己当 Linus 了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2679 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 15:04 PVG 23:04 LAX 07:04 JFK 10:04
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86