CSE 403 Topic: Build Systems & Version Control
A build system is a tool for resolving dependencies and compiling, testing, and deploying code. The most important advantage of build systems, historically, is that they automate the process for building and deploying software. A project using a modern build system well will have few or no manual steps required from its engineers to produce a binary artifact, test it, and then deploy it into production.
Version control system (VCS) is a system that records changes to a file or set of files over time so that you can recall specific versions later. Besides using VCS as a stand-alone tool, programmers might interact with it through a code-review system like
Gitlab or Gerrit as well.
Some examples of modern, open-source build systems:
Some examples of modern, open-source VCS:
Interesting resources:
Project ideas:
- most build systems only have first-class support for a few languages. Can you add support for your favorite language to a popular build system?
- dependency management is frustrating and manual in most build systems. Could you automate (part of) it - for instance, automatically determine which version of a library to use?
- builds often fail for silly reasons, like incompatible dependency versions. Could you automatically try to repair the build scripts used by a common build system when they fail?
- when doing merge and rebase in git, manual conflict resolution might be needed. But sometimes you will find this work tedious, sometimes you will find this work surprisingly revealing of potential code quality issue. Can you build a tool that make this process easier & less error-prone?