I recently started a new big project based on my favorite technological stack. OpenBSD for the main system. Elixir and Erlang for the language. Phoenix for the web framework. Ecto for the database framework.

You seems a bit disturbed. Lot of people are actually using Linux in production environment, maybe with Docker or other containerization things. Well, to be honest, I am really looking forward for anykernel (mirageOS) and unikernel (rumpkernel) technologies. I tried these two projects some months ago, but, seems not really stable to use them in production environment.

In other hand, OpenBSD is still easy to maintain, secure and stable by default. Since some version, OpenBSD has an integrated hypervisor called vmm. This supervisor gives you the ability (like any other virtual machine technology) to spawn many virtual machine on the same host. Is it working? For sure! OpenBSD Amsterdam is hosting actually for the 200 virtual machines on OpenBSD servers. Lot of people are using them right now, and, on my case, I use my own for long time now (more than 6months).

# Deploying OpenBSD

I think you can find a lot of decent tutorial on the web about how to install OpenBSD and deploy it on one or many server. To be honest, I think OpenBSD installed is actually so easy that anyone can install it with closed eyes. In my case, I think it will be a little different. I want to create an automatic deployment of OpenBSD with only a small part of required software to work for my project.

My idea is to create a memory only OpenBSD system image based on OpenBSD ramdisk kernel. With this kind of application, one complicated things is to manage the state. On another project in another life, we used FreeBSD as memory only operating system. It was a really great idea but required lot of hack around due to the software stack and the legacy. Distributed application can solve a part of this problem.

# Deploying Elixir

Elixir is a distributed language based on Erlang software.

# Bootstrapping Phoenix Framework and Ecto

Phoenix Framework and Ecto are probably the two main used projects when you want to create a web service with Elixir. Phoenix will manage the HTTP server and the full stack to create the contain and route the requests. Ecto is the main component to manage database like PostgreSQL, MySQL or MSSQL.

# Managing Goddamn States

Programming is about naming and managing states. Where to find them, how to store them, how to modify them. This is a long and sad love story…

# Resources

# Thanks