Labs · поверхность приложения
Приложение по мерке — и надолго.
Не продукт, перекроенный под вас, — приложение, построенное под ту площадку, где оно работает: образование, промышленность или любая отрасль, с которой вы придёте. Ядро на Rust, которое работает без сети, нативно на каждом экране, и архитектура, где ваши данные остаются вашими.
Не шаблон с вашими цветами. Программа, скроенная под ту работу, для которой она действительно существует.
Класс, производственная линия, выездная бригада — приложение написано под то, как эта работа идёт на самом деле, а не под демонстрацию. Форму задаёт отрасль, а не наоборот.
Подвал, удалённый объект, зона без приёма — работа не останавливается. Устройство хранит истину и сверяется с edge-узлом в тот момент, когда сигнал возвращается.
Никакой учётной записи, из которой нельзя уйти, никаких данных в заложниках. Ядро ваше, записи ваши, а отвечает тот инженер, который это построил.
Четыре цифры приложения, построенного на годы.
Ремесло серьёзного приложения — это ядро, которое охраняет компилятор, которое продолжает работать без сигнала и которое идёт на любой площадке из единого источника истины.
// the core of the app · typed, so a wrong state cannot be reached #[derive(Clone, Deserialize)] struct Job { id: Uuid, site: SiteId, state: State, // Scheduled → OnSite → Done — nothing else is legal readings: Vec<Reading>, synced: bool, // the device knows what the edge has not yet seen } impl Job { /// A job closes only once every required reading is in. fn can_close(&self) -> bool { matches!(self.state, State::OnSite) && self.readings.iter().all(Reading::valid) } }
// works at zero bars · the floor does not wait for a signal fn record(&mut self, r: Reading) { self.readings.push(r.clone()); self.queue.push(Op::Add(r)); // kept on the device, durable self.synced = false; } /// When the signal returns, the device reconciles — in order, idempotent. async fn reconcile(&mut self, edge: &Edge) -> Result<()> { for op in self.queue.drain(..) { edge.apply(op).await?; // the edge is the record; the device, the witness } self.synced = true; Ok(()) }
# one core, every floor it must run on [targets] ios = "aarch64-apple-ios" # a thin Swift shell over the Rust core android = "aarch64-linux-android" # a thin Kotlin shell over the same core desktop = "x86_64 · aarch64" # Windows · macOS · Linux # the logic is written once, in Rust. only the shell changes per floor. # Swift and Kotlin carry the screen; Rust carries the truth.
Почему приложение, построенное под вашу площадку, выигрывает у продукта, перекроенного под неё.
Перекроенный продукт не может быть сделан под вашу площадку — его сделали до того, как о вашей площадке узнали. Приложению, живущему только в сети, нельзя доверять там, где умирает сигнал: ожидание встроено в него. Поэтому мы пишем одно ядро на Rust, охраняем его компилятором и подписываем сами — и поэтому называем цену за измеренное, а не цену с полки.
Ещё до первой написанной строки — как хранится ваша работа. Эта часть не обсуждается.
NDA здесь по умолчанию, а не платная опция. То, что вы передаёте, читает один инженер и больше никто — ничего не продаётся, не раскрывается и не передаётся дальше.
Учётные данные и записи остаются в вашем доме, под минимальными привилегиями. Мы не держим ни одной копии, которая нам не нужна, и ничто не уходит без вашего слова.
То, что работает в вашем доме, вы вправе читать и проверять — никакого чёрного ящика, которому нужно верить не глядя. Машинное отделение остаётся нашим; то, что вы эксплуатируете, — ваше.
Две строки — площадка, где оно работает, и работа, которую оно должно нести. Мы читаем их сами и отвечаем сами.
Это уже на экране в Цюрихе — не в очереди и не в тикете. Инженер, который будет это строить, читает сам и отвечает сам.
·