兼容性
为确保平台兼容性,Fuchsia 提供了以下保证和限制:
API 兼容性保证
Fuchsia 针对数字 API 级别做出以下 API 构建时兼容性保证:
政策
如果最终开发者可以使用某个 SDK 版本成功构建以数字 API 级别 N
为目标的组件,则他们将能够使用支持相应阶段的任何 SDK 版本成功构建该相同的源代码。N
政策说明
在所选目标 API 级别弃用之前,最终开发者可以升级或回滚其 SDK,而不会破坏其 build。如果更新到其他 SDK 而不更改其目标 API 级别导致其 build 崩溃(例如,如果其使用的 API 元素或头文件已不存在或已被移除),则会被视为 Fuchsia 平台 bug。
另一方面,对于可变的特殊 API 级别 NEXT
和 HEAD
,没有 API 兼容性保证。以 NEXT
或 HEAD
为目标平台时,最终开发者可能会发现,更新 SDK 会导致其代码无法再编译。
我们目前的合作伙伴会与 Fuchsia 团队密切协作,Fuchsia 会尽最大努力避免破坏以 NEXT
为目标平台的最终开发者的 build。Fuchsia 几乎不会采取任何措施来避免破坏以 HEAD
为目标平台的最终开发者的 build。
ABI 兼容性保证
Fuchsia 针对数字 API 级别做出以下 ABI 运行时兼容性保证:
政策
以数字 API 级别 N
为目标平台构建的组件将在任何支持 N
或处于弃用阶段的 Fuchsia 版本上成功运行。
政策说明
在所选的目标 API 级别被弃用之前,最终开发者无需更改或重新编译其代码,即可在较新版本的 Fuchsia 上运行。如果平台的行为方式不同,以干扰其组件在其他版本 Fuchsia 上的功能,则会被视为 Fuchsia 平台 bug。
另一方面,对于以可变的特殊 API 级别 NEXT
或 HEAD
为目标平台的组件,无法保证 ABI 兼容性。仅当组件以 NEXT
或 HEAD
为目标平台构建且其所运行的 Fuchsia 版本与构建该组件的 SDK 版本完全匹配时,系统才允许运行该组件。例如,使用 SDK 版本 16.20231103.1.1
构建且定位到 NEXT
的组件可以在 Fuchsia 版本 16.20231103.1.1
上运行,但无法在搭载 Fuchsia 版本 16.20231103.2.1
的设备上运行。
在大多数情况下,确保用于构建组件的 SDK 版本与其运行的操作系统版本完全匹配是不可行的。值得注意的例外情况是集成测试和本地实验。
外部代码库通常可以控制其用于编译的 SDK 版本以及用于测试的操作系统版本。如果他们希望能够在 NEXT
或 HEAD
中测试功能,则应使这两个版本保持同步。
禁止使用不受支持的配置
默认情况下,component_manager
会拒绝启动 ABI 修订戳表明不受 ABI 兼容性保证的组件。具体而言:
- 在给定版本的 Fuchsia 中,只有在该版本支持
N
或N
已弃用的情况下,才会运行以 API 级别N
为目标平台的组件。 - 给定版本的 Fuchsia 仅会运行以
NEXT
或HEAD
为目标平台的组件,前提是该组件是使用完全相同版本的 SDK 构建的。
产品所有者将能够有选择地停用这些检查。例如,他们将能够将个别组件列入许可名单,以定位到 NEXT
或 HEAD
,即使用于构建该组件的 SDK 来自其他 Fuchsia 版本也是如此。产品所有者停用这些检查须自行承担风险。