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

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

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

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

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

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

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

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

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

    要说二进制文件有后门,全球网站下载安全系数里,github 上应该是很安全的。
    skys215
        26
    skys215  
       2021-07-01 10:42:15 +08:00
    开源=开放源代码,他开放了源代码,那就等于开源了。

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

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

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

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