Back in the late 80s and early 90s, you still had to dive deep into the hardware to get decent software. This meant checking hardware-related register values to get mouse coordinates via interrupt 33h, for example. 1 Or write inline assembler within Turbo Pascal procedures or PowerBASIC functions. Those were the programming languages I grew up with. Later, others came along, but I never really got used to them. I am a “BASIC guy” as I write in my README on Codeberg.2
Today, these kinds of things are abstracted away by operating systems and powerful frameworks. That’s a good thing. It really saves you a lot of work. On the other hand, it comes with downsides that you wouldn’t have without this kind of abstraction. For small, precise tools that require deterministic and robust behaviour, it’s usually not helpful. Especially if the software is supposed to be “grown-up” software.3
If you think I reject modern frameworks and concepts, you are mistaken: I am just as much a fan of Python or a Django web framework. My point is that nowadays it is more important than ever to master tools beyond the mainstream.
Tools that stay close to the compiler and generate cross-platform, small and native single-file binaries, with or without a GUI. Modern languages such as Rust or Go have only limited capabilities in this regard. A recent and worthwhile article, “Why PureBasic Is Potentially the Last Surviving Cross-Platform Systems GUI Language” explains why.4
Screenshot of the PureBasic editor on Linux
For me, this is essential, for example, to create customised pentesting tools that deliberately “throw” incorrect content lengths of HTTP requests against an API. To deal with NTFS filestreams or to stay “under the radar” from common antivirus and EDR software. I have every right to rant about this snake oil. My ‘clipboard auditor’ for extracting login details has not been detected anywhere for decades.5
The use of FreeBASIC, PureBasic or Lazarus/FreePascal is a conscious decision after scope or specifications have been set. For tasks where clarity, control, determinism and longevity are crucial. No ideological vendor talk or ‘we use a hammer for everything’ approach.
Screenshot of the Lazarus/Freepascal editor on Linux
If you look at today’s industrial landscapes, you will discover RS232 interfaces, VisualBasic in Siemens PLC systems, PGs from retro times and modern control PCs that are slightly better. Starting a web browser often pushes these to their memory and performance limits.
Siemens PLC S5 PG from the 1990s, still in use today
If you have challenges that seem unsolvable, feel free to contact me.
Best regards,
Tomas Jakobs