Programming Environment

Before you get started programming, you’ll need to set up your programming environment. We highly recommend you set up your own computer as your development environment, and we believe that real-world, industry-standard tools that are used by millions of people every day are the best tools to use for your development environment. This course will focus on providing you insight into using these tools.

To write and compile C code for this course, you will need the following tools:

We additionally use the following debugging tools:

Setting up an environment that can install and run those utilities will depend on what operating system you are using:


On Windows, we highly recommend setting up Windows Subsystem for Linux 2 (WSL2) with your favorite distribution (we recommend Ubuntu). WSL is a virtualization tool that will allow you to run an installation of Linux, which has much better support for the tools used in this course. After setting up WSL, you may need to install the necessary software for this class using your distribution’s package manager.

There two guides are useful for getting started with visual development:

Mac OSX:

If you are using a computer running MacOS, there are a few considerations to keep in mind:

  • OSX is a Unix-like operating system, but is not Linux. As a systems course, there will be times that you will encounter unexpected behavior and will have to find workarounds. Where possible, we will support OSX as best as possible.

  • However, valgrind does not have an official release for the most recent MacOS versions, making debugging memory-related errors impossible to do locally. If you would like to test your programs with valgrind (which we highly recommend you do!), you should compile and test your programs on EWS or another machine that can run valgrind.

To develop on MacOS, you’ll need the following prerequisites:


On Linux, setting up your environment should be as simple as installing the required tools (if you do not already have them) via your distribution’s package manager. For Debian-based distributions, you should take a look at the build-essential package to install GDB and GCC. For Arch, the base-devel package should install most of this course’s prerequisite tools.

Alternative: EWS Labs

If for any reason you are unable to or do not want to develop on your local machine, you may work remotely on an EWS machine. EWS will provide a limited Linux development environment which is already set up with most of the tools needed for this course. For more information, see the EngrIT guide here:

Note: Running on EWS requires you to run module load gcc each time you log in to ensure you have a recent version of the compiler in use.