Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Zenith(齐天)
L2→L7 全栈网络安全数据面框架:AF_XDP + eBPF + TLS 1.3 + HTTP/1-2-3 + Web + Proxy + WAF + Cache + Fingerprint + Forward
从内核旁路到应用层的完整 Rust 网络框架,既能构建系统级网络防火墙,也能构建 CDN 边缘节点和 API 网关。
项目介绍 · 快速上手 · 安全报告 · 赞助公示 · 参与贡献 · 商业授权
Zenith 是一个面向极端性能场景的L2→L7 全栈网络安全数据面框架,采用 feature-gated facade 设计,
用户可按需启用所需能力,避免拖入不必要的重依赖(如 libbpf-rs、rustls、ring)。
在 Linux 上启用 AF_XDP/eBPF/io_uring 零拷贝数据面,在 Windows/其他平台自动降级到 std::net 仍全功能可用。
📚 文档导航
| 文档 | 说明 |
|---|---|
| 项目介绍 | 架构分层、Crate 一览、安全与性能特性总览 |
| 快速上手 | 安装、示例与快速启动指南 |
| 安全报告 | 漏洞报告流程、报告模板与支持范围 |
| 参与贡献 | 如何提交代码、报告问题与商业合作 |
| 赞助公示 | 赞助方式、分级与致谢名单 |
| 商业授权 | 多许可证选型、企业支持与 SLA |
📜 许可证
Zenith 采用多许可证模型发布,您可以为自己的用例任选其一:
- GPL-2.0 — 适用开源项目与社区贡献
- MIT — 适用追求最大灵活性、易于集成的场景
- Apache-2.0 — 适用需要明确专利授权与企业合规的场景
有关企业支持、闭源商用与许可证选型的详细信息,请参阅 COMMERCIAL.md。
⚙️ 核心能力
| 层级 | Crate | 说明 |
|---|---|---|
| L7 | zenith-web |
编译期 Trie 路由、类型化 Extractor、中间件 DAG、静态文件服务、ProtocolServer(H1/H2/H3)、SecurityPipeline 8 步安全管道、RuntimeConfig 无锁原子热更新(WAF/指纹/监听/缓存/HTTP 各协议参数全旋钮) |
| L7 | zenith-waf |
WAF(SQLi/XSS/SSRF/命令注入/路径穿越/BotThreat 6 检测器,50ms 预算 fail-closed,解码后 NULL 字节压缩);规则集运行时增删改查/启停/自定义检测器 |
| L3-L7 | zenith-fingerprint |
全链路指纹识别与阻断(34 采集器结构体、37 collect 入口、256B 特征向量、决策引擎、XDP/L4/L7 三级阻断) |
| L7 | zenith-cache |
CDN 缓存(16 分片、条件请求 304/206/416、stale-while-revalidate、租户隔离);容量运行时热更新 |
| L7 | zenith-proxy |
反向代理(6 种负载均衡 + 熔断器 + 连接池 + H3 真实 QUIC 客户端 + Auto 最优路径);ProxyConfig 20+ 旋钮运行时热更新 |
| L7 | zenith-http1/2/3 |
RFC 7230 / 7540 / 9114 全协议实现 |
| L6 | zenith-tls |
TLS 1.3 引擎(rustls+ring)、证书代际管理、SNI/ALPN 路由、JA3/JA4/JA4S/JA4O/JA4H 指纹 |
| L4 | zenith-forward |
L4 TCP/UDP 转发(TcpRelay 跨平台统一 API)、CIDR 白名单 SSRF 防护、协议转换、背压与带宽配额;ForwardConfig 容量/带宽运行时热更新 |
| L4 | zenith-net |
TCP 状态机 / UDP 会话表 / 端口过滤 / QUIC 传输(RFC 9000,真实 QuicServer);每包解析预算可配 |
| L3 | zenith-net |
SourceAdmissionEngine IP 黑名单/白名单、协议+端口三维过滤 |
| L2 | zenith-linux |
AF_XDP Socket + UMEM + 四环、io_uring 批量 IO、splice/sendfile 零拷贝、CPU 亲和;XskConfig 收发缓冲/预填分块可配 |
| L2 | zenith-ebpf |
eBPF 预编译字节码嵌入、libbpf 加载、双 Bank 热更新;config_map 键(MTU/协议白名单/fail-closed)热更新 |
| API | zenith-api |
三协议收敛到 CanonicalRequest/Response,固定容量数组,零堆分配 |
| Core | zenith-core |
FramePool、资源账本、时间轮、恒定时间比较、Huffman、varint |
| Runtime | zenith-runtime |
全局 Tokio 运行时、三级 Supervisor、ChangeSet 八态热切换、AutoOptimizer |
| Capability | zenith-capability |
环境探测、PermissionSet 能力安全、Profile 三级自动降级 |
| Observability | zenith-observability |
Prometheus 指标、审计日志、故障快照、分布式追踪 |
| Testkit | zenith-testkit |
测试工具、Demo、压力测试 |
🛡️ 系统级网络防火墙能力(L2→L4)
Zenith 区别于普通 Web 框架的核心——具备构建系统级网络防火墙的全部基础组件:
| 层级 | 组件 | 能力 | 等效系统工具 |
|---|---|---|---|
| L2 | AF_XDP + eBPF/XDP | 网卡驱动层线速包过滤(XDP_DROP/XDP_PASS) | xdp-bpf / tc-bpf |
| L3 | SourceAdmissionEngine | 源 IP 精确匹配黑名单/白名单 | iptables -s / nft |
| L3 | AddressWhitelist CIDR | 子网级过滤(/8, /16, /24) | iptables -s 10.0.0.0/8 |
| L4 | 端口过滤 | 源端口/目标端口精确匹配 | iptables -p tcp --dport |
| L4 | 协议过滤 | TCP(6)/UDP(17)/ICMP(1,58)/Any | iptables -p |
| L4 | TcpRelay | 端口转发/协议转换(TCP↔UDP) | iptables DNAT / socat |
| L4 | ForwardEngine | L4 转发 + 双向白名单 SSRF 防护 | haproxy mode tcp |
🔐 安全能力
| 能力 | 说明 |
|---|---|
| WAF | SQLi/XSS/SSRF/命令注入/路径穿越/BotThreat 6 检测器,50ms 预算 fail-closed;解码后就地删除(压缩)NULL 字节防注入绕过(保留 NULL 后载荷,杜绝截断漏检) |
| TLS 指纹 | JA3/JA4/JA4S/JA4O/JA4H/JA4L blocklist 前缀阻断 + 64 分片速率限制;TCP/TLS 与 HTTP/3(QUIC) 连接均采集(QUIC 裸 handshake ClientHello 经 from_quic_client_hello 解析,fingerprint_h3_block_test 实测黑名单 403) |
| 全链路指纹 | 34 采集器结构体(L3×5 + L4 TCP×6 + L4 UDP×3 + L6 TLS×8 + L6 QUIC×1 + L7 HTTP×5 + L7 H2×2 + L7 H3×2 + Timing×2,共 37 collect 入口),256B 固定宽度特征向量(Copy、零堆分配),决策引擎(规则+加权评分+黑白名单+64 分片速率+LRU 信誉),XDP/L4/L7 三级阻断 |
| 身份一致性 | SNI ↔ Host ↔ :authority 四元一致,不一致 → 421 |
| 请求走私防护 | HTTP/1.1 CL.TE/TE.CL/TE.TE 检测 |
| 恒定时间比较 | DCID/Token/密码/模式匹配防时序侧信道,ct_compare 使用 core::hint::black_box 增强 |
| 私钥零化 | CertGeneration 使用 Zeroizing<PrivateKeyDer>,作用域结束自动擦除私钥材料 |
| CORS 安全默认 | allow_origin 默认为空——不发送任何 CORS 头,需显式 with_origin 配置 |
| X-Forwarded-For | 反向代理自动追加客户端 IP 到 XFF 头 |
| H3 响应限制 | drive_h3 强制 max_response_bytes,与 H1 路径对齐 |
| QUIC 帧解析 | STOP_SENDING(0x05)独立解析,CRYPTO 缓冲区限制 65536 字节,Initial 保留位 Fixed Bit(0x40) 校验 |
| 连接池安全 | ForwardLease 实现 Drop + pool_idx 跟踪,panic 时防止连接池泄漏 |
| TCP 连接表 | ConnectionTable 使用 free_stack 实现 O(1) 槽位分配 |
| BPF redirect 安全 | bpf_redirect_map 使用 XDP_PASS flags,XSKMAP 竞态删除时回退到内核协议栈 |
| 审计日志默认脱敏 | log() 默认执行 IP 脱敏与敏感字段脱敏,log_raw() 保留原始写入 |
| PermissionSet u16 | 位掩码从 u8 扩展为 u16,编译期断言防止溢出 |
| QoS 继承 | 新 Worker 扩容后强制重放当前 QoS 设置 |
| TCP ACK 校验一致 | SynReceived 状态 ACK 序列号校验客户端/服务端一致(RFC 9293 §3.10) |
| 指纹向量槽位独立 | 每个采集器写入独立 FingerprintField 变体,消除数据覆盖丢失 |
| /metrics 认证 | 未配置 metrics_auth_token 时端点返回 404,配置时校验 Authorization: Bearer 恒定时间比较 |
| QPACK 总字节上限 | decode_field_lines 内同步累加 name+value 总字节,超 MAX_TOTAL_HEADER_SIZE 拒绝(解压炸弹防护) |
| ForwardEngine 三态 | None=允许透明转发,Some(empty)=fail-closed 拒绝全部,Some(non-empty)=按白名单过滤 |
| UMEM incref 安全 | compare_exchange 循环消除 load-then-fetch_add TOCTOU 窗口,ref_count=0 时 incref 失败 |
🔄 跨平台自动降级
高性能环境 (XDP Native + AF_XDP + 零拷贝 + BTF/CO-RE)
→ Performance (tier=3) splice(2) + io_uring + AF_XDP + eBPF 全启用
中等环境 (XDP Generic + BPF,无 Native/零拷贝)
→ Balanced (tier=2) XDP Generic + BPF,io_uring 可用
低能力环境 (无 XDP/AF_XDP/eBPF,如 Windows/最小容器)
→ Minimal (tier=1) 仅 std::net basic_socket,TcpRelay 回退 std::io::copy
→ WAF/代理/缓存/路由/转发 全功能可用
EnvironmentDetector 真实探测 → ProfileSelector 多目标评分自动选择 → degrade() 三级降级链。
🔄 运行时热更新(全链路 L2→L7)
作为依赖库,除固定协议规范标准外,所有运行参数均支持运行时热更新(无需重建服务器/引擎),实现最高自由度:
- L7 web —
server.update_runtime(|r| ...)无锁原子热更新:WAF 开关/按 host 黑白名单/规则集、指纹安全/限流/阻断、UDP/L4 转发会话、Supervisor 熔断、HTTP/1.1 请求上限/空闲超时、请求体上限、读/写缓冲、HTTP/2 帧长/并发流、HTTP/3 字段段、/metrics 令牌、监听地址、缓存容量 - L7 代理 —
set_proxy_config/update_proxy_config:ProxyConfig20+ 旋钮;转发超时对既有路由立即生效,池/健康阈值对新路由生效 - L4 转发 —
set_forward_config:ForwardConfig(并发会话上限/单会话带宽)即时生效 - L2/L3 — eBPF
config_map(MTU/协议白名单/fail-closed/期望策略)、XskConfig收发缓冲/预填分块、每包解析预算parse_packet_with_budget
性能:热路径标量一律
AtomicU64/AtomicBool单指令原子加载(零锁零竞争);host 名单仅启用时才触碰RwLock;写(热更新)低于微秒级,不触碰读热路径,更新对所有clone副本立即生效。 固定内容:协议规范常量(头长、帧长、MTU 标准值、QUIC 版本等)与 WorkerMAX_BATCH_SIZE(固定栈数组零堆分配优化)不可改。
📦 按需导入
Zenith 默认仅启用最小核心(api + core),其余能力按需开启。
最小依赖(仅类型定义)
[]
= { = "...", = false, = ["api"] }
use ;
let mut req = empty;
req.method = Get;
req.set_path;
仅 Web 框架(不拖入 AF_XDP / eBPF / 运行时数据面)
[]
= { = "...", = false, = ["web"] }
use ;
use ;
let mut app = new;
app.get;
仅 HTTP 协议解析(无 Linux 数据面)
[]
= { = "...", = false, = ["http"] }
完整生产协议栈
[]
= { = "...", = ["full-stack"] }
全部能力(含测试工具)
[]
= { = "...", = ["full"] }
🧩 Feature 矩阵
| Feature | 启用能力 | 重依赖 |
|---|---|---|
api |
公共类型定义(CanonicalRequest/Response 等) | 无 |
core |
核心基础设施(FramePool/账本/ct_compare/时间轮) | thiserror |
net |
L2-L4 协议解析、TCP/UDP/QUIC 状态机、SourceAdmissionEngine、Worker | core;linux 数据面由 linux feature 开启 |
linux |
AF_XDP Socket、UMEM、四环、io_uring、splice | libc(io_uring 可选) |
ebpf |
eBPF 程序加载、双 Bank 热更新 | libbpf-rs、libc |
tls |
TLS 1.3 引擎、证书代际、JA3/JA4/JA4S/JA4O/JA4H 指纹 | rustls、ring |
http1/http2/http3 |
HTTP 协议解析器 | 依赖 net |
web |
Web 框架(路由/中间件/静态文件/SecurityPipeline,默认 full) | serde、serde_json、rustc-hash、ring |
proxy |
反向代理、6 种负载均衡、熔断器、连接池 | rustls、quinn-proto、bytes、smallvec |
cache |
HTTP 缓存层(16 分片、条件请求) | 无 |
waf |
Web 应用防火墙(6 检测器、50ms 预算) | 无 |
fingerprint |
全链路指纹识别与阻断(L3-L7 采集 + 决策 + 阻断) | 独立运行 |
forward |
L4 转发(TcpRelay、CIDR 白名单、协议转换) | linux feature 启用 splice |
runtime |
全链路数据面运行时(Supervisor、ChangeSet、AutoOptimizer) | 依赖 net + linux + ebpf,并升级 zenith-web 到 full |
capability |
环境探测、能力安全、Profile 三级自动降级 | 无 |
observability |
指标、tracing、审计日志、故障快照 | 无 |
audit |
cargo-audit(netlink 链路) | audit(仅 Linux) |
testkit |
测试工具、Demo、压力测试 | 依赖 full |
http |
组合:http1 + http2 + http3 | — |
full-stack |
组合:完整生产协议栈 | — |
full |
组合:全部能力 | — |
📥 直接引用子 crate
除使用 facade 外,也可直接引用单个子 crate(适合只需求某一独立能力的场景):
[]
= { = ".../zenith/crates/zenith-web" }
子 crate 的 default 特性均为空,仅包含必需依赖。
🎯 设计原则
- Fail-Closed:探测/构建/解析失败取安全默认值,永不 panic
- 热路径零堆分配:固定容量数组替代 String/Vec
- 单线程本地存储:无锁访问、对象池复用
- 编译期路由注册:运行期零开销分发
- unsafe 隔离:所有 unsafe 封装在
zenith-linux/zenith-ebpf内部,上层零 unsafe - Copy 语义:核心类型支持 Copy,避免 Clone 开销
- 代际安全:证书/配置双 Bank 原子切换
- 恒定时间比较:DCID/Token/密码/模式匹配防时序侧信道,
core::hint::black_box增强 - L2→L7 全栈:从网卡驱动层包过滤到应用层 WAF,单一代码库覆盖完整网络安全数据面
- 跨平台兼容:Linux 极致性能,Windows/其他平台自动降级仍全功能可用
✅ 协议合规验证(真实进程级)
| 协议 | 工具 | 结果 |
|---|---|---|
| HTTP/1.1 Plain | wrk -t4 -c200 -d8s | 60,359 req/s,p50 5.14ms(483k 请求),0 socket errors(WSL Ubuntu 26.04,0.0.0.0) |
| HTTP/1.1 Plain 低并发 | wrk -t2 -c20 -d5s | 90,706 req/s,p50 249µs |
| HTTP/1.1 Plain POST | wrk -t4 -c200 -d8s -s bench/post.lua | 32,881 req/s(服务器按 405 正常处理) |
| HTTP/1.1 Plain 非保活 | wrk -t4 -c200 -d8s -s bench/close.lua | 26,327 req/s(每请求建连) |
| HTTP/1.1 TLS | curl.exe -k(wrk 4.1.0 不支持 TLS) | 200(TLS 1.3,ALPN h2/http1.1) |
| HTTP/2 | h2spec | 146/146 通过 |
| HTTP/2 | curl.exe --http2 | 200(TLS ALPN h2 协商成功) |
| HTTP/3 | curl.exe --http3 | 200(QUIC + io_uring 批量收发) |
| HTTP/3 | h3spec | 49/49 通过(IPv4 + IPv6) |
| HTTP/3 互操作 | curl --http3-only | 外部 curl(nghttp3/ngtcp2)真实 QUIC 握手 + HTTP/3 200 + 连接复用 |
| TLS 1.3 | curl -vk | TLS_AES_256_GCM_SHA384 / X25519 / ALPN h2 |
| hping3 TCP | hping3 -S | SYN 全应答,服务存活(2000 包无丢包) |
| WAF | curl 攻击 payload | SQLi/XSS/SSRF/命令注入/路径穿越/NULL 字节注入 全拦截 403;BotThreat UA(sqlmap/nikto 等)403(Plain/TLS/H3 三模式) |
| IPv6 | curl [::1] | 200(Plain + TLS + H3 模式;WSL curl 与 Windows curl.exe 双端验证) |
| 指纹阻断 | curl.exe Ja3/Ja4 | TCP/TLS 与 HTTP/3(QUIC) 黑名单 403 均真实生效 |
| CVE | cargo-audit | 无风险 |
| 内存 | 进程级 RSS 观测 | 200 连接负载下稳定于 ~74MB 平台,无泄漏 |
🧪 测试
# 全量测试(含所有特性)
# 仅默认特性
# 单 crate 测试
当前测试基线:3235 项通过 / 0 失败(53 套件,cargo test --workspace --all-features)。安全审计修复后基线:aws-lc-rs 已从依赖树彻底移除(rustls + ring 为唯一密码学后端)。
安全审计修复项
v1 审计修复(9 项代码 + 4 项文档):
detection.rs:VmLk字段名修正(原MaxLockedMemory不存在于/proc/self/status)runtime.rs:start()控制线程失败时回滚状态到Createdstatic.rs:read_range统一使用open_nofollow(TOCTOU 符号链接窗口)cert_manager.rs:代际 ID 溢出改用saturating_addquic.rs:cipher_suite()从negotiated_cipher_suite()读取实际协商结果audit.rs:clear()增加置None清理残留字节supervisor.rs:DomainSupervisor::shutdown清理queuesChildSetsni.rs:Sniprovider→SniProvider;SNI 统一to_ascii_lowercase()graph.rs:InsufficientResources字段语义修正 +worker_id_counter溢出保护
v2 综合审计(31 个任务,约 100 个子任务):2 CRITICAL + 4 HIGH + 9 P1 MEDIUM + 9 P2 + 8 LOW
- AuthMiddleware 凭据校验(默认
require_non_empty,可选恒定时间比较) - QUIC 流表索引(H3 stream ID 取模 u64 空间)
- H3 响应大小限制(
drive_h3强制max_response_bytes) - TCP 连接表 off-by-one(
free_stackO(1) 槽位) - ForwardLease Drop(panic 时防连接池泄漏)
- WAF NULL 字节过滤 + SQLi/XSS/路径穿越模式扩展
- 私钥零化(
Zeroizing<PrivateKeyDer>) - CORS 安全默认(
allow_origin默认为空) - X-Forwarded-For、ct_compare black_box、QUIC STOP_SENDING 独立解析、CRYPTO 缓冲 65536、ChunkedDecoder trailer 8192、TimerWheel 钳位、连接池精确索引
v3 22 维度审计(4 High + 21 Medium + 18 Low):
- BPF
bpf_redirect_mapflags 改为XDP_PASS detect_locked_memory_kb用getrlimit(RLIMIT_MEMLOCK)读取上限ct_compare衍生函数添加 black_box- 指纹评分模型引入白名单/黑名单
- 指纹向量槽位冲突修复(新增
TlsAlertSig/QuicExtOrder/TimingRttMs独立变体) DecisionAction→EnforcementAction映射、ForwardEngine无白名单 fail-closed- LRU/FIFO 用 BTreeMap O(log n)、Histogram Prometheus 格式、
PermissionSetu16、QoS 继承、TCP ACK 校验、审计脱敏
v4 22 维度系统级再审计(6 P0 + 12 P1 + 20 P2):
ct_compare全函数 black_box、ChunkedSig槽位拆分、Blacklist FxHashSet O(1)- TCP SynReceived 簿记修正、
ExpectationConfig布局对齐、/metrics Bearer 认证 - QPACK 总字节上限接线、
ForwardEngine三态、Histogram 双花括号、timer_wheel 死重移除、UMEM incref TOCTOU、smuggling 去重、escape_json 去重
v5-v7 深度再审计(多轮闭环):
- QUIC 保留位 Fixed Bit(0x40) 校验(RFC 9000 §17.2)
- BPF
queue_map跨 crate 缺失(RustBpfMaps移除残留字段) - BPF 分片策略首分片逃逸(
frag_off & 0x3FFF,重编 .o) - WAF NULL 字节 SQLi fail-open 修复(就地压缩删除,保留 NULL 后载荷)
- runtime
assign_domain防超卖 +extreme_planner容错 - 指纹评分 RTT 维度覆盖、
XdpPolicyWriter恒 Err 移除、死代码清理(workspace 0 警告)
v8 全链路修复与加固(zenith-fix-hardening,246 项审计发现中可落地项):
- 恒定时间比较(CORE-001/002/026):
ct_compare5 函数移除提前返回,长度差经累加器聚合,消除令牌/签名时序侧信道 - FramePool/Ledger 一致性(CORE-004/006/007/008/009/011/012/013/023/024/031):release 错误路径回滚、守恒等式异常路径不破坏、双重计数修正
- L4 转发资源耗尽(APP-010/030):中继 SO_RCVTIMEO + splice 超时双向 shutdown 回收半开连接
- HTTP/1-2-3 解析(HTTP-002/004/015/016/020/023/027/035):HPACK 动态表溢出、CONTINUATION 非法通过、QPACK Huffman 位复核(HTTP-025 为审计误报);额外修复 hpack
decode_integer绝对/相对步长 bug(http2 10 fail 清零) - 0-RTT 重放/降级(TLS-003/004/011):默认
max_early_data_size=0+ 60s 重放窗口 + TLS1.3 强制校验 - eBPF/XDP 过滤链(NET-016/011/010/013/014):默认 Bank 走
xdp_main、IPv6 扩展头 PASS、分片策略 1 fail-closed、白名单单一权威来源(WSL2 无法真实挂载,静态修复 +make -C bpfclang 编译验证) - WAF 误报收敛(APP-014/015/017):裸单字符操作符/内网 IP 全段扫描收敛,威胁仍 403、良性 200
- 系统/运行时/代理(SYS-005/006/008/011/014/016/021/024/026 + APP-023/026/028 + NET-018/019/028):背压账本、自动降级阈值、CPU 亲和映射、Cache-Control 严格合并、审计环形缓冲 fail-closed、Header 合并 DoS、H2 响应头上限、HalfOpen 限并发、带宽真实节流、CIDR 匹配、跨族通配、SYN-ACK ISN 校验
- TCP 状态机加固(NET-020/021):
handle_new_syn非监听 fail-closed、off-path FIN/RST 接入is_seq_in_rcv_window窗口校验 - 错误分层(ENG-006/007/012/013/015):
ServerError::Http3统一 H3 双路径、WebError结构化、前缀整数/varint 收敛 core、方法单一解析器 - H3 coalesced 1-RTT 竞态:quic_server 三处守卫(coalesced long/short + 独立 short 路径)握手未完成时推迟到 pending_1rtt,消除 DecryptError
- 验证:h2spec 146/146、h3spec 49/49、四协议 curl.exe 全 200、IPv6 200、wrk 55,847/79,006 req/s(远超 25k 门槛)、hping3 SYN 514k/UDP 902k 洪水后存活、威胁 403/良性 200、JA3/JA4 阻断(含 H3 QUIC)、L2/L3/L4 23/23+10/10、热更新 18/18
🛠️ 构建要求
- Rust 1.97.1+(Stable,禁止 Nightly/Beta),edition 2024
- Linux 内核 5.4+(启用
linux/ebpf/runtime特性时) - libbpf 1.0+(启用
linux/ebpf特性时) - Windows/macOS:无需特殊依赖,自动降级到
std::net
📜 License
Zenith 采用多许可证模型发布,您可以为自己的用例任选其一:
- GPL-2.0 — 见 LICENSE-GPL2
- MIT — 见 LICENSE-MIT
- Apache-2.0 — 见 LICENSE-APACHE
完整的选型指南、企业支持与闭源商用方案请参阅 COMMERCIAL.md。