V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cathedrel
V2EX  ›  程序员

不懂就问: github 里面 release 部分下载的各个系统上直接可以用的软件包, win 的 exe、mac 的 dmg、 Linux 的二进制文件或者 appimage、安卓的 apk 这些,有没有可能是“伪开源”?

  •  
  •   cathedrel · 157 天前 · 5721 次点击
    这是一个创建于 157 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如类似 keepass 这样的 app,releases 的程序文件是另外有后门的源码编译后上传的,不是其公开在 code 部分的“干净”源码编译的?有没有这种可能??
    49 条回复    2021-07-02 10:10:08 +08:00
    Cyrusss
        1
    Cyrusss  
       157 天前 via Android
    代码放出来就是开源,而二进制文件没关系。
    Cyrusss
        2
    Cyrusss  
       157 天前 via Android   ❤️ 5
    你说的「不干净」编译是存在的,比如微软提供的 VS Code,它的「干净」版是 VSCodium 。
    vk42
        3
    vk42  
       157 天前
    那除了 Gentoo 以外的各 Linux 发行版也算“伪开源“了?

    我觉得关键在于项目开源的代码是不是能完整构建可用成品,之前有些所谓开源放点代码出来但实际啥都编译不出来,只能用他们自己的二进制
    AkideLiu
        4
    AkideLiu  
       157 天前 via iPhone   ❤️ 1
    release 的时候人家放 executable 只是方便你用...既然都开源了你不信任作者编译的可以自己编译啊。
    说实话哈就算源代码里面嵌入点乱七八糟的,自己编译也不会每行代码都看吧。
    所以可以相对信任
    neteroster
        5
    neteroster  
       157 天前 via Android
    有可能。
    信不过自己编译。
    msg7086
        6
    msg7086  
       157 天前
    是有可能的。不放心可以从头来。
    lesteryu
        7
    lesteryu  
       157 天前 via iPhone
    Software supply chain attacks…
    expy
        8
    expy  
       157 天前   ❤️ 2
    一样的代码保证编译出一样的程序。
    https://en.wikipedia.org/wiki/Reproducible_builds

    或者用 GitHub Action 来编译发布,公开配置文件就行了,不过需要信任 GitHub 。
    https://github.com/marketplace/actions/github-action-publish-binaries
    jorneyr
        9
    jorneyr  
       157 天前
    楼主是不是有误会: 放在 Github 管理的东西都是开源的?
    cominghome
        10
    cominghome  
       157 天前
    有可能,你可以自己编译源码
    cathedrel
        11
    cathedrel  
    OP
       157 天前
    @jorneyr 确实好像有这种误会,你能否深入讲解一下?
    Rocketer
        12
    Rocketer  
       157 天前 via iPhone
    一样的代码用不同的编译器,编出来并不完全一样。RedHat 就是这么玩的,你拿着他的源码编译出来就是不如他。
    jorneyr
        13
    jorneyr  
       157 天前
    @cathedrel Github 只是个存储用的仓库,存储的内容可以是私有的,也可以是开源的,只是大量开源的代码存储到了 Github,因为免费。
    cathedrel
        14
    cathedrel  
    OP
       157 天前
    @jorneyr 你这段话我本来就懂,我的问题就是:某些自称是开源的项目它们的可运行软件包是否真的是用“公开的干净的“源码编译出来的??有没有办法鉴别??有没有办法防范开源幌子下的后门和暗桩??
    no1xsyzy
        15
    no1xsyzy  
       157 天前   ❤️ 2
    「开源」描述源代码的授权方式和(暗示地描述)与社区之间交互模式,提供二进制与「开源」与否无关。
    比如 ries 你甚至找不到现成的可执行文件。

    至于放 Github 且不开源的,我知道的就有 Mega Sync 的客户端,是 Code Review License,属于「源代码可获取许可」,应当还有 MongoDB 这种 Server Side Public License
    当然,根据 Github ToS,合法版权持有者上传到 Github 的代码具有最低程度的可获取性。
    no1xsyzy
        16
    no1xsyzy  
       157 天前   ❤️ 1
    @cathedrel 唯一的检查方式是反汇编检验,担心的话不如自己重新编译。

    顺便一提,Fdroid 官方仓库里的是 Fdroid 搞的自动检测差异并编译的。
    j0hnj
        17
    j0hnj  
       157 天前 via iPhone   ❤️ 1
    release 文件是作者可以随便上传的,跟库本身的代码没有强关联
    agagega
        18
    agagega  
       157 天前 via iPhone   ❤️ 1
    是的。但作者可以提供一组编译参数,让你拿它的代码以同样的参数编译出来,然后比较两个可执行文件的 hash
    yfugibr
        19
    yfugibr  
       157 天前 via Android
    你去看看 v2*n, 源码只能编译得到很久以前的版本
    icyalala
        20
    icyalala  
       157 天前   ❤️ 1
    开源说得关键一点就是开放了源码,
    "伪开源" 一般是指责那些看上去是开源的项目,但是部分或者全部源码都没公开,而是只提供 binary 的行为。

    至于那些有全部源码,也提供构建后二进制的项目,无论如何都算不上伪开源。
    在 binary 加入后门或者私有内容,是安全问题。
    freevioce
        21
    freevioce  
       157 天前
    提点题外话
    1. 偏商业用的开源工具版本不会是最新的 而且会编译
    2. 不存在绝对的安全 还有黑客恶意修改源码 只要用了无论编译不编译都会中招
    shangsharon
        22
    shangsharon  
       157 天前
    @agagega 相同参数编译出的文件 hash 不一定是一样的吧
    coolcoffee
        23
    coolcoffee  
       157 天前   ❤️ 1
    印象中能做大做强的开源项目,基本上都采用了 Circleci 、Github Action 自动化构建,人工去维护 release 的成本是非常高且容易出错的。投毒的可能性很低很低,至少收益上划不来。

    但是整合没开源的私有功能是非常可能的,很多开源软件也都是这么玩的,但是这样会降低社区参与度。
    icyalala
        24
    icyalala  
       157 天前   ❤️ 1
    @shangsharon @agagega
    最简单的例子,如果 C 代码里用了 __TIME__ 宏,
    那编译时会被替换成编译时间,每次编译产物肯定不一样。
    3dwelcome
        25
    3dwelcome  
       157 天前
    V2 不就有人放 Github 不开源,其实也没什么。

    要说二进制文件有后门,全球网站下载安全系数里,github 上应该是很安全的。
    skys215
        26
    skys215  
       157 天前
    开源=开放源代码,他开放了源代码,那就等于开源了。

    但开源也有部分开源和全部开源。也有见过在 github 上只放编译好的文件,不放源代码的。
    xinJang
        27
    xinJang  
       157 天前
    引申一下,目前我们用的操作系统都是 win 或 mac 吧。
    这...放了啥后门咱也不知道吧,所以重点是不想被放后门还是不爽被 github 里这个作者放了后门?
    lithiumii
        28
    lithiumii  
       157 天前
    我感觉楼上骂你的没看懂你的意思。
    release 里的编译好的文件技术上可以是假的,可以跟仓库里的代码相比有加料,甚至完全无关,都可以做到。有些仓库甚至没有源码,只有 release,就是用 github 来分发而已
    所以真正在乎的人都会自己编译
    jim9606
        29
    jim9606  
       157 天前
    Release 里的 Artifacts 是作者自己上传的,确实有这个可能。
    最安全的方法肯定是自己编译,不过你没法重现作者的签名。如果你非常需要作者签名,退而求其次的方法是自行审查 CI 脚本,从可信的在线 CI 获取 Artifacts,例如 Github Actions 之类的。
    AlexDec
        30
    AlexDec  
       157 天前
    不能排除,但可能性很小。一旦被发现了,开发者或组织,那不全球玩完了吗?
    ikas
        31
    ikas  
       157 天前
    当然有可能有私货...所以你看 fdroid 都是自己编译 apk..但是如果真的多想一步..那么开源软件用的 lib,是不是也要全部引入源码编译....
    muzuiget
        32
    muzuiget  
       157 天前   ❤️ 1
    谁告诉你 github 上一定要开源的,私有项目也完全可以只放一个 README 文件,然后 release 页放二进制文件。

    本来直接用 release 页的二进制文件就是基于对作者的信任,毕竟自己编译也麻烦。
    Tink
        33
    Tink  
       157 天前 via Android
    肯定有可能啊
    Jirajine
        34
    Jirajine  
       157 天前 via Android
    reproducible build 或者通过 GitHub action 发布。
    各种发行版和 fdroid 这种自行编译打包,才能确保二进制与源码对应。
    solider245
        35
    solider245  
       157 天前
    印象中好像是有过类似的事情的。

    理论上,代码开源之后,软件都应该你自己在本地直接编译。但是开发者打包好了,你要使用直接下载就可以了。
    那么,在开发者打包和你下载这个环节确实就存在漏洞,有可能会被利用。

    所以,具体还是要看你的安全性来考虑。如果你要绝对安全,那么你查看源码,然后本地编译是最安全的。
    如果你要求便捷性,那就直接安装开发者提供的包就可以了
    Felldeadbird
        36
    Felldeadbird  
       157 天前
    你可以自己编译,然后和 release 里面的做对比。人家加料,和伪开源不相关。
    coosir
        37
    coosir  
       157 天前   ❤️ 1
    当然是有可能的,毕竟无法保证 release 的内容就是对应源码编译出来的
    如果不在乎自己的声誉,甚至连源码里也放暗桩,很多使用者并不会细看代码
    billlee
        38
    billlee  
       157 天前
    我想起了某个反对 fdroid 的 android 代理软件
    pmispig
        39
    pmispig  
       157 天前
    这个种情况是肯定存在的,还不少
    zerofancy
        40
    zerofancy  
       157 天前   ❤️ 1
    有。
    1. Typora 本身并不开源,只是用来收集 issue,但仍然有很多人认为 Typora 是开源的。
    2. tox 的某个客户端实现 Tok ( https://github.com/InsightIM/Tok-Android )基于 c-toxcore ( GPLv3 )开发,其在 github 发布了 v1.0 的代码,而后来添加的功能在应用商店(以开源自由等说法宣传)发布版本,但并未更新 github 代码。
    cdlnls
        41
    cdlnls  
       157 天前
    是有可能的,不光是 release 部分,直接 git push 上去的代码也是可以包含二进制文件的,如果代码下载下来不自己过一遍,直接打包,也是有可能发现不了的。
    Trim21
        42
    Trim21  
       157 天前 via Android
    完全有可能,release 里面的 exe 放什么都有可能。
    Dreax
        43
    Dreax  
       157 天前
    @yfugibr 因为仓库迁移到 v2fly/v2ray-core 了
    yfugibr
        44
    yfugibr  
       156 天前 via Android
    v2rayn, 安卓项目,core 没问题
    @Dreax
    yfugibr
        45
    yfugibr  
       156 天前 via Android
    @Dreax v2rayng*
    jfdnet
        46
    jfdnet  
       156 天前
    源代码都有。你信不过可以自己编译。
    kingfalse
        47
    kingfalse  
       156 天前 via Android
    源码是开源的,但是安装包啥的放上面就是图个方便,不然给你贴个百度网盘链接让你去下?
    zhuweiyou
        48
    zhuweiyou  
       156 天前
    你可以自己编译源码, 但是源码投毒你也不知道, 不会一行一行看代码吧... 既然用了 就信任了.
    ShionMashmallow
        49
    ShionMashmallow  
       156 天前 via Android
    这种情况是有的,不开源但是 release 也会有说明吧(
    比如说 Clash 两个内核
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1322 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 17:34 · PVG 01:34 · LAX 09:34 · JFK 12:34
    ♥ Do have faith in what you're doing.