ProvenPort modernizes source-less .NET Framework binaries to modern .NET — and proves the modernized build behaves identically to the original. The binary itself is the golden master.
The problem
Two decades of .NET Framework left organizations running DLLs whose source is lost, whose authors are gone, and whose behavior nobody dares touch. .NET Framework is now legacy, but migrating a binary you can't read is a leap of faith.
The asset is a compiled binary. Reverse-engineering it produces code that rarely behaves — or even rebuilds — like the original.
The modern runtime quietly changed subtle behaviors — numbers, text, dates, formatting — with no warning at build time. A "clean" port can still be wrong.
Rewriting code is easy to do and impossible to trust. What's missing is evidence that the new build does exactly what the old one did.
The approach
Instead of trusting the modernized code, ProvenPort measures it. It establishes the original binary's exact behavior, reproduces the same conditions on modern .NET, and compares the two. Differences are reconciled with verified, behavior-preserving changes until the old and new builds agree.
Conversion alone isn't enough for software you can't afford to break. ProvenPort delivers a modern build and the evidence that its behavior matches the original — the thing you actually need to sign off a migration.
How it works
A repeatable process where every change is behavior-preserving and equivalence is verified — not assumed.
Why it's hard
The difficulty isn't producing modern-looking code — it's making it actually behave like the binary it replaces, and being able to demonstrate it.
Reconstructed code can look correct while being subtly wrong. We hold the result to the binary's exact behavior.
The modern runtime changed behaviors the compiler will never flag. We know where to look — and how to restore the original.
Equivalence is established by measurement, producing an auditable result you can stand behind.
Bridging that gap takes deep expertise in .NET internals paired with a system built to prove, not assume.
Proof
For each library, ProvenPort modernizes the legacy binary, then runs the library's own test suite against the result. Independent, third-party evidence of equivalence.
| Library | Domain | Tests passing | Status |
|---|---|---|---|
| MathNet.Numerics | Numerical computing | 20,908 / 20,958 | validated |
| Humanizer | Text & localization | 15,023 / 15,023 | validated |
| Markdig | Markdown parser | 3,795 / 3,796 | validated |
| CsvHelper | CSV parsing | 1,058 / 1,058 | validated |
| YamlDotNet | YAML serializer | 885 / 890 | validated |
| Fastenshtein | String distance | 28 / 28 | validated |
Residual cases reflect behavior that only exists in newer target frameworks — absent from the original binary, and faithfully absent from the port.
In one validated library, the modernized build initially produced a different result for a specific input — a genuine behavioral difference introduced by the modern runtime, invisible at build time. ProvenPort surfaced it, pinpointed the cause, and restored the original behavior. Catching that class of silent change is the whole point: not just porting, but knowing the behavior is identical.
Author–market fit
Sébastien Lebreton — Principal Engineer on Microsoft's Visual Studio Tools for Unity, creator of Reflexil (the IL assembly editor), and co-founder of DataGalaxy. ProvenPort sits squarely at the intersection of his expertise: IL, decompilation, debuggers, and .NET runtime internals.