BY MATT WILLIAMS ON MAR 1, 2018 8:06:26 AM
Our website says, "Metaswitch provides innovative solutions for all service providers", which is true, but what does that mean for developers like me?
We write software for telecoms or networking. In both cases, we're implementing function that is
- complex - for example, TS 24.229 (https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=1055) (the spec from which I do most of my development) is >900 pages, and that only covers a fraction of the total behavior of just one of our many products
- efficient - we need to keep the amount of hardware that the customer has to purchase and operate as low as possible, meaning that our software needs to provide high throughput given the CPU and memory used
- low-latency - the latency between receiving a request and replying or forwarding needs to be very low (for many applications <10ms) - not just in the average case, but even in the 99th percentile
- reliable - availability is measured in '9's (e.g. 5 '9's means available 99.999% of the time, 6 '9's is 99.9999%) and our customers expect at least 5 '9's - including planned maintenance such as upgrades.
We've previously written in C, C++, Java, Scala, Python, and even small bits in Erlang and Lua. While these have served us well,
- some (such as C and older C++ versions) are showing their age, and it's harder to be productive in them
- some (in particular, JVM-based ones such as Java and Scala) are garbage-collected, and this can cause unacceptable variation in latency
- some (such as Python) are quick to develop in, but it can be hard to get great performance and it's hard to be sure that code is reliable
- using a selection of languages means that developers need to learn them all, which is expensive.
So we really wanted to settle on one main language - efficient to develop in, performant and robust.
We looked at a number of options, including the latest C++, and Go, but settled on Rust (https://www.rust-lang.org/en-US/). Why?