QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

苹果公司将在未来的 MacOS 版本中弃用脚本语言

  • 2019-09-26
  • 本文字数:4109 字

    阅读完需:约 13 分钟

苹果公司将在未来的MacOS版本中弃用脚本语言

每次发布新的 MacOS 大版本更新时,除了下一版本的细节信息,苹果公司还会介绍不少接下来的方向性说明。在 MacOS 10.15 的首个 beta 测试版中就包含一段“弃用”部分,其中提到:


Python、Ruby 以及 Perl 等包含在 MacOS 当中的脚本语言主要用于实现旧版软件的兼容性。在默认情况下,MacOS 的未来版本将不再包含脚本语言运行时,您可能需要单独安装其他软件包。如果您的软件依赖于脚本语言,建议您在应用程序中捆绑运行时。

这条说明是什么意思?

最直接的解释,自然就是苹果公司可能打算从 Catalina 开始,在“未来的所有版本”MacOS 当中不再包含执行上述语言编写的脚本在执行中所必需的运行时。


不过,苹果公司有时也会弃用部分长期组件,但又不将其彻底删除。例如,在苹果公司当初推出 Mac OS X 10.4 Tiger 版本时,就推荐不要继续使用陈旧的 cron 调度系统;但在接下来的十个 MacOS 版本中,cron 仍然存在并可供用户继续使用。


因此,这可能意味着只要事情还没有定论,那么苹果公司发布的一切警告实际上可能只是“提醒”。但这事至少在接下来的一年之内都没法有定论;而如果苹果确实不再提供这些语言的运行时,那么我们也有必要考虑由此带来的影响。

为什么要删除这些脚本语言?

三个理由:安全性、效率与关注重点。


这些语言常见于各类基于 Unix 的系统当中,而且自 2001 年以来一直在 MacOS X 当中拥有自己的一席之地。那么,为什么苹果现在打算将其删除?这是因为苹果公司正在逐步改变,希望提升 MacOS 的安全性水平。我们认为这是此次改变的首要动机。Gatekeeper 会阻止来自未知开发人员的应用程序自动运行,但文本文件当中的脚本却能够在脚本语言运行时当中执行多种操作,这显然是一种严重的安全隐患。


删除脚本语言还能够帮助 MacOS 实现显著瘦身。每个运行时程序都不大,但与所有编程语言一样,其中包含众多代码库,脚本编写者可以调用其中的常见任务,从而确保自己无需重新发明轮子。


MacOS 当中附带了数千个这样的库文件,总体积超过 150 MB。虽然看起来并不算大,但作为一款需要下载数百万次的操作系统来说,这也确实不是件容易的事。


最后,还有一个原则——在商业市场当中,大家应该专注于自己的优势。维护这些语言并不能给苹果带来任何优势;该公司目前已经不再提供针对这些语言的更新,而用户也无法从庞大的库中查找及安装自己需要的库选项。

谁会受到影响,他们又该如何应对?

这个问题的答案,取决于您的使用方式与日常工作内容。

脚本编写者

最了解这些脚本语言的用户并不会受到什么影响。那些专门面向 Web 开发、科学分析或者将脚本语言作为首选语言完成日常工作的脚本编写者们,肯定早就明白苹果并不打算为他们提供默认的语言库维护与安装服务。


长久以来,使用这些语言的严肃用户一直在独立的文件夹当中安装单独的副本,从而确保语言能够随时更新并轻松从储备当中使用各类库方案。因此即使是在苹果不再提供默认安装之后,原本的使用习惯也不会受到任何影响。

应用开发人员

Mac 应用是使用编译语言编写而成的,但有时候应用当中也会包含脚本部分以执行特定任务。苹果的弃用通知,相当于建议开发人员在应用程序当中包含脚本的运行时可执行文件;换言之,苹果是将这部分工作移交给了开发者。


虽然在某些情况下,例如对 Perl 语言来说,不同的应用往往需要不同的 Perl 副本,这可能会给开发效率带来一定影响。但对于开发人员来说,他们只需要在应用当中包含自己使用的运行时与特定库,而非完整的脚本语言。一部分应用程序已经采取这种方式继续使用 Java,而大多数现代应用程序都依赖于 Electron 框架——其中也包含有运行 JavaScript 所需要的 Node。


或者,开发人员也可以转而使用经过编译的代码,或者使用其它语言从零开始重写脚本甚至将脚本转换为二进制可执行格式。

Mac 管理员

为学校或者企业管理大量计算机的管理员高度依赖于自动化,而自动化的实现必须需要使用大量脚本。虽然大多数应用程序开发人员已经习惯了苹果公司针对编译代码采取的种种安全措施,但 Mac 管理员在这方面的经验普遍比较有限,因此可能更难建立起脚本编写习惯。


虽然有些管理员能够熟练使用这些脚本语言中的一种或者多种,但相信大多数管理员都和我一样,知识储备只够使用社区中的共享脚本。例如,Greg Neagle 的 Munki 是一款高人气开源工具,用于管理由 Python 编写的 Mac 软件的安装流程;但事实上,大家使用就行,并不需要掌握太多 Python 知识。管理员目前倾向于收集大量用各种语言编写而成的实用脚本,但在每台 Mac 上安装并维护多种语言的工作量太大,因此未来管理员可能只会选择其中一种,这无疑会大大限制可用工具的数量。对于更简单的任务,管理员也可以转而使用 shell 脚本。Shell 脚本肯定是相当安全的,只要终端应用还在,它就不会消失。

苹果

在从 MacOS 当中删除这些脚本语言之前,苹果方面需要首先消除自身对这些语言的依赖。Xcode 当中就包含这三种语言的大量库,但对于苹果自己来讲,将运行时添加到 Xcode 已经非常庞大的安装包当中应该并不是什么难事。iMovie 当中包含一个单独的 Perl 脚本。另外,虽然我不太清楚,但 Final Cut Pro X 以及 Logic Pro X 中有可能同样包含与这三种脚本语言相关的内容。


除了苹果自家的应用之外,MacOS 10.14 Mojave 中包含超过 175 个脚本,这些脚本位于 Perl、Python 以及 Ruby 的专用文件夹之外。有些属于语言的一部分,也有一些具备自己的独特用途。在意识到如此可观的脚本量之后,我开始觉得从 Catalina 版本开始将三种语言彻底从 MacOS 清除出去的说法其实并不靠谱。

其它用户

我们很难准确统计有多少日常用户会依赖于至少一款包含至少一个脚本的应用程序。对于那些官方维护较为积极的应用程序,开发商将帮助最终用户解决问题。但对于某些开源项目,特别是不以 MacOS 为主要平台的跨平台项目,项目贡献者可能不会提供解决方案。


对于那些已经停止维护的应用程序,这里也有解决方案:我们可以自己安装脚本语言。每种脚本语言都有不同的 Mac 安装方法,但最简单也最常用的方法是使用 Homebrew 等通用包管理系统。


Homebrew 本身由 Ruby 脚本构成,我希望其开发人员能够注意到苹果方面的警告,并及时在 Ruby 从 MacOS 未来版本中彻底消失之前添加运行时。


如果大家想了解到底有多少应用程序包含这些语言的脚本,请复制以下命令并粘贴到终端当中:


find /Applications -type f | while read in ; do if file -b "${in}" | grep -q 'Perl\|Python\|Ruby' ; then echo "${in}" ; fi ; done
复制代码


find 后面的第一条参数代表需要检查的文件夹。在我的 Mac 上,Plex Media Server 中包含的 Python 脚本最多,BBEdit 中也包含一些,其它应用程序当然不例外。总体来讲,小公司产品或者开源项目对脚本的依赖程度更高。

开始规划

此次弃用通知的目的,在于给人们预留充裕的应对时间,但一般来说这些通告不会按固定的时间进度执行。如果苹果公司本身并不打算主动终结对脚本的依赖,或者是该公司的某些重要客户反响他们还没有做好准备,那么其中的一种或者多种语言也有可能继续存在。


即使苹果公司真的从 2020 年 MacOS 10.16 版本开始删除所有脚本语言,带来的改变也不会像大家想象的那么严重。举例来说,对 32 位应用程序的支持直到 MacOS Cataline 版本才彻底终止。而且与该次变更不同,如果苹果删除了脚本语言,用户也完全可以随时把它们装回来。


最后一点说明。Swift 也可以用作脚本语言,只是其运行时目前尚未被包含在 MacOS 当中。不过苹果未来可能会在合适的时间点上将其纳入 Mac 并作为脚本语言选项。

开发者怎么看?

网友 Simon 评论


干得好,我非常非常支持(滑稽)。以前 MacOS 安装包里存在太多臃肿的东西,这些负责降低脚本运行门槛的东西都是垃圾,都应该被清理出去。当然,大家可以根据需要自行安装一部分,那些愿意升级到新 MacOS 版本的用户肯定会这么做,或者至少会学着这么做。但是,真的要逼着每个用户都要自己学着选择并安装与语言对应的运行时吗?说句实话,如果我们愿意这么做,还有不少比 MacOS 更好的系统,我们干嘛不直接用那些系统呢?


OS X 的一大主要优势,在于它带来了很多 Unix 系统中的亮点,这自然得益于其 NeXT 时代积累下的传统(终端、脚本语言、编译器、X11 等)。也正因为如此,MacOS 才对科研群体有着如此强烈的吸引力。苹果公司此次最新举措实际上就是在自毁长城。别跟我扯“出色的科学家完全可以自行安装这些东西”这类屁话,实际情况根本就不是这样。人们讨厌软件包管理器,也不愿意从零开始进行编译。如果我必须得从头开始安装所有标准的*NIX 工具,那首先得安装那些让这些工具的安装程序正常运行的乱七八糟的东西……我还是自杀算了。对我来说,最好的办法是买台便宜电脑,装个 CentOS,然后安心用。这反而更简单。多讽刺,苹果本来的意义就在于提供更轻松的使用体验,现在反而变成了麻烦的体验。


网友 David Weintraub 评论


我知道这些工具可能不再默认安装,但如果安装开发者套件,是不是就不会受到影响了?毕竟很多开发人员之所以深爱 Mac,就是因为这是一台真正的 Unix 机器,包含所有 Unix 工具、标准 C 库以及 API。这一切,都是 Windows 所不具备的。


在办公室里,大家会看到技术人员宁愿把公司发的 Windows 电脑放在那里吃灰,也要天天背着自己的 MacBook 处理日常工作。在这样的过程中,很多人成了苹果的铁杆粉丝。至少,如果我安装了 Xcode,请同时帮我安上这些语言。


下面我要对 zsh 评论一番——它太烂了,真的很烂。Zsh 非常臃肿而且容易崩溃。它的设计思路基本就是把所有可能的语法整合到一个 shell 当中,结果就是谁用 csh 语法编写脚本,谁就肯定要倒大霉!这不仅让 zsh 变得越来越大,同时也导致其中的很多命令与函数的运行方式跟 bash 完全不同。


当然,这并不完全是苹果的错。苹果出于法律原因不能使用 GNUv3 许可下的软件,包括所有较新版本的 Bash shell。Mac 上 bash 的最新版本是 3 abs bash,但目前 bash 的正式版本已经更新至 version 5。


很多软件基于 GNU 与 Apache 或 MIT 的双重许可,这意味着像苹果这样的公司可以根据需求替换部分符合许可授权的软件。但很遗憾,bash 并不在其中。


原文链接:


Apple to Deprecate Scripting Languages in Future Versions of macOS


2019-09-26 14:562920

评论

发布
暂无评论
发现更多内容

Java学习笔记——正则表达式,平安金服java面试题

Java 程序员 后端

Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day14

Java 程序员 后端

Java多态大乱炖,mysql基础教程视频

Java 程序员 后端

架构实战营毕业总结

VE

架构实战课

Java基础09 面向对象~类和对象,阿里面试官必问

Java 程序员 后端

Java基础25~XML和JSON解析,springbootoauth2教程

Java 程序员 后端

Java基础面试题——IO流,springboot实战项目百度云

Java 程序员 后端

Java基础面试题整理,java数组排序sort原理

Java 程序员 后端

Java中高级核心知识全面解析——常用框架(Spring常用注解

Java 程序员 后端

JAVA代码审计之Shiro反序列化漏洞分析,浦发银行Java开发笔试题

Java 程序员 后端

第二模块作业

River Tree

架构实战营

Java实现经典算法,阿里java技术专家面试

Java 程序员 后端

java实现简单二叉树,深入分布式缓存从原理到实践技术分享

Java 程序员 后端

Java几种常用JSON库性能比较,java接口开发面试

Java 程序员 后端

Java初学01:学习路线,java基础入门清华大学出版社

Java 程序员 后端

架构实战营模块二学习总结

吴霏

「架构实战营」

Java如何支持函数式编程?,大专生面试阿里P7居然过了

Java 程序员 后端

Java反射的深入浅出,mongodb优化面试

Java 程序员 后端

Java学习路线和方法推荐,拿下我人生中第7个Offer

Java 程序员 后端

Java实现图的存储和创建,linux编程基础课后答案第二章

Java 程序员 后端

自由职业者靠什么赚钱?

石云升

职场经验 10月月更

Java之StringUtils的常用方法,java整体项目架构图

Java 程序员 后端

Java基础 - 单例(饿汉、懒汉),Runtime类,java教程推荐学客巴巴

Java 程序员 后端

Java基础总结三(泛型、异常,阿里java面试题及答案

Java 程序员 后端

Java实现RPC(源码),java常见面试题

Java 程序员 后端

架构实战模块二作业

吴霏

「架构实战营」

Java多线程 高频面试题,java架构师工作内容

Java 程序员 后端

Java之Spring基础与IOC,java实用教程第五版答案第四章

Java 程序员 后端

Java内存问题 及 LeakCanary 原理分析,mybatis架构设计层次

Java 程序员 后端

Java基础 - 多态,抽象类,接口,linux源码学习

Java 程序员 后端

Java基础27~使用JDBC+连接池,这篇文章可以满足你80%日常工作

Java 程序员 后端

苹果公司将在未来的MacOS版本中弃用脚本语言_文化 & 方法_Josh Centers_InfoQ精选文章