Six stages, the five layers they run on, one system spread across several boards, and the targets we ship to.
六个阶段、它们所跑的五层底座、一套系统铺到多块板子,以及我们交付的目标平台。
Before a line of UI exists, the work is a framework: which scenarios, which devices, which apps, and which contract binds them. The platform each capability lands on is a decision with stated criteria, not a default.
An application is a signed, data-only package — UI, manifest, assets, localisation. Every effect it has on the outside world goes through a declared contract, so one bad app cannot take the system down.
The panel is read and clicked directly. No replayed recording, no screenshot comparison — the software frame captured beside each assertion is the same observation that satisfied the assertion.
在还没有一行界面之前,产出的是一个框架:哪些场景、哪些设备、哪些应用、什么契约把它们绑在一起。每个能力落在哪个平台,都是有判据的决定,不是默认继承。
一个应用是签名的、纯数据的包——界面、清单、资源、多语言。它对外的每一个作用都经过声明过的契约,所以一个坏应用拖不垮整套系统。
面板被直接读取和点击。没有回放、没有截图比对——那张和断言取自同一次观测的软件帧,就是证据本身。
Omnistack apps run on AppOS, a five-layer embedded operating system that builds, releases, deploys and rolls back on its own. The layers are not a diagram — a package that crosses one is refused at build time.
A third-party app cannot reach the hardware, the kernel, or another app's state. Everything it can do is something it declared.
Releases are signed, deployed atomically, health-checked, and rolled back to the previous one automatically if a candidate fails to come up.
Logs, resource arbitration and call lifecycles are all bounded. A misbehaving component degrades instead of taking the panel down.
Omnistack 的应用跑在 AppOS 上——一个可独立构建、发布、部署和回滚的五层嵌入式操作系统。 这五层不是一张示意图:越层的包在构建期就会被拒绝。
第三方应用碰不到硬件、碰不到内核、也读不到别的应用的状态。它能做的每一件事,都是它声明过的。
Release 是签名的、原子部署的、带健康检查的;候选版本起不来时自动回滚到上一个。
日志、资源仲裁、呼叫生命周期全都有上界。一个出问题的组件会降级,而不是把面板拖垮。
Systems that span more than one device are where embedded projects actually get hard. Omnistack treats each board as a declared cell of a matrix — what it has, what it does not, and which capabilities must never cross between them — instead of discovering that at integration time.
Every claim a board makes is checkable, because each board's profile states which domains it has, which it lacks and the reason, and which routes belong to it alone. Integration then becomes a sweep over a known matrix rather than a search through an unknown one.
跨多设备的系统才是嵌入式项目真正会卡住的地方。Omnistack 把每块板子当作矩阵里一个 声明出来的格子——它有什么、它没有什么、哪些能力绝不允许跨过去—— 而不是等到联调时才发现。
板子说出的每一句都可以被核对:它的 profile 写明有哪些域、缺哪些域、原因是什么、 哪些路线只属于它。于是联调变成在一张已知矩阵上遍历,而不是在一片未知里搜索。
European two-line indoor unit. Armel target, cross-compiled and deployed over a signed release.
Bedside call unit, sharing one AppOS with the room door and declaring a disjoint capability set.
Runs the real application package before any hardware is involved, including touch and frame assertions.
Flutter targets built, installed and screenshotted on device when the deliverable is a handset app.
欧洲两线室内机。armel 目标,交叉编译,通过签名 Release 部署。
床旁呼叫单元,与病房门共用同一套 AppOS,并声明互不相交的能力集。
在碰任何硬件之前运行真实的应用包,支持触摸与帧断言。
交付物是手机应用时,用 Flutter 构建、装机并在真机上截图核对。