HIC 接口分类与维护原则
本文档详细说明了HIC系统的接口分类、维护原则和向后兼容性保证。
一、接口分类
1.1 官方接口(Official API)
定义: 由HIC官方团队维护和发布的接口,属于核心系统的一部分。
范围: - 系统调用(0-255) - Core-0提供的核心服务端点(0x0000-0x0FFF) - Privileged-1层的官方服务(0x1000-0x8FFF)
端点分配详情:
0x0000-0x0FFF Core-0系统调用和服务
0x1000-0x1FFF 能力管理器
0x2000-0x2FFF 调度器
0x3000-0x3FFF 内存管理器
0x4000-0x4FFF 中断控制器
0x5000-0x5FFF 系统调用分发
0x6000-0x6FFF 模块管理器
0x7000-0x7FFF 官方扩展服务(文件系统、网络栈、块设备等)
0x8000-0x8FFF 官方高级服务(图形、音频、AI等)
总数: 34816个端点
第三方接口升级机制: - 优秀的第三方接口可以申请升级为官方接口 - 升级后接口从第三方范围移动到官方扩展服务范围 - 官方接口保持向后兼容,永不删除
1.2 第三方接口(Third-party API)
定义: 由第三方开发者创建和管理的服务接口,通过模块系统加载。
范围: - 用户自定义的服务(0x9000-0xAFFF) - 社区贡献的扩展服务
端点分配详情:
0x9000-0x9FFF 第三方基础服务(数据库、缓存、消息队列等)
0xA000-0xAFFF 第三方高级服务(自定义服务、实验性功能等)
总数: 10240个端点
接口升级流程: 1. 第三方开发者提交接口升级申请 2. 官方团队审核接口质量和兼容性 3. 通过审核后分配官方接口端点 4. 保留原第三方接口一段时间用于迁移
1.3 保留范围
范围: 0xB000-0xFFFF 用途: 保留给未来官方扩展和特殊用途
总数: 20480个端点
二、官方接口维护原则
2.1 核心原则
HIC官方接口遵循以下不可违背的核心原则:
原则1: 向后兼容
定义: 新版本必须完全兼容旧版本
实施: - 所有现有API继续正常工作 - 所有现有代码无需修改即可运行 - 二进制兼容性得到保证 - 现有行为永不改变
原则2: 不减少功能
定义: 永不删除或废弃任何现有功能
实施: - 永不删除任何公开API - 永不删除任何公开函数 - 永不删除任何公开结构体字段 - 永不删除任何公开枚举值
原则3: 只增加,不删除
定义: 新版本只能添加,不能删除或修改
实施: - 新版本只能添加新API - 新版本只能添加新函数 - 新版本只能在结构体末尾添加新字段 - 新版本只能添加新枚举值 - 现有API的签名、参数、返回值永不改变
原则4: 稳定保证
定义: API签名、参数、返回值在ABI版本内永不改变
实施: - 函数签名永不改变 - 参数类型和顺序永不改变 - 返回值类型永不改变 - 结构体布局永不改变
2.2 绝对禁止的操作
以下操作在官方接口中绝对禁止:
❌ 禁止删除任何公开API ❌ 禁止修改任何公开API的签名 ❌ 禁止改变任何公开结构体的字段布局 ❌ 禁止废弃任何现有功能 ❌ 禁止重用已删除的API编号或端点ID
2.3 允许的操作
以下操作在官方接口中是允许的:
✅ 添加新的公开API ✅ 添加新的枚举值 ✅ 在结构体末尾添加新字段 ✅ 添加新的系统调用 ✅ 添加新的服务端点 ✅ 改进内部实现(不影响API) ✅ 修复bug(不影响API)
三、官方接口版本演进
3.1 版本号规则
HIC API使用语义化版本号(Semantic Versioning):
MAJOR.MINOR.PATCH
示例: 1.0.0, 1.1.0, 1.1.1, 2.0.0
3.2 主版本(Major)
触发条件: 仅当必须进行破坏性变更
破坏性变更包括: - 删除公开API - 修改公开API签名 - 改变公开结构体布局 - 改变系统调用约定
保证: - 主版本更新极少发生 - 必须有重大技术理由 - 必须提供完整的迁移路径 - 必须维护旧版本至少1个发布周期 - 必须发布详细的迁移指南
示例:
1.0.0 → 2.0.0 (删除了过时的API,提供迁移路径)
3.3 次版本(Minor)
触发条件: 添加新功能,保持向后兼容
允许的操作: - 添加新的公开API - 添加新的枚举值 - 在结构体末尾添加新字段 - 添加新的系统调用 - 添加新的服务端点
保证: - 所有现有API保持不变 - 二进制兼容性得到保证 - 现有代码无需修改
示例:
1.0.0 → 1.1.0 (添加了新的共享内存API)
1.1.0 → 1.2.0 (添加了新的文件系统服务)
3.4 补丁版本(Patch)
触发条件: Bug修复和优化
允许的操作: - 修复bug - 性能优化 - 安全修复 - 文档更新
保证: - 完全的二进制兼容性 - 不改变任何公开接口 - 不影响现有行为
示例:
1.1.0 → 1.1.1 (修复了IPC调用的bug)
1.1.1 → 1.1.2 (优化了系统调用性能)
3.5 版本兼容性矩阵
| 版本 | 兼容性 | 说明 |
|---|---|---|
| 1.0.x → 1.0.y | ✅ 完全兼容 | 补丁版本,修复和优化 |
| 1.0.x → 1.1.x | ✅ 完全兼容 | 次版本,添加新功能 |
| 1.0.x → 2.0.x | ❌ 不兼容 | 主版本,破坏性变更 |
| 2.0.x → 2.1.x | ✅ 完全兼容 | 次版本,添加新功能 |
四、第三方接口规范
4.1 基本要求
第三方接口必须满足以下基本要求:
- 版本号: 必须使用语义化版本号(MAJOR.MINOR.PATCH)
- 文档: 必须提供完整的API文档
- 兼容性声明: 必须明确说明版本兼容性规则
- 安全规范: 必须遵循HIC能力系统规范
4.2 端点分配
第三方接口使用以下端点范围:
| 范围 | 大小 | 用途 |
|---|---|---|
| 0x7500-0x7EFF | 4352个 | 第三方服务 |
| 0x7F00-0x7FFF | 256个 | 社区服务 |
4.3 命名规范
第三方接口建议使用以下命名规范:
{vendor}.{service}.v{major}.{minor}.{method}
示例: - community.custom_driver.v1.open - vendor.graphics.v2.render - experimental.ai.v1.inference
4.4 版本管理建议
第三方接口的版本管理建议:
- 主版本: 破坏性变更时增加
- 次版本: 添加新功能时增加
- 补丁版本: Bug修复时增加
- 迁移指南: 主版本更新时提供
- 弃用通知: 提前通知API变更
五、向后兼容性保证
5.1 官方接口的兼容性承诺
HIC官方团队对官方接口做出以下严格承诺:
承诺1: 二进制兼容性
保证: 编译的应用程序可以在不同HIC版本间迁移而无需重新编译
实施: - ABI永不改变 - 调用约定永不改变 - 类型大小永不改变
承诺2: 源代码兼容性
保证: 使用官方API的源代码无需修改即可在新版本上编译
实施: - API签名永不改变 - 头文件兼容性得到保证
承诺3: 行为兼容性
保证: API的行为在新版本中保持一致
实施: - 函数的行为永不改变 - 错误码的含义永不改变 - 性能特性不会变差
5.2 兼容性验证
HIC官方提供以下机制验证兼容性:
- 版本检查API:
hic_api_check_compatibility() - 端点查询API:
hic_endpoint_query() - 自动化测试: 完整的兼容性测试套件
- 回归测试: 每个版本都进行回归测试
六、最佳实践
6.1 使用官方接口的最佳实践
1. 依赖稳定的API
/* ✅ 好的做法:使用官方接口 */
hic_error_t err = hic_domain_create(&config, &domain);
if (!hic_is_ok(err)) {
/* 处理错误 */
}
/* ✅ 好的做法:使用版本化查询 */
hic_endpoint_info_t info;
hic_endpoint_query("filesystem", 1, 0, &info);
2. 检查版本兼容性
/* ✅ 好的做法:使用前检查版本 */
u32 req_major = 1, req_minor = 0;
u32 avail_major, avail_minor;
hic_api_get_version(&avail_major, &avail_minor, NULL);
if (hic_api_check_compatibility(req_major, req_minor,
avail_major, avail_minor)) {
/* 版本兼容,可以安全使用 */
} else {
/* 版本不兼容,需要处理 */
}
3. 依赖官方接口而非第三方接口
/* ✅ 好的做法:优先使用官方接口 */
hic_shmem_alloc(size, 0, &shmem);
/* ⚠️ 谨慎使用:第三方接口 */
hic_endpoint_get_cap("third_party_service", 1, 0, &cap);
6.2 创建第三方接口的最佳实践
1. 使用版本化API
/* ✅ 好的做法:版本化API */
#define MY_SERVICE_V1 1
#define MY_SERVICE_V2 2
hic_endpoint_register("my_service.v1.open", 0x7500, handler_v1);
hic_endpoint_register("my_service.v2.open_with_flags", 0x7501, handler_v2);
2. 提供迁移指南
/* ✅ 好的做法:提供迁移指南 */
/*
* v1.0 → v2.0 迁移指南
*
* 变更:
* - 'open' 参数增加了 'flags' 字段
*
* 迁移:
* v1.0: open(path, O_RDONLY)
* v2.0: open(path, O_RDONLY | 0)
*
* 兼容性:
* v2.0 支持所有 v1.0 的调用方式
*/
3. 明确兼容性声明
/* ✅ 好的做法:明确兼容性 */
/*
* my_service v2.0 兼容性声明:
*
* 向后兼容:
* - v2.0 完全兼容 v1.0
* - 所有 v1.0 的调用在 v2.0 中仍然有效
*
* 不兼容:
* - 无
*
* 迁移建议:
* - 无需迁移
*/
七、故障排查
7.1 官方接口问题
如果您使用官方接口遇到问题:
- 检查版本: 确认您使用的HIC版本
- 检查文档: 查看官方文档的最新版本
- 报告问题: 向HIC官方报告bug
- 获取支持: 使用官方支持渠道
7.2 第三方接口问题
如果您使用第三方接口遇到问题:
- 联系开发者: 联系接口的维护者
- 查看文档: 查看第三方接口的文档
- 检查版本: 确认版本兼容性
- 使用适配器: 考虑使用适配器服务
八、总结
8.1 官方接口的优势
✅ 长期稳定: 向后兼容,长期可用 ✅ 官方支持: 官方维护和支持 ✅ 完整文档: 完整的文档和示例 ✅ 安全可靠: 严格的安全验证 ✅ 性能优化: 持续的性能优化
8.2 第三方接口的优势
✅ 灵活性: 可以根据需求定制 ✅ 创新性: 社区可以快速创新 ✅ 多样性: 提供多样化的服务 ✅ 实验性: 可以尝试新想法
8.3 选择建议
使用官方接口当: - 需要长期稳定的应用 - 需要官方支持的服务 - 核心功能和性能关键路径 - 需要严格的安全保证
使用第三方接口当: - 有特定的定制需求 - 需要社区提供的扩展功能 - 进行实验性开发 - 需要快速原型
九、参考文献
附录
A. 官方接口端点分配完整列表
| 范围 | 大小 | 类型 | 维护方 | 兼容性 |
|---|---|---|---|---|
| 0x0000-0x0FFF | 4096 | Core-0 | 官方 | 只向后兼容 |
| 0x1000-0x1FFF | 4096 | 能力管理器 | 官方 | 只向后兼容 |
| 0x2000-0x2FFF | 4096 | 调度器 | 官方 | 只向后兼容 |
| 0x3000-0x3FFF | 4096 | 内存管理器 | 官方 | 只向后兼容 |
| 0x4000-0x4FFF | 4096 | 中断控制器 | 官方 | 只向后兼容 |
| 0x5000-0x5FFF | 4096 | 系统调用分发 | 官方 | 只向后兼容 |
| 0x6000-0x6FFF | 4096 | 模块管理器 | 官方 | 只向后兼容 |
| 0x7000-0x74FF | 1280 | 官方扩展 | 官方 | 只向后兼容 |
| 官方总计 | 30208 | - | - | 只向后兼容 |
B. 第三方接口端点分配完整列表
| 范围 | 大小 | 类型 | 维护方 | 兼容性 |
|---|---|---|---|---|
| 0x7500-0x7EFF | 4352 | 第三方服务 | 各自开发者 | 不保证 |
| 0x7F00-0x7FFF | 256 | 社区服务 | 社区 | 不保证 |
| 第三方总计 | 4608 | - | - | 不保证 |
C. 端点ID使用历史
| 端点ID | 服务 | 版本 | 状态 | 兼容性 |
|---|---|---|---|---|
| 0x1000 | CAP_ENDPOINT_VERIFY | 1.0.0 | 官方 | 永久兼容 |
| 0x2000 | SCHED_ENDPOINT_CREATE | 1.0.0 | 官方 | 永久兼容 |
| 0x3000 | MEM_ENDPOINT_ALLOC | 1.0.0 | 官方 | 永久兼容 |
| 0x4000 | IRQ_ENDPOINT_REGISTER | 1.0.0 | 官方 | 永久兼容 |
| 0x5000 | SYSCALL_ENDPOINT_IPC | 1.0.0 | 官方 | 永久兼容 |
| 0x6000 | MODULE_ENDPOINT_LOAD | 1.0.0 | 官方 | 永久兼容 |
注意: 官方端点ID一旦分配,永不重用。