一个尺寸不适合所有人:为什么软件不能普遍兼容

软件在任何操作系统上都是一样的,对吗?错了。它看起来可能相同,功能也相似,但在幕后却不同。...

你刚刚下载了一个功能打包的更新到你最喜欢的开源应用程序。一切都很正常,你可以在其他设备上使用它——所以现在也是时候把它推广到这些设备上了。

software-isnt-universal

只是你的新Linux笔记本电脑与Windows安装包不兼容。你的安卓平板电脑怎么样?苹果**?PS4?你为什么不能把那软件带到你喜欢的地方去用呢?让我们来探索一些不同的障碍,实现“买一次,跑一次”的梦想

软件开发和操作系统架构

理解软件为什么不能跨操作系统工作需要一点(只是一点,我保证)关于软件是如何**的知识。

软件开发过程

在桌面、服务器和移动设备(即非web)的非常基本的软件开发流程中,程序员将:

  1. 在一个或多个文件中键入一些代码。
  2. 把代码编译成计算机可以执行的东西。
  3. 测试以确保程序按预期工作。
  4. 打包和分发/部署软件。

software os compatibility dev process

我们在这里所关心的是第一和第二步的结合。编译软件的过程,或者把它从代码转换成计算机能理解的1和0(机器语言)的过程是复杂的。我们不会详细讨论它,但是从高层次理解发生了什么是有用的。

操作系统体系结构

需要理解的一个重要点是,操作系统不是一个单一的实体。相反,它是由软件层组成的。

操作系统内核

操作系统的内核负责与计算机的硬件进行通信。软件将其命令传递给内核,内核又向硬件发出命令(例如)从硬盘读取文件,或在屏幕上绘制窗口。它基本上协调了硬件和各种软件之间的所有信息(无论是存储的数据、计算还是用户输入)。内核通过系统调用将所有这些功能提供给软件。

software os compatibility kernel basics

每个操作系统的内核都会实现不同的系统调用,包括哪些系统调用可用、调用什么或选择什么。因此,软件需要考虑到它所针对的每个操作系统的内核所支持的系统调用。在Linux中用于向GPU发送数据的系统调用可能有不同的名称、需要提供的信息列表,或者在Windows中两者都有。这个确切的电话可能根本就不存在。

系统库

在许多情况下,软件不会直接调用内核。相反,它调用系统库或基本函数的集合。库的存在使得(例如)每一个将文件保存到硬盘的程序都不需要编写函数。相反,它只是链接到系统库并使用现有函数。GLibC library for Linux就是一个很好的例子,win32api中的.DLL文件或Mac的/System/library目录的内容也是一个很好的例子。

software os compatibility system libraries

系统库充当应用程序和内核之间的一种转换器,用于执行例行任务。应用程序对这些库进行函数调用,这些库处理许多低级细节。为了方便起见,它们还可以对内核进行系统调用。正如您可能已经猜到的,这意味着这些库是为特定的内核编写的,因此不能跨具有不同内核的操作系统使用。

操作系统执行头

通用软件的最后一个障碍是操作系统可执行文件的格式。操作系统希望它运行的文件遵循特定的二进制文件格式。例如,在Linux和FreeBSD等操作系统上运行的可执行和可链接格式(ELF)文件必须以特定字节指定文件的某些属性,如下图所示。

software os compatibility elf header

显示的应用程序二进制接口(ABI)特别重要。ABI是处理器、内核和系统库中可用调用的组合,它类似于应用程序编程接口(API),因为它定义了两个程序如何相互通信。但是API是程序员(人类)在源代码中用来表示两个软件应该相互通信的东西。ABI实际上允许他们在软件编译和运行后这样做。每个操作系统都实现一个特定的ABI,在同一操作系统的不同版本之间,ABI可能会改变,也可能不会改变。

一般来说,操作系统实现自己的ABI,这是由处理器类型、内核和任何标准系统库的组合决定的。但有时一个操作系统会实现不止一个。例如,FreeBSD支持Linux二进制文件,因为它提供了一个Linux ABI作为FreeBSD内核(而不是Linux内核)的附加组件。这与VMWare或VirtualBox等virtualizatiton程序不同,后者使用软件模拟整个机器(硬件和所有)。因此,这种类型的ABI兼容性更快,但维护起来更费劲。这就是为什么它是罕见的,尽管微软最近看到了它的价值。

例外:解释软件

基于以上我们了解到,开发人员只为一种类型的目标系统编写软件。有许多应用程序,你可以下载并在Mac上运行,然后在Windows上复制并运行,甚至可以再次复制并在Linux上运行而不出问题。这怎么可能?

我一直在撒谎吗?

事实证明,有一类软件表面上看起来就像“无处不在”。你可以下载并在任何支持的平台上运行它——关键词是“支持”。事实上,你下载的是应用程序的源代码,而另一个应用程序(解释器)则直接实时运行源代码。这有点过于简单化了,所以让我们来看看这是如何在两种语言中工作的。

java

当Java第一次发布时,它的承诺是(字面意思是)“只写一次,在任何地方运行”,其思想是通过使用Java函数来创建应用程序,这些函数用于保存文件、进行计算或创建应用程序窗口。然后,每个支持的计算机平台的Java运行时环境(JRE)将运行代码,并将这些代码转换为本机OS函数。那么,Java的诀窍就是它不会“直接”在操作系统上运行。它运行在JRE的一个称为Java虚拟机的部分中,这就是在操作系统上运行的部分。

通过在应用程序和操作系统之间**这个附加的软件层,Java允许您关注一组跨操作系统相同的功能。您可以告诉Java您想做什么,让系统的JVM担心如何真正做到这一点。下图显示了这一点,JIDE软件的Java桌面应用程序框架为Mac(上图)、Windows(左中)、pure Java(右中)和Linux(下图)显示了相同的应用程序。

software os compatibility jide jdaf

Java程序不能精确地实时“编译”自己。相反,Java编译器将把它们转换成“字节码”,你可以把字节码看作是一个半生不熟的程序。当开发人员发布应用程序时,会尽可能多地编译它,而不知道它将在哪个操作系统上运行。当您实际启动它时,JVM将“烘焙它的剩余部分”,以适应特定于主机操作系统的功能。

python

一种流行的解释语言是Python。当您运行Python脚本时,Python解释器将代码转换为操作系统的指令。它的功能也可以类似于Java:当您从应用程序外部“导入”代码时,它会在第一次运行时编译为字节码。然后解释器将知道,在随后的运行中,原始代码是否已更改,此时它将重新编译为新的字节码。

这种“按需”运行的一个很酷的副产品是,您可以使用解释器以交互方式开发脚本。只需在命令行中键入“python”,就可以启动解释器,并且可以立即运行代码并查看结果。

software os compatibility python interpreter

这意味着开发人员可以“实时”地进行操作和调整,然后,一旦一行代码做了他们想做的事情,就将其复制并粘贴到脚本文件中(这比非解释语言程序员必须做的“代码编译测试”循环要高效得多)。

即使软件是一样的,也可能不是

不幸的是,对于用户来说,科技行业还没有开发出真正的“通用”格式。它可能永远不会这样做。引入这些类型的标准通常会产生一个“最小公分母”的解决方案,为了得到每个人的认可而做出让步。

你怎么认为?你愿意拥有通用的兼容软件吗,即使这意味着它没有那么好?或者你对你使用的操作系统还满意,对其他平台的应用程序不感兴趣?请在下面的评论中告诉我们!

图片来源:首席生产官/Shutterstock

  • 发表于 2021-03-13 08:34
  • 阅读 ( 200 )
  • 分类:IT

你可能感兴趣的文章

如何使用免费的adobe photoshop express编辑您的照片

... 幸运的是,Adobe提供了一个名为Photoshop-Express的精简版软件包。它不能做它的老大哥所能做的一切,但它应该足以给你的照片一些额外的魅力。更好的是,它可以在您的浏览器中使用,也可以在i...

  • 发布于 2021-03-14 04:10
  • 阅读 ( 474 )

购买microsd卡时应避免的5个错误

...II和III总线速度的microSD卡的最低写入速度。我们把它列为一个单独的类别,因为有些**商在卡片上列出了这两个类别。两种UHS速度等级为: ...

  • 发布于 2021-03-22 09:26
  • 阅读 ( 235 )

7个新的raspbian功能开始在你的raspberry pi上使用

...个版本中,添加了一系列新特性。下面是要注意的内容,为什么这些功能很有用,以及如何开始充分利用它们。 ...

  • 发布于 2021-03-24 07:50
  • 阅读 ( 201 )

6个智能家居课程你不想通过艰苦的方式学习

...生活更轻松。尽管有这种崇高的期望,这些产品并不适合所有人。在考虑将哪怕一款智能产品带进你的家之前,有几个要点值得考虑。 ...

  • 发布于 2021-03-26 08:30
  • 阅读 ( 201 )

mac的5个最佳虚拟机应用程序(非常适合运行windows)

...一些只支持Windows的应用程序。你甚至需要在Mac上运行另一个操作系统,比如Linux。 ...

  • 发布于 2021-03-28 05:39
  • 阅读 ( 315 )

从任何地方控制windows pc的十大远程访问软件

...台电脑上的文件,那该怎么办?远程访问另一台计算机是一个必须安全、简单和舒适的过程。 ...

  • 发布于 2021-03-28 10:48
  • 阅读 ( 240 )

如何建立自己的电脑,第一部分:选择硬件

...把螺丝刀之前,这整篇文章都是关于选择你的零件的。 为什么要建立自己的电脑? 家用电脑的优点有很多,但最好确保它适合你。你不想陷得太深,后悔你的决定。 例如,建造一台个人电脑可以比购买一台预先建造的便宜,但...

  • 发布于 2021-04-07 00:06
  • 阅读 ( 198 )

在windows中,记事本和写字板有什么区别?

...。记事本和写字板都是由微软自己开发的,并且包含在每一个Windows版本中。在同一领域中,它们都不如付费软件强大,但不要马上就把它们打发掉,它们可能只会为你服务。 记事本和写字板,尽管名字相似,但用途不同。Notepad...

  • 发布于 2021-04-08 04:10
  • 阅读 ( 279 )

如何在没有附加软件的mac上转换视频

...件格式。例如,它不能播放越来越流行的MKV格式,这就是为什么许多人转向VLC作为替代。但对于它播放的文件格式,它还可以将它们转换成适合iPhone和iPad的完美大小。 如何使用quicktime的“导出”功能转换视频 首先,打开要在Q...

  • 发布于 2021-04-10 00:39
  • 阅读 ( 148 )

为什么你不能把你的手机移动到任何你想要的运营商

...方购买笔记本电脑或Wi-Fi平板电脑并在Wi-Fi上使用,那么为什么**和带有移动数据的设备不能在同一个国家的不同蜂窝网络之间进行移动呢? 与Wi-Fi不同的是,全球和各国都有许多不同的竞争性蜂窝网络标准。**运营商也喜欢把你...

  • 发布于 2021-04-11 09:14
  • 阅读 ( 220 )
hnhwytqnk284
hnhwytqnk284

0 篇文章

相关推荐