Tools, Not Metallurgy
Imagine if every time you wanted to acquire a wrench, you had to use a forge. And not just any forge, but the exact type of forge that the wrench designer preferred, plus all of the exact tools that they preferred when inventing this wrench.
Your 10-lb hammer will not suffice if the wrenchsmith preferred a 9.5-lb hammer. And if the 9.5-lb hammer was not made in the exact type of forge you already have, then you will need to acquire a forge that produces 9.5-lb hammers as well as all the tools needed to run that forge, as determined by the original creator of 9.5-lb hammers.
Sounds reasonable, right?
Let me show you something:
pip install ansibleI would like a tool to manage my server, please. The steps to acquire this tool are:
- Have the exact forge (Python v3.11) that the toolmaker wants.
- Acquire / create dozens of tools (pip packages) with this forge that are not the tool that I want but precursors to it.
- If any of those precursor tools require other forges (eg,
gcc), then acquire and create those as well. - Repeat until I have dozens of tools that I don’t want, plus all the toolmaking ability in the world, as a side-effect of acquiring the one tool that I actually want.
Don’t get me wrong, interpreted languages are neat. For the toolmakers. And who doesn’t love to make tools all day long? But if instead you fancy yourself a user of tools today rather than a toolmaker, you might find that your use case is not the one that gets optimized for.
I recently realized how many quickstarts start with npm or pip or, god forbid, bundle. I don’t want your forge and the mountain of tools behind it! I don’t need the ability to reboot civilization, I just need something to run apt for me.
Rootless containers are a thing now, as are easy-to-use compiled languages with a ton of library support. So my question is: if you know about all of these things and even build support for them, then why on earth does the documented introductory approach still always default to building everything yourself? Why are we encouraging the users with the least experience to go make a mess of their systems?
I’m picking on Ansible here only because it was a recent need. But the defaults matter, and this madness is everywhere.
It’s amusing to me how rooted people are to their own personal context. Even when undertaking the act of building a tool for other people to use, most toolmakers cannot escape the context of being a toolmaker.
We can do better.