I cannot help but speculate on how the software on the Curiosity rover has been constructed. We know that most of the code is written in C and that it comprises 2.5 Megalines of code, roughly[1]. One may wonder why it is possible to write such a complex system and have it work. This is the Erlang programmers view.
First some basics. The rover uses a radioactive power source which systematically delivers power to it in a continuous fashion. The power source also provides some heating to the rover in general - which is always nice given the extreme weather conditions present on Mars.

The rover is mostly autonomous. It takes minutes to hours to send a message and you can only transmit data in limited periods of the Mars day. The rover itself can talk with earth, but that link is slow. It can also talk through satellites orbiting Mars, using them as an uplink. This is faster. The consequence is that the rover must act on its own. We cannot guide it by having a guy in a seat with a joystick here back on earth.
There are two identical computers on the Rover. We note that NASA acts in the words of Joe Armstrong: “To have a reliable system you need two computers”. One of these are always dormant, ready to take over, if the other one dies for a reason. This is a classic takeover scenario as seen in Erlang systems, the OpenBSD PF Firewall and so on. The computers are BAE systems RAD750 computers. They run a PowerPC ISA and have some modest speeds. 200 mhz, 150 or 250 nm manufacturing process and an impressive operating temperature range. It is also radiation hardened and withstand lots of radiation. The memory is also hardened against radiation. It is not an easy task to be a computer on board the Curiosity.

For nearly 7 years I’ve worked at 3 big software companies - all of them with tens of thousands of employees. I also had 5+ years working in research environment, at startups, consultant, or by myself, what gives me a more complete perspective to look at big companies. 

Throughout the time I’ve worked at big companies, I had many philosophical conflicts between what I was experiencing and what I felt was right for myself. In this post I reflect on these conflicts and the my current stand on big companies. 

Not to give much away upfront, but overall making sense of what working at big companies means is an extremely fascinating experience at the end of the day. Although oftentimes this experience may not align with your personal values and how you want to spend your life, it’s definitely quite challenging and provides lot of personal growth opportunities. On the other hand, even if not evolving at the pace you might want, there are lot of hard/soft skills that can be learned at these companies. 

Enough said. Let’s start with the positive aspects and then get to the more contentious ones. 

Improves system security with multi-factor authentication

Easily lock any programs installed on your local computer.

I’ve recently had to upgrade a machine, and have tried to set up various things to happen at initialisation (or “initialization” if you use American spellings). In the process I’ve had to look at which files get read and executing during the startup, and I thought I’d make a little diagram to share my findings, and record them for my own reference next time I have to do this.