关注了就能看到更多这么棒的文章哦~
Ubuntu invests in Google's Flutter and Dart
By John Coggeshall
July 16, 2020
https://lwn.net/Articles/826124/
DeepL assisted the translation.
Flutter 是谷歌构建跨设备 cross-device(和跨平台 cross-platform)应用程序的开源工具包。基于该公司在 2013 年发布的 Dart 编程语言,Flutter 就能帮助开发者编写和维护出一个在各种设备上都可以运行的应用程序。Flutter 应用支持在 Android、iOS、Web 浏览器(通过利用 JavaScript)、macOS 等平台上进行部署。现在 Canonical 和 Google 已经联手支持 Linux 中的 Flutter 应用程序的开源工具包。这样就能提供原生应用程序的运行速度、快速的开发迭代,还有一个不断发展的社区,从而使其成为一项有吸引力的技术。
Flutter 注重提供给用户最好的一致性和质量。谷歌多年来投入了相当多的资源来了解如何构建高质量的用户体验。这些努力促成了 Material Design 等项目,这些原则也被转化为 Flutter 的组件和整体开发理念。对于喜欢 iOS 风格界面的开发者,Flutter 也提供了相应的组件。
Flutter 本身被 Google 称为 "UI Toolkit",Flutter 和 Dart 都采用了 permissive BSD 3-Clause license。谷歌在 2018 年宣布 Flutter "product ready"即可以用于产品中了。该公司目前声称有超过 200 万开发者使用 Flutter 工具包进行应用程序开发。自发布以来,Flutter 也建立了一个由贡献者和应用组成的重要开源社区。
最初,Flutter 是一个专注于移动应用开发的工具包,只针对 Android 和 iOS 平台。随着 1.0 版本的发布,谷歌也开始尝试在传统桌面上使用 Flutter。现在一年半过去了,Flutter 号称现在已经为 macOS 和 Linux 桌面环境提供了 "alpha-quality features"。对于 Linux 桌面来说,Flutter 是作为 GTK+的 wrapper 来实现的,据介绍, Windows 平台的支持还在开发过程中。
也许是为了能尽快跳过 Flutter 桌面体验的 "alpha "阶段,谷歌与 Canonical 开始了关于该技术的合作,这是一个有趣的进展。对于 Canonical 来说,这次合作可以扩大 Ubuntu 中可用的拥有精致用户体验的应用程序数量。有兴趣的读者可以在这里(https://flutter.dev/showcase )探索各种基于 Flutter 的专有(proprietary)应用程序的样例,以及这里的开源应用程序的样例(https://github.com/tortuvshin/open-source-flutter-apps )。为了能拥有这个新的应用程序来源,Canonical 将 "专门成立一个开发者团队,与谷歌的开发者一起为大多数 Linux 发行版带来最好的 Flutter 体验"。这支开发团队究竟如何为 Flutter 和 Dart 的开发做出贡献,公告中没有详细披露。
当然,Canonical 在这个合作中既希望应用到它的 Linux 发行版中,也希望放到 Snap 应用的发行渠道。也就是说,其他发行版也可以直接利用这些 Flutter 相关的改进工作。虽然该公告确实在推荐 Snap 作为使用和开发 Flutter 的手段,但需要注意的是,Snap 并不是使用、开发或分发基于 Flutter 的应用程序的必要条件。事实上,使用现有的部署机制(如 APT)在 Linux 中部署一个 Flutter 应用也是非常合理的。
通过使 Flutter 应用程序成为 Linux 桌面中的一等公民,这样后续就可以比较容易地将目前用 Flutter 编写的约 8 万个应用程序移植进来。为此,Flutter(在某种程度上也包括 Dart 本身)不得不接受 Google 的 "广泛重构(extensive refactoring)",以支持桌面环境以及其他 Linux 相关的项目。要了解这项工作的重点在哪里,必须先了解 Dart 和 Flutter 生态系统。
因为 Flutter 是用 Dart 编写的,所以理论上在构建 Flutter 应用时,可以使用开发者可用的全部开源 Dart 库包(通过 pub.dev 提供)。这也是合理的——大多数 package 都是简单的实现像 OAuth 这样的功能的,并且是用纯 Dart 代码编写的。然而,有些包,在 Dart 中被命名为 "插件",是依赖特定平台或架构的。如果一个 Flutter 应用依赖于这些插件,那么受限于这种依赖性,它就无法在桌面 Linux 上运行。在这一点上,Google 和 Canonical 所做的工作之一就是在关键的 Dart 插件中增加 Linux 支持。例如 url_launcher 插件,它可以让 Dart 应用在用户首选的浏览器中打开一个 URL,这个插件已经移植到了 Linux 桌面环境中。同样,提供跨设备的用户设置存储功能的 shared_preferences 插件也已经扩展可以支持 Linux 桌面了。
在插件方面所做的工作会使今后移植现有的 Flutter 应用程序到 Linux 的门槛降低,但对于希望使用 Flutter 来作为更好的方式来构建专用桌面应用程序的开发人员来说,这还不够。为此,Flutter 将需要访问无数的共享库,来实现认证或者图形等一切功能。为了达到这些目的,Dart 项目在努力增加一个外来函数接口(FFI,foreign function interface)。
FFI 使 Dart 代码(如 Flutter 应用程序)可以利用桌面环境中普通的基于 C 语言的函数库。虽然该功能目前处于 "beta "状态,一旦这个功能实现完毕,就是成为 Dart(以及 Flutter)的应用程序在 Linux 桌面上运行的关键技术。但很显然利用 FFI 的 Flutter 应用将无法在 Android 等移动平台上运行,这样也就削弱了 Flutter 最主要的跨设备的目标。看来,Google 和 Canonical 希望 Flutter 能够在 Linux 桌面专用应用中发挥作用,即使在这个过程中必须牺牲可移植性也在所不惜。
在未来的文章中,我们将仔细研究 Dart 和 Flutter 两个项目——这两个项目似乎都还是很不受重视的应用程序开发工具。Canonical 对该技术的投入无疑表明它希望改变这种看法(至少对桌面而言),并最终减轻编写开源 Linux 桌面应用程序的任务。我们很期待后续看到这些投入是否真的可以被各个发行版所直接利用,还是每个发行版都不得不来自己投入进行支持才能追上 Ubuntu 的功能。根据目前所采取的方法,似乎所有的 Linux 桌面发行版都确实会受益于这项工作。这是个好消息,因为 Linux 社区一直在努力为桌面应用程序提供一种统一的方法来满足人们的期望。对于像 Canonical 这样的公司来说,它对普通用户正在投入更多的关注,尤其是当硬件制造商也开始向大众提供基于 Linux 的 PC 了。Flutter 提供了一个可行的前进方向,除了对开发者来说是一个引人注目的开源工具外,针对广大消费者的应用程序也会让人们对这些硬件设备更加热爱。
全文完
LWN文章遵循CC BY-SA 4.0许可协议。
欢迎分享、转载及基于现有协议再创作~
长按下面二维码关注,关注LWN深度文章以及开源社区的各种新近言论~