Dockerizing a Programming Language
A compiler is just a software application after all.
I have a confession: for the last eight years I have been avoiding using Docker. It’s not that I don’t understand the value of containers, it’s that the first time I picked up Docker I had a really bad experience. So bad it convinced me that this technology was too difficult for me to master. I would find out later that because of the nature of what I was being asked to do with Docker at the time (and because I was and still am primarily a Mac user) I had managed to ran into most of the really nasty edge cases that plagued the early years of Docker. But by the time I realized that, I had shifted over to legacy technology full time where most of our problems were trying to roll out version control or basic testing … forget about Docker.
A bit later I switched over to management and it looked like I would never have to face my fears around Docker! Huzzah!
Then came Fault.
Fault is my programming language project. As its design evolved it became obvious that executing Fault specifications was going to require a SMT Solver. That introduced the question of how to correctly manage the non-Go related dependencies of a Go code base. I tried out a variety of different approaches with various levels of success, knowing that Docker was looming in the distance.