有话要说

目前来说,国内高质量的既兼顾深入macOS系统,也兼顾系统编程,还兼顾普通Mac用户使用的书籍可谓是凤毛麟角,本书希望可以从一个角度开创这一先河。

  • 拿到这本书的第一个疑问肯定是:软件安装有啥可说的,不都是拖放就可以了吗? 答:拖放方式是macOS安装软件的一种普遍方式,也还有其它功能更全的方式。剖析和理解macOS的软件安装原理也是深入理解macOS系统的一个敲门砖。

  • 您可能还会问:这都是程序员们的事,跟我有何关系? 答:大家都知道病从口入,而这软件安装就是最重要的入口之一。

当然,读者您还会有很多疑问,我们先不说软件安装包的事,下面先从软件安全方面略作一下分析。 在苹果电脑使用中,除了macOS系统自带的软件,下载安装其它软件是每个苹果用户都要做的,而且在使用过程中,也会不断地尝试新软件删除旧软件。从获得软件渠道的可信度角度来说,用户至少有三种获得软件的途径:

  • 通过App商店购买和下载,目前这是公认的最安全的方式,所有软件都经苹果技术人员利用软件和人工严格的评估和检测,而且软件都是用苹果签发给软件开发商的有效证书签名的,这样可以保证软件的完整性。

  • 公认的知名软件提供商的官网下载和安装,如Adobe,Microsoft等。这样获得的软件绝大多数情况也是使用有效证书签名的,可以保证代码的完整性未被篡改,软件本身的质量也有保证,这个渠道也被认为是安全的。还有一些有长期致力于苹果软件开发并被业界普遍软认可的软件开发商也可以归为此类。

  • 信任度未知的渠道,这种程序多数不包含可验证证书,比如一些综合软件下载网站等,从这些地方获得的软件包无法保证它们不被篡改过。本人把开源软件也归为此类,因为没有人可以保证它不包含恶意的代码(有开源软件被发现包含恶意代码的实例),这种方式获得的软件相对来说是最不安全。

每个用户都有可能碰到使用这三种方式获得软件的时候,造成这种情况,有苹果电脑发展的历史原因,比如基于Unix系统的软件或者命令行工具等,大家可能知道用Homebrew,MacPorts或Fink等第三方工具管理;在没有应用商店(App Store)时就用而且持续更新的软件,比如Titanium Software的Onyx等;也有应用商店准入或收费制度等等诸多非技术因素,因为并不是所有软件都符合应用商店的严苛要求的,比如说Adobe CC的全家桶或者Paragon NTFS for Mac等等,举不胜举,也有不愿意迁移到应用商店等等各种理由。

对于从非应用商店下载下来的软件(后面我们会解释从应用商店安装软件的过程),第一步就是安装,从用户角度说,现在大多数软件都只是把app拖拽到应用程序文件夹就可以,给人的感觉:安装就是这么简单。但是,提醒读者注意的是,这种软件在初次启动时,绝大多数软件都会有一个初始化过程。

软件初始化过程可能仅仅涉及当前用户环境的配置和软件自身状态初始化的设置,也就是说只修改/访问用户文件夹下面的文件,那么它会默默地完成初始化,完全不用用户干预,给大家的感觉就是它直接就运行了。为什么可以这样呢?因为每个被运行的软件都会继承启动它的用户的身份(包括权限),这样在访问这个用户自己的资源时,使用的是这个用户的身份,当然就不需要额外的认证过程,就如同我们在访达(Finder)中进入用户个人文件夹中的任何一个子文件夹一样的无需再次输入密码(注:从Mojave开始,macOS加强了隐私访问控制,限制一个程序直接访问其它程序的文件数据。这一点与此处说的用户身份不冲突)。有时情况可能会变得比较复杂,比如软件可能需要变更某些操作系统的配置和环境,那么它必须要获得系统管理员的权限才能继续,比如:Paragon NTFS For OS X的安装等。

有些软件必须依赖一个安装过程,其中的原因多种多样。对于大型软件,如:Adobe CC全家桶,微软的Office以及金山的WPS套装等等,一个套装里包含多个软件,统一的安装过程给用户更好的体验;有的软件执意让用户阅读并同意软件许可证;有的软件安装时会要求输入必要信息;有的会让用户选择安装组件;有的软件依赖于其它软件,或者需要根据特定的版本等条件来自动确定安装过程。那么一个完整的互动的安装过程就是必要的了。

软件开发商会依照软件的需要或者自己的偏好选择一种最适合自己的安装方式。macOS系统上的软件安装至少有三种方式:

  1. App程序本身自包含完整无需变更其它系统设置或不依赖于其它需另外安装的软件,这种软件的安装可以是将app程序直接拖拽到应用文件夹(/Applications)中,甚至是任意目录中就可以正常运行

  2. App程序自身内置初始安装代码,比如苹果出品的server.app和一些第三方软件。这种软件在第一次运行时完成自身初始化过程,初始化时很有可能需要用户输入管理员密码。这种方式对用户来说是最不透明的,除非有足够时间和技术,否则很难发现它在获得管理员权限后到底做了什么,潜在的危险是存在的

  3. 三是使用macOS系统提供的“安装器“完成安装,这与PC机上用Windows安装器(msiexec.exe)是一样的。相对来说,这种方式比较透明,给与开发商和用户比较大的可控空间。

上面说的前两种,都是直接运行程序代码,对于我们普通用户没有多少可控的机会。对于最后一种方式,我们是可以通过一定技术在安装前就了解其如何操作的,做到安装前就心中有数,这也正是本书所要着重剖析的。虽然看上去,我们只能叙述其中的三分之一的可能,但是其实这个的比重以及重要性却是最举足轻重的,而且读者可以从中剖析和理解macOS的一些特性。

更重要的是,macOS系统还提供了一种命令行的方式,可以不显示安装包中的用户提示部分,也就是跳过那些安装步骤而自动完成安装,也就是悄无声息地完成软件安装。这个特性对很多场景都很有用,比如企业中的软件分发和部署等,当然可能也会带来安全风险。具体的技术细节也是本书中着重解析的一个部分。

Last updated