Software represents a set of data, procedures, instructions, routines, or programs utilized in the operation of computers and executing a particular task. Besides executable data, this includes programs and non-volatile resources i.e., libraries, which, for example, includes pre-written codes, software documentation, configuration data, message templates, values, classes, help data, and data types. Furthermore, the majority of developers write software using high-level programming languages. They are then translated to machine language instructions using a compiler, assembler, or both. With that said, let’s dive into the types of software.
This type of software is what most people think of when someone mentions the term “software”. Application software is a program or a collection of programs designed for end-users to perform particular functions past the basic functionality of the computer itself. This software type is usually independent and tailored to specific platforms or operating systems. As such, it is usually purchased or downloaded apart from the computer hardware, but can also be bundled with the computer. Here are a few easily recognizable examples of application software:
- Media player software
- Database software
- Email software
- Word processor software
- Software for audio editing, video editing, and editing photos
- Animation software (2D and 3D)
- Screen recorder, audio recording software, and software for game recording
- CAD (Computer-Aided Design) software
- Video game development software
- Enterprise software
- Simulation software
- Communication software
- Educational software
System software controls the behavior of the hardware and provides basic functionality for end-users or a platform for other software to function properly – oftentimes application software. Here are three common types of software that fall within system software:
Operating systems represent collections of the necessary software for managing resources, and providing support and service to software that runs “on top” of the system software. As mentioned, some software comes bundled with the operating system, thus preventing the need for manual search and installation, or installing a secondary operating system. Each operating system has a few core components:
Bootloaders start a computer from a turned-off state, during which time the operating system, code, and data are in non-volatile memory and inaccessible to it. To access that data, the bootloader executes a small program, named bootstrap or bootstrap loader, stored in ROM/EEPROM/NOR flash alongside a little data. This loads the aforementioned stuff into the computer’s RAM (Random Access Memory).
A supervisory program or supervisor is a computer program that manages routine executions, schedules work i.e., queues tasks, input and output operations, errors, and system interrupts, and overall governs the operating system. Ergo, control is routinely given back to the supervisor to guarantee every demand is met.
Shell is a computer program that lets humans or other programs access the services of an operating system. Some examples of such services include monitoring, configurations, file and process management, and batch processing. Shells can use a command-line interface (CLI) or graphical user interface (GUI) for interaction.
A windowing system is a type of GUI-based software that governs distinctly different parts of display screens and is utilized by the vast majority of operating systems today. To paint a picture, every currently running application can have its own resizable surface (usually rectangular) with window decoration, menu bar, and title bar, which can overlap with the windows of other applications.
Driver software gathers input from the operating system and provides instructions (output) to the hardware. This correspondence allows the operating system to enable and control the peripherals and devices attached to the computer. Hardware manufacturers are usually responsible for designing and updating drivers for their products, although independent developers sometimes volunteer to take the reins, too. To prevent the devices from malfunctioning, modern operating systems ship with a majority of them installed, and update and download new ones automatically, behind the scenes.
Utility software is any computer program that helps users maintain, configure, analyze, and protect their computers. Some examples include built-in antivirus software, task managers, registry cleaners, package managers, network utilities, access controllers, and diagnostic/monitoring software that keeps track of heat, power, storage, and usage.
Firmware is a class of software that facilitates low-level control of computer hardware. The instantly recognizable examples are Basic Input/Output System (BIOS), Extensible Firmware Interface (EFI), and Unified Extensible Firmware Interface (UEFI). A special chip on the motherboard or the chipset stores these representatives of firmware, which provide multiple services during the boot-up process before it reaches the operating system loader.
Embedded software is firmware designed for embedded systems. To clarify, those are devices with a single or limited number of uses within an electronic or mechanical system, e.g., a car, TV, digital watch, or MP3 player. The embedded device may also be a part of a large system. One prominent example is a wireless chipset in a computer or smartphone. Whatever the case may be, their use isn’t extensive, making it hard to ascertain which parts belong to application software and which to system software.
Programming tools are a set of software, programs, and applications that software developers use to design, debug i.e., troubleshoot, maintain, preview, update, and, generally, support the software throughout its existence. Additionally, they can be written in one or more programming languages. Two types of programming software are:
- Self-contained or individual tools such as compiler, interpreter, debugger, text editor, linker, etc.
- Combined programming tools, which links dependent and self-contained tools to form an IDE (Integrated Development Environment). Some notable examples: GitHub, Android Studio, Eclipse, XCode, Atom, and Notepad++.
Malware, short for malicious software, is created with the intent of causing damage to a computer or a computer network. The damage varies but usually involves hindering access, stealing system resources, or exfiltrating data. Contrary to popular belief, cybercriminals aren’t the only developers and users of malware. Large businesses, especially those dealing in sensitive data or finances, oftentimes have a team of security experts. They create and/or modify malware to test the protection of computers and networks. That way, they can bolster their defenses before the criminals exploit them.