Skip to main content

The Modern PC

Amber Walker
Software Engineering Intern
Table of Contents

A look at the modern Personal Computer #

Ever since I was little, I’ve always had acces to a computer, be it the family computer, or eventually my own custom computer. It was fun to play games and surf the internet on my very own personal computer. My view of a computer was similar to that of a television set. As I grew up, I started to realize all of the interesting things that can be computed with your own PC.

Coding #

I started learning how to make computer programs in which I program the computer to make computations in accordance to instructions — “source code.” The canonical example of a computer program that is typically first taught to students is the infamous “Hello World” program. This is the version I first learned about from The C Programming Language by K&R:

C Code
#include <stdio.h>

	printf("Hello, world!\n");

This is a computer program that writes 15 bytes of data to the stdout buffer. A terminal emulator’s text uses the stdout buffer, so running this program in such an environment would print the text to the screen — magic! Upon further reading about this magic, I come to discover that this simple process involves different stages:

This is the compiling process for C, specifically — different languages may be different
flowchart TD A(Source Code of the Program) B(Code with Comments Removed and Macros Expanded) C(Assembly Instructions) D(Objects) E(libc e.g. glibc, musl-libc, etc) F(Executable Program) G[Linter / Pre-Processor] H[Compiler e.g. gcc, tcc, clang, etc] I[Compiler e.g. gcc, tcc, clang, etc] J[Linker e.g. gcc, ld, mold, etc] A --> G:::action --> B --> H:::action --> C --> I:::action --> D E --> J:::action D --> J:::action J:::action --> F classDef action fill:#a0a

Unix Modularity #

Everything in the diagram happens when one simply compiles the program. On most unix-like systems, calling cc should be sufficient. Though POSIX.1 specifies c99 as a utility, specifically. Every part of this process is modular, I list different C library implementations, different compilers, etc. One could configure Linux distros such as Gentoo (overlay) or Void to use musl; there is an overlay in Gentoo to compile using clang instead of gcc.

Even beyond just C specifically, one can swap out things such as the interactive shell, /bin/sh, SSL library, et cetera. Beyond core features, even high level things such as the display technology, apps, and all are swapable. This makes unix seem like the perfect tool for tinkerers.

Data from Stack Overflow 2022 Survey

However, most people use Microsoft Windows for personal use and development, it seems. Why is this? I think that, at least for personal computers, many PCs come with Windows, and people simply don’t bother to switch / try something new. Similarly with MacOS - though most of the time it would be harder to simply “try” another OS on Mac hardware.

One other reason most people probably stick with Windows is most people probably aren’t “tinkerers,” and are probably looking to play video games and do school work. However, I would argue that people that aren’t “tinkerers” would also benefit from using a “free as in freedom” system. Mainly because — and I truly believe this —

With software, either the users control the program (free software) or the program controls the users (proprietary or nonfree software).
Richard Stallman1

Where it’s software for school work (Microsoft Docs, Powerpoint, etc), career work, internet browsers, et cetera - I truly believe in this sentiment. Users of non-free software are at the mercy of the developers and under the control of that non-free software.

This becomes important when people rely more and more on technology. With things such as online banking, online school work, and online life in general. With how we use our computers in the modern day, freedom becomes that much more important to the end user. However, it seems that freedom is not common among modern PC users. So, what does this mean for the future? Only time will tell.

If non-free software puts tighter restraints on the end users, will they submit or fight for freedom?

  1. The above quote is from Keep Control of Your Computing, So It Doesn’t Control You! ↩︎