展开讨论

经验与复盘经验摘录 · 机器翻译

说到可移植性,作为一名在Windows平台上发布了十多年软件的开发者,……

说到可移植性,作为一名在Windows上发布了十多年软件的开发者,然后又在Linux上发布了一些。针对Windows非常容易,因为ABI。你只需编译一次,就极有可能在所有Windows版本上直接运行。虽然不完美,但比任何其他平台都好。嘿,我用过一些光盘里的软件,那个二进制文件是20年前编译的,现在仍然无需任何修改就能运行。而在Linux上,你必须针对特定的发行版,做些疯狂的事情,比如打包所有东西,或者静态链接,或者其他什么麻烦事,或者开放你的源代码,让别人来承担这个麻烦。哦,还有,我差点忘了……检测发行版并安装依赖的安装脚本。如果你需要发布一个内核模块,那就更糟糕了。>这个生态系统并不是凭借技术优势赢得的。…

源讨论Windows API 是一个成功的跨平台 API原帖 141 条评论 · 导入时统计
5

这条内容在回应什么?

父级讨论 · 节选

GR

(2024) 有趣且有争议的文章,我打赌它会在某些微软赞助的会议上受到称赞。 Wine和Proton并不是对Win32可移植性的致敬。它们是微软牢牢锁定桌面市场所导致的症状,我们其他人不得不通过逆向工程来找到出路。这是市场损害,而不是协作。 这个生态系统并不是凭借技术优势赢得的。OEM按处理器许可,针对Java和网络的“拥抱、扩展、消灭”策略,文档格式的锁定,以及长期阻碍标准化尝试的模式,这些尝试会限制Windows(如1994年的PWI,1995年的ECMA-234,后来的OpenDocument),而当微软自己的标准能扩大其影响力时,他们就推动自己的标准通过。 没有计算机科学课程将Win32视为优秀的API设计典范。没有系统复制它。一个成功的API会获得采用。而Win32则是强制推行的。

完整原文

社区评论 0

还没有社区评论,来聊聊你的看法。

原讨论中的回复 5

仅展示本次导入中包含的直接回复。中文为机器翻译,可查看英文原文。

RA

你也可以直接使用 Flatpak 和 Freedesktop 运行时。它可以在任何地方运行,无论使用的是哪个发行版。对于游戏,Steam 提供了类似的东西,即 Steam 运行时。你只需为这个容器进行开发,软件在 20 年后仍然可以运行。尽管,当然,制作专有软件并不是最佳实践。如果你从一开始就将所有内容开源,那么各种 Linux 发行版和用户可以自行适配到他们的发行版,并最终对其进行现代化升级。

完整原文
MA

> 做一些疯狂的事情,比如把所有东西都打包成一个巨大的捆绑包,或者静态链接 但这不正是 Windows 的样子吗?我刚刚检查了我的 Windows 分区,发现有 43 个 sqlite dll 文件和 16 个 Qt5Core.dll 文件,因为每个使用这些库的程序都需要将它们包含在他们的“巨大的所有东西的捆绑包”中。

完整原文
RB

> 在 Linux 上,你必须针对特定的发行版,做一些疯狂的事情,比如把所有东西都打包成一个巨大的捆绑包, 这就是你为 Flatpack、Steam 或 Docker 所做的事情。这些都是流行的选择。 > 哦,我差点忘了……安装脚本可以检测发行版并安装依赖项。 大多数发行版都提供了工具,可以为它们的包管理器制作包。使用这些工具,你可以声明你想要的依赖项,包管理器会自动完成其余的工作。 > 如果你需要分发内核模块,那就更糟糕了。 正确的方法是将它开源,让安装程序根据内核头文件编译软件。Sysdig 和 VirtualBox 就是这么做的。

完整原文
WH

Linux(和 BSD)生态系统并不适合分发仅二进制的软件。一切都设计为让发行版从源代码打包软件,因此没有稳定的 ABI。

完整原文
PI

我一直在困惑到底什么是ABI。尤其是现在人们说win 32 api是稳定的Linux ABI。 真诚的问题,它们之间的区别是什么,因为它们似乎被混为一谈了。

完整原文
在 Hacker News 阅读

尊重不同观点,分享具体经验。

登录后即可发帖、评论、转发和引用。