为什么没有 Unix API?我的意思是,因为有 Windows API。
我知道 Unix 世界中的很多东西都是模块化的,这些东西放在一起就创建了一个完整的系统。这听起来不错,但当您尝试制作本机 Unix 应用程序时,确实会产生一些问题。
例如,您想编写一个漂亮的文字处理器,并命名为 WP。 Windows版本的WP将通过调用Windows API来构建。您可以直接用 C 语言对其进行编码,也可以使用任何各种包装器库。但是,该程序仍然必须通过调用 winapi 来构建,它提供了程序员构建 Windows 应用程序可能需要的所有功能,从基本的系统调用到 GUI、3D、多媒体或具有十多年向后兼容性的任何其他功能。如果不是这样,Wine 就不可能存在。
现在您想要创建 WP 的 Unix 版本。标准 C 和 C++ 库以及 POSIX API 非常稳定,并且在任何 Unix 变体中都得到良好支持。当您尝试做更多事情时,就会出现问题。所以你需要为WP创建一个窗口,但是如何呢?有X11,但这不是唯一的。人们认为 X11 应该被取代,现在正在制作两个不兼容的替代品:Wayland 和 Mir。即使对于X11,也有Xlib和xcb。 xcb 声称它们“更好”,在某些方面确实如此,但是文档在哪里?您最终选择 Xlib 来完成任务,但 X11 标准本身只定义了非常基本的功能。您期望的 GUI 应用程序的任何其他功能(例如窗口事件或剪贴板支持)都需要通过调用 来处理扩展XInternAtom
。这句话只是我个人的看法,但是在X中使用Atoms是极其不直观的。另一个问题是并不是每个 X 窗口管理器都很好地支持这些扩展。因此,让我们把这种肮脏的事情留给 GTK+ 和 Qt 的开发人员,他们会破坏每个新版本的向后兼容性。 Linux 中是否有可能提供便携式拖放支持?
在我看来,Unix 社区正在桌面世界中自杀。我知道我提到的事情对于设置 BSD 服务器并不重要,但如果您尝试构建可移植的本机 Linux 应用程序,那么它确实很重要。
是什么造成了这一切混乱?是否真的有努力清理这个问题并使现代 Unix 桌面环境标准化?为什么没有 Unix API?会有吗?
答案1
要被称为 UNIX,您需要经过一个认证过程,该过程要求(除其他外)您实现 POSIX 标准。
所以你的问题是完全无效的。有UNIX API,它被称为POSIX。
答案2
在我看来,Unix 社区正在桌面世界中自杀。
我认为存在一种误解,认为任何形式的 Unix 的存在都是为了在家用 PC 市场竞争。有一些 Linux 发行版专注于此;第一个确实是 Ubuntu,但值得考虑的是,Ubuntu 最初愿景的一部分是开发一个用户友好的操作系统,该操作系统可以在世界上不需要为每台计算机支付数百美元购买 Microsoft 许可证的地方使用。可行,并且可能意味着拥有计算机(在学校、政府等)和没有计算机之间的区别。
我没有及时了解这件事有多成功,但无论如何,在我看来,这与想要超越苹果或其他什么目标是一个非常不同的目标。正如他们所说,苹果和橙子。或者苹果和土豚。1 这只土豚一点也不像苹果!不,不是。你为什么会认为是这样呢?
现在您想要创建 WP 的 Unix 版本 [...] 您最终选择 Xlib 来完成该任务
除非你是一个疯狂的人,不太可能完成一个具有大众消费潜力的文字处理器。
软件存在于不同的层中,并组装在堆栈中。 X 是一个在各种平台上使用的层,作为 GUI 堆栈的一部分。在这些平台上,X lib 用于实现更高层次诸如 Gtk 和 Qt 之类的库,它们都有一个便携的 应用程序编程接口;它们可以在 OSX 和 Windows 上使用,两者都不使用 X。在这些平台上,使用不同的较低级别库/API 来实现 Gtk 和 Qt。这意味着更高级别的程序,例如为 Gtk 或 Qt 编写的最终用户 GUI 应用程序,只需进行相对较小的更改即可在任何地方使用。2
这些是直接用于在 POSIX 系统上实现 GUI 应用程序的库,这就是为什么大多数此类应用程序通常不难从一个“接近兼容”的 POSIX 系统移植到另一个系统。
因此,您所指的“问题”实际上并不像您所呈现的那样存在。 Unix 社区并没有自杀,它正在做它想做的事情。
1. 为了更好地解释我的意思,请考虑自由市场在 GNU/Linux 与 Windows 的演变中所扮演的角色。后者显然是自由市场力量的产物,但前一种情况则模糊得多。作为优秀的西方人,我们当然会把理论放在第一位并说:“显然,由自由市场塑造的产品比非自由市场塑造的产品更好。”但这并不完全正确——它真正的意思是人们会倾向于卖得更好。从这个意义上说,您似乎在问为什么不付出更多努力来让产品卖得更好。答案当然是这样做的动力较少,这就提出了一个问题:有动力做什么。 GNU/Linux 的开发(尤其是)受到了开发人员的大力指导出来取悦自己,而不是其他人或大众市场。我想这是否会产生一个更好的系统取决于你的观点与创建它的人的观点有多接近。 UNIX 的历史确实涉及更多的市场力量,但它现在/曾经是高度专业化的受众。换句话说:这是一个面向技术人员的技术操作系统,但也有一个可供普通大众使用的兔子洞。
2. 相反,如果您使用 Windows API 编写某些内容,则只有一个地方可以使用它,而无需进行一些非常大的更改。。
答案3
Unix 有他们希望你遵循的规范/标准,POSIX,以及应该实现的方式,尽管由开发人员决定,如果我们希望我们的代码在许多架构/平台/系统上工作,那么我们应该遵循这个标准。归根结底,让开发人员遵循(希望)大多数开发人员都遵循的内容。
Windows 有一个函数库,即所谓的 API,它是根据高层管理人员的财务指示而确定的(很多人会争论,但 microsoft 的一切都是关于底层美元 AFAIK...而 posix 是为了努力相处)
POSIX 就像一个 API,只是没有财务考虑,只是代码试图协同工作......这不是微软的概念,它是有路或高速公路。
这就是我的看法;-}
编辑:::
读完我的帖子后,我意识到我可能有点偏见,这不是本意,因为手指只是随着事实而移动,但我确实是我所说的,偏见被消除了......如果可能的话