Getting Started with 3-D Printing: the Software

This column is the second of a two-part series on 3-D printing. In Part I, I discussed some of the overall concepts behind 3-D printing and gave an overview of some of the hardware choices that exist. In this article, I finish by explaining the different categories of software you use to interface with a 3-D printer, and I discuss some of the current community favorites in each category.

In part due to the open-source leanings of the 3-D printer community, a number of different software choices under Linux are available that you can use with the printer. Like with desktop environments or Web browsers, what software you use is in many cases a matter of personal preference. This is particularly true if your printer is from the RepRap family, because there's no "official" software bundle; instead, everyone in the community uses the software they feel works best for them at a particular time. The software is still, in some cases, in an early phase, so it pays to keep up on the latest and greatest features and newest releases. Instead of getting involved in a holy war over what software is best, I cover some of the more popular software choices and highlight what I currently use, which is based on a general consensus I've gathered from the RepRap community.

In part due to the rapid advancement in this software, and in part due to how new a lot of the software is, in most cases, you won't find any of this software packaged for your distribution. Installation then is a lot like what some of you might remember from the days before package managers like APT. Each program has its own library dependencies listed in its install documentation, and generally the software installs by extracting a tarball (which contains precompiled binaries) into some directory of your choice.

If you are new to 3-D printing, you might assume there's a single piece of software that you download and run, but it turns out that due to how the printers work, you need a few different types of software to manage the printer, including a user interface, a slicer and firmware. Each piece of software performs a specific role, and as you'll see, they all form a sort of logical progression.


The firmware is software that runs on electronics directly connected to your printer hardware. This firmware is responsible for controlling the stepper motors and heaters on the printer along with any other electronics, such as any mechanical or optical switches you use as endstops or even fans. The firmware receives instructions over the USB port in the form of G-code—a special language of machine instructions commonly used for CNC machines. The G-code will include instructions to move the printer to specific coordinates, extrude plastic and perform any other hardware functions the printer supports.

Often 3-D printer electronics are Arduino-based, and the firmware as a result is configured with the same software you might use to configure any other Arduino chip. Generally speaking though, you shouldn't have to dig too much into firmware code. There is just a single configuration header file you will need to edit, and only when you need to calibrate your printer. Calibration essentially boils down to telling your printer to do something, such as move 100 millimeters along one axis, measure what the printer actually did, then adjust the numerical settings in the firmware up or down based on the results. Beyond calibration, the firmware will allow you to control stepper motor speeds, acceleration, the size of your print bed and other limits on your printer hardware. Once you have the settings in the firmware calibrated and flash your firmware, you shouldn't need to dig around in the settings much anymore unless you make changes to your hardware.

If you use a MakerBot, your firmware selection is easy, as it has custom firmware. If you use a RepRap, the current most popular firmwares are Sprinter and Marlin. Both are compatible with the most common electronics you'll find on a RepRap, and each has extra features, such as heated build platform and SD card support. I currently use Marlin (Figure 1) as it is the default recommended firmware for my Printrbot's Printrboard. In my case, I needed to patch the default Arduino software so it had Teensylu support, and I needed to install the dfu-programmer command-line package (which happened to be packaged for Debian-based distros).

Figure 1. Marlin Configuration with Arduino Software


Kyle Rankin is SVP of Security and Infrastructure at Zero, the author of many books including Linux Hardening in Hostile Networks, DevOps Troubleshooting and The Official Ubuntu Server Book, and a columnist for Linux Journal. Follow him @kylerankin