Memory safety without giving up performance.

We migrate C and C++ code to Rust one module at a time, behind the interfaces the rest of the product already uses. Each module becomes memory-safe and thread-safe, compiles to native code without a garbage collector, and is verified against the original with differential tests and benchmarks.

  • Rust
  • C++
  • CMake
  • Python
  • WebAssembly
  • Docker
  • C to Rust
  • C++ to Rust
  • FFI and the C ABI
  • bindgen and cxx
  • Fuzzing
  • Differential testing
  • Benchmarks
  • Multithreading
  • Memory safety roadmaps
  • Security reviews
  • Dependency audits
  • Cross-compilation

More than memory safety.

Memory safety errors account for about 70% of serious security vulnerabilities in large C and C++ codebases.⁠[1][2] In Android, they fell from 76% of vulnerabilities in 2019 to 24% in 2024 as new code moved to memory-safe languages.⁠[3]

We start where the risk is highest: parsers, network protocols, file formats, and other code that handles untrusted input. Each module is rewritten behind the same interface, verified against the original, and switched over, while the rest of the product keeps shipping.

  1. C++ module in production
  2. Rust module behind the same interface
  3. Same tests, fuzzing, and benchmarks
  4. Rust module in production
  5. C++ module retired
Memory safety
Ownership and borrowing rule out use-after-free, double frees, and dangling pointers at compile time, and bounds checks stop buffer overflows, without a garbage collector.
Safe concurrency
Data races are compile-time errors, so work can be parallelised across cores without introducing a new class of bugs.
An expressive type system
Algebraic data types, pattern matching, and traits keep invalid states out of the program. There are no null references, and errors are values that must be handled.
Native performance
Zero-cost abstractions, no garbage collector, and predictable memory use, benchmarked against the original on your workloads.
Interop with C and C++
Rust calls C and C++ and is called from them through the C ABI (bindgen, cxx), so the two share one build while the migration runs.
Tooling
Cargo, Clippy, and rustfmt, with testing, benchmarking, and documentation built in, and dependencies audited for known vulnerabilities (cargo-audit).

Regulation is moving to memory-safe code.

The EU now holds software manufacturers liable for exploitable vulnerabilities and requires security updates for the whole support period. In the US, federal guidance names C and C++ in new critical infrastructure products a bad practice and asks for a memory safety roadmap.

A migration plan answers both: which modules move to Rust, in what order, and how the rest is kept safe until then.

What regulators now expect

EU Cyber Resilience ActRegulation (EU) 2024/2847. Reporting from 11 September 2026, full application from 11 December 2027.

Software and connected devices sold in the EU must ship without known exploitable vulnerabilities, get security updates for their support period, and have actively exploited ones reported within 24 hours. Fines reach €15 million or 2.5% of worldwide turnover.

EU Product Liability DirectiveDirective (EU) 2024/2853. For products placed on the market from 9 December 2026.

Software counts as a product, and its manufacturer is liable for damage caused by a defect, including a security vulnerability left without an update.

EU NIS2 DirectiveDirective (EU) 2022/2555. Applicable since 18 October 2024.

Essential and important entities, from energy and health to manufacturing, must secure their supply chain, including how the software they use is built and how its vulnerabilities are handled.

Back to the Building Blocks (US)Report of the Office of the National Cyber Director, 26 February 2024.

Asks software manufacturers to adopt memory-safe programming languages, to remove whole classes of vulnerabilities instead of fixing them one at a time.

Product Security Bad Practices (US)Joint guidance of CISA and the FBI, January 2025.

New products for critical infrastructure written in C or C++, where a memory-safe language could be used, count as a bad practice, and existing products should have a published memory safety roadmap by 1 January 2026.

Example of what we deliver.

An ERP for liquid cargo operations: inventory, ownership transfers, blending, and transport documents in one system, with role-based access and a full audit trail. The web and desktop applications share one Rust core, and the desktop application works offline and syncs when the connection returns.

  • 96%of operations recorded on the day they happen, from a little over half
  • 79%faster to close the month (from two weeks to three days)

How we work.

  1. 01Measure first

    We profile the code and record a baseline (tests, benchmarks, and known crashes) before we change a line.

  2. 02Highest risk first

    We start with the modules that handle untrusted input, where memory errors do the most damage.

  3. 03No big rewrite

    One module at a time behind the existing interface, so the product keeps shipping and every step can be rolled back.

  4. 04Same behaviour, proven

    Each Rust module passes the original tests, fuzzing, and differential tests against the C or C++ version before it replaces it.

  5. 05Performance kept

    Every module is benchmarked on your workloads before and after the migration, and a regression is treated as a bug.

  6. 06Direct communication

    You talk directly to the engineers writing the code, so questions are answered by the people who know the system.

  7. 07Your team can continue

    Idiomatic, documented Rust, reviewed with your engineers, and a written roadmap for the rest of the codebase.

  8. 08Fair price, no surprises

    A fixed price for each agreed module, quoted after a free review of the code.

A first release (MVP) built to the standard of a finished product.

New software is judged against the mature products people already use, so we build the first release as a complete product: every workflow in the agreed scope, together with the admin interface, access control, reports, notifications, and the infrastructure it runs on (automated deployment, backups, monitoring).

The engineers who build the release also agree its scope with you. Common parts start from components we have already tested, so most of the time goes into your workflows, built on an architecture that scales as the business grows.

Rethinking the startup MVP, by Linear

What happens after you write to us.

  1. An engineer replies with first questions. We then discuss the requirements with you, by email, on a call, or in person.
  2. The scope, the milestones with their acceptance criteria, and the price, within a week.
  3. You talk directly to the engineers writing the code and receive daily updates, so decisions and adjustments happen quickly.
  4. You receive the source code, the documentation, and access to everything we set up.
  5. You stay supported well beyond the first release. We maintain, refine, and extend your product as your needs grow, keeping it fast and reliable.

MVP package: the first production release

€9,200Standard price:€11,500−20% founding client offer

6–8 weeks from agreed scope to launch

  • Consultation and project scoping, free
  • UI/UX design
  • Frontend, backend, and integrations
  • Testing, deployment, and documentation
  • Bug-fix guarantee for 3 months after launch
  • Source code and a documented handover
What does founding client mean?

After launch, you agree to a short written interview for a case study. We agree what gets published before the project starts.

Terms

EU companies with a VAT number pay exactly this amount (reverse charge).

Questions about this service

Do we have to rewrite everything in Rust?

No. Most products move the modules that handle untrusted input or run concurrently, and keep the rest in C or C++ behind a safe interface. The roadmap says which parts to move and in what order.

Will the Rust version be slower?

In most cases, performance is on par with C and C++. Rust compiles to native code (LLVM) without a garbage collector, and every module is benchmarked against the original on your workloads.

Can Rust and C++ run in the same product?

Yes. Rust calls C and C++ and is called from them through the C ABI (with bindgen or cxx), so both share one build for as long as the migration runs.

Does this make us compliant with the Cyber Resilience Act?

It removes the class of vulnerabilities behind most serious security bugs, and the roadmap shows how the rest will follow. The Act's other duties (vulnerability handling, security updates, and reporting) still apply, and we can help plan them.

Do you work on embedded code?

We take embedded targets on as a feasibility question first: whether the toolchain, the memory budget, and the vendor libraries allow Rust, answered with a prototype on the device.

Let's talk about your project.

Schedule an online call (optional)