Initially, programmers wrote invariantly in assembly language. Experiments with hardware support in high-level languages (1960s) led to the emergence of such languages as BLISS and BCPL. However, the C programming language, which played a significant role in the creation of UNIX, gained a lot of popularity and spread everywhere by the 1980s.

Nowadays, some use has been found for embedded C++. The implementation of the main parts in the operating system and in the use of networks needs system software developers. For example, the implementation of pagination (via virtual memory) or device drivers.

The term System Programming is directly related to the term System Programmer. It is a programmer who works (creating, debugging, diagnosing, etc.) on system software.

System programming is a kind of activity that consists of working on system software. The main difference between system programming and application programming is that the result of the latter is the release of software offering certain services to users (such as a word processor). while the result of system programming is the release of software offering services to interact with hardware (such as defragmentation of hard disk), which implies a strong dependence of such programs on the hardware hour In particular, let us highlight the following:

  • the programmer must take into account the specific hardware and other properties of the system in which the program functions, to use these properties, for example, by applying an algorithm specially optimized for this architecture.
  • Usually a low-level programming language or such dialect of a programming language is used that
  • allows to function in an environment with a limited set of system resources
  • runs as efficiently as possible and has a minimal termination time lag
  • has a small or no runtime library (RTL)
  • allows direct control (direct access) to memory and controlling logic.
  • allows making assembler inserts into the code
  • program debugging can be difficult when it is impossible to run it in a debugger due to resource limitations, so computer simulation can be used to solve this problem.

System programming differs significantly from application programming, which usually leads to specialization of a programmer in one of them.

Often, a limited set of tools is available for system programming. The use of automatic garbage collection is quite rare and debugging is usually difficult. The runtime library, if available, is often less capable and performs fewer checks. Because of these limitations, it is usually used in monitoring and recording data – operating systems.