Three years ago, I created Rustsim in order to group all the Rust projects I have been working on and maintaining since 2013. Creating this organization on GitHub was one step further towards securing the future existence and maintenance of these Rust crates, some of them being quite popular today like nalgebra or nphysics. Today, I am going one step further and create my company named Dimforge.
Dimforge is a French EURL (Entreprise Unipersonnelle à Responsabilité Limitée), which can be translated to "single-member limited liability company". It aims to be an open-source company which develops high-quality crates for linear algebra and physics simulation. The decision to create Dimforge comes from both personal and communitarial motivations:
- Creating this company is a way for me to further show my dedication to the Open-Source Rust community by strengthening my involvement through a legal entity. I always desired to work on my Open-Source projects full-time. This company creation is one step further towards making this happen in a near future.
- I will be able to setup partnerships with other companies to fund the development of new features, and perhaps setup paid support plans.
- If this becomes financially possible in the future, I will hire other Rust developers to either work on my current projects, or on new projects they like if they are relevant to our objectives.
How is Dimforge funded?
Right now, Dimforge is entirely funded by me. In the short term I see the main sources of revenue for the company to be:
- Donation crowdfunding through GitHub sponsor.
- Development of a partnership with one of the industrial users of Rapier (more about this new project in the last section).
If you supported me, @sebcrozet directly through GitHub sponsor or Patreon, thank you again! None of this would be possible without your help! Please consider switching to the Dimforge GitHub sponsor account. That would be extremely helpful, especially for the first few years after this creation.
I will close my personal Patreon and GitHub Sponsor account at the end of this month.
What does this change?
From your point of view, as a end-user, this does not change anything. You can still use our crates freely. This should actually reassure you that I am deeply committed to these crates, and will continue to maintain and improve them for a long time in the future. There is however one exception: nphysics.
I you read Dimforge's landing page thoroughly, you may be surprised to see that nphysics, the 2D and 3D physics engine I have been developing for the past 6 years, is now in passive maintenance mode. And it is even more surprising considering I made a post last year showing how I intended to develop nphysics for several years to come.
Did I lie? No. My desire to continue the development of nphysics was real, and still is but in a different form. nphysics has a fair share of virtues and problems. Some of them are plain unsolvable considering the current design of nphysics. Performance and lack of serialization for example are two recurring problems. This is why I am stopping the active development of nphysics in order to work on its much needed successor Rapier!
Rapier: the flagship project of Dimforge
Rapier is the new physics engine I have been working on secretly during the past 5 months. You can see its work-in-progress website there: https://rapier.rs.
Rapier will be open-sourced in a few days, and will be properly announced on a dedicated blog post that includes benchmarks.
Just like nphysics it is split into two crates: rapier2d and rapier3d for 2D and 3D physics respectively. It is designed to be fast and multithreaded right from the beginning. It is also designed to require less incremental compilation times because the data structures it defines are not generic.
Rapier runs 5 to 10 times faster than nphysics, making it close to the performance of (the CPU version of) NVidia PhysX and slightly faster than Box2D.
I am still at the beginning of the implementation of Rapier though, so many features are still missing. However some long-requested features like (optional) parallelism, and (optional) SIMD have already been integrated to ensure their long-term maintenance and improvement.
There already are a few key features that makes Rapier stand out. Since they may affect compilation times and/or performance, they are disabled by default and need to be enabled explicitly through cargo features. They are however both enabled on our official NPM packages.
- Serialization: every physics component is serializable using
serde, meaning you can take a deep snapshot of the physics state and restore it later. This snapshot can even be saved on disk or sent through network.
- Cross-platform determinism: if the
enhanced-determinismfeature of Rapier is enabled, you it will behave in a bit-level cross-platform deterministic way in all platforms that comply with the IEEE 754-2008 floating point standard. This means that if you run the same simulation with the same initial states on two different machines (or on a browser) you will get the exact same results. Here "bit-level" determinism means that if you serialize the physics state after the same number of timesteps on two different machines, you will obtain the exact same byte array for both: you may compute a checksum of both snapshots and they will match. All this doesn't apply to 8- and 16-bits platforms, and on platforms that don't comply to IEEE 754-2008 strictly.
The start of a new adventure
This creation marks a milestone in my personal life, and it strengthens my dedication to Rust Open-Source development. This new adventure is not without risks but also has its fair share of opportunities. I am convinced that Rust, the language, is doomed to succeed, and that it has one of the best community one can hope for. So it is a privilege to be part of this community and do my best to provide high-quality FOSS crates.
Thank you for your support!