Bare-Metal Programming
Computers are fantastically complex, and become moreso every day. Unfortunately, computer performance and reliability have not grown nearly as rapidly. There are many opinions on why. This is ours -> programmers have become enamored with “elegant” solutions that are brutally brittle. They seek quick Results, but give up long-term Control.
This comes in many forms, but the most pervasive and pernicious is the tangle of third-party imports, libraries, frameworks, etc. upon which most current software is built. Such tools are tremendously useful in certain situations:
- Education - Where abstracting away some details allows you to better focus on others.
- Portability - The higher the diversity in target platforms, the higher your programming paradigm needs to rise.
- Freedom of Implementation - Allows the creator of a software capability to change how something is done without changing what is done.
These are extremely powerful concepts, and much of the awesome technology in the world was built on them, but these benefits come with costs:
- Shallow Learning - Standing on the shoulders of giants is great - but can you find a way to solve your problem when you have 512kB for your code? For developers who never venture far from 1GB-per-browser-tab Javascript apps that rely on 7 Github repositories, low SWaP-C systems are a real challenge.
- Opaque Systems - “It just works” often leads to “it’s not working, and nobody knows how it works, let alone how to fix it.”
- Code Bloat - Using OPC (Other People’s Code) can be a good way to test a concept, but code that is broadly used needs to cover a lot of bases in terms of hardware (x86, ARM, RISC-V, 32 bit, 64 bit) and software (Linux, macOS, Windows, ZephyrOS) - and that means more code.
That is why MRT prefers to create our own resources. There is, of course, a practical limit to this view.
“If you wish to make an apple pie from scratch, you must first invent the universe.” - Carl Sagan
We are not in business to make toys from “scratch” or cobbled together from a bunch of Github repos - we are in business to create tools that impress warriors and delight buyers. Bottom-line: expect to see a lot of hand-rolled C (not C++) and Assembly in our products.