1

As we’re moving off OCaml at dialo, we’d like to donate the libraries we built to people who will properly maintain them. We built a highly performant telephony system using OCaml, but as a small team we ended up maintaining too much software for our liking.

We initially built a SIP server implementation in OCaml, which was a perfect fit. We needed to connect it to the rest of our system in a language agnostic way. We chose gRPC and that’s where things got difficult.

At a smaller scale our own buggy implementation of gRPC on top of h2 was good enough. Then we started scaling and at the same time transitioned to OCaml 5.0. The combination of those factors resulted in:

  1. Performance regressions in 5.0 related to memory management, both inside of app code, SIP stack, and inside of h2.
  2. We needed a more robust implementation of gRPC to handle errors and edge cases better.

Long story short we ended up:

  1. Writing our own implementation of http2
  2. Rewriting the gRPC library exclusively for eio to limit the scope together with decent codegen

Then, in late 2025, we had to add new features to the SIP server and something inside us just broke. The SIP server had accumulated quite a bit of legacy code over 3.5 years, so we wanted to rewrite some parts. We were extremely excited to build the new architecture centered around effects — only to discover that user-space effects and concurrency libraries don’t really work well together, since callbacks lose their scope (duh). That was the final straw.

We decided to run two 1-week stints to try rewriting the service in Rust and Go. We ended up choosing Rust. We still miss OCaml, but not having to implement and maintain our own http2/grpc/sip stack is a breath of fresh air.

So here we are — we’re gradually removing OCaml from our stack, and that’s why we’d like to donate:

  • ocaml-grpc - the new code is on dialo branch, eio only at the moment, battle tested on production. It does have some bugs in it but few and it’s pretty solid.
  • haha (http2) - overall good but could be better. We cancel fibers too often, it’s a very low hanging fruit to make it much faster.
  • Our SIP stack — this is currently not open source, but we’re happy to share the source code with the right person or team.

Please write dms to me and feel free to ask me or @adamchol about specifics.

2

Would it make sense to move them under the OCaml Community · GitHub umbrella organization? it’s already home to ~20 libraries and projects forked by or donated to “the community”. Members of the organization are well-established maintainers of the opam-repository, or have been around for some time.
Have a look at the org’s manifesto: GitHub - ocaml-community/meta: Administration and documentation for the ocaml-community organization. · GitHub.
It’s also possible to host the libraries there and get write access to specific repositories without being a member of ocaml-community GitHub’s organization.

Would it make sense to contribute the SIP server to the Mirage organisation ( MirageOS · GitHub )?
Assuming the implementation could be open sourced under a compatible license. They already have RFC implementations for various protocols, adding a SIP implementation seems like a natural fit.

4

It only makes sense if there’s maintainers who are willing to take over the maintenance. Otherwise ocaml-community becomes a graveyard for dead projects. Contributing a project to some org does not magically revitalize it, there still need to be some people willing to work on it and ocaml-community definitely has some projects which could use some help maintaining already. Increasing the potential workload is counterproductive.

5

I think it’s a good fit at least for the parsers and serializers which are 30% of the job but nevertheless useful. The state machine implementation is a bit meh but we could have it open source under our organization in archived state and refer to the mirage os repo for the types.

I’ve previously contributed to ocaml-grpc and would be happy to be a maintainer on that and haha. As to where it should endup, I’m not part of ocaml-community organisation and don’t have permissions to accept a transfer into mirage organisation.

I don’t have time or motivation to work on a SIP server.

7

that’s a good way forward

I can manage the transfer if it’s help, you can reach me on https://ocaml.zulipchat.com/.