Computer Software
By Paribesh Sapkota
Introduction
Software is a set of instructions that instructs a computer on how to perform specific tasks. It is a critical component of a computer system and can be broadly categorized into system software and application software. This distinction is based on the functions they serve.
Types of Software
There are several types of software based on their functionalities, which are as follows-
System Software
System software allows the user to run computer software or hardware and is responsible for managing their interaction with each other. It perpetually runs in the background to maintain the basic functionalities and the hardware of the computer. It essentially acts as a mediator between the computer and the user to facilitate operations. System software is of four types, which are as follows-
- Operating System – The operating system is a collection of software that helps execute programs and offers a computer application’s general services. There are various types of operating systems, such as iOS, macOS, Windows, Unix, Linux, and Ubuntu, among others.
- Device Drivers – Device drivers handle the operations of the hardware devices connected to a computer. They act as a software interface for the hardware devices so that applications and the operating system of a computer can run the hardware functions without having the knowledge of the hardware’s exact specifications.
- Firmware – Firmware is embedded in the read-only memory of a system and is a type of permanent software that offers low-level control for certain device hardware.
- Utility – Utility software functions to configure, maintain, and offer support in the analysis and optimization of the computer.
Application Software
Application software or application programs are end-user programs that serve specific functionality to help users accomplish certain tasks. This includes graphic designing, researching online, drafting documents, watching movies or playing games, and managing finance among others. Developers keep creating software applications based on the evolving needs of users. There are various types of application software, which are as follows-
- Word Processors – Word processor software, as the name suggests, is designed for making notes, typing data, and documentation. Users can also format, store, and print their data and documents respectively using word processes.
- Database Software – Also known as Database Management System (DBMS), database software allows users to perform various operations on quickly retrieved data, such as creation, management, organization, and modification. Some popular examples of DBMS are MS Access, dBase, MySQL, Oracle, Microsoft SQL Server, and FileMaker.
- Multimedia Software – Users can perform certain actions on their computer, such as playing and recording music and video files as well as creating images with the help of multimedia software. This type of software has a massive application in the field of graphic designing where users create gifs, images, animations, and edit videos. Adobe Photoshop and Illustrator, Windows Movie Maker and Media Player, Corel Draw, and Picasa are some common types of multimedia processors.
- Web Browsers – Web Browsers are used for browsing the internet and their primary function is to allow users to fetch data across the web and also position the data. In simpler terms, you would access the internet with the help of web browsers so that you find the information that you need. Chrome, Opera, Mozilla Firefox, Microsoft Edge, Apple Safari, and UC Browser are very commonly used web browsers.
- Freeware – Freeware software is made available free of cost for a lifetime and it can be downloaded from the internet. This type of software is generally created by companies to improve their reach and gain more popularity. Some such software that is available free of cost for different purposes are Skype, Audacity, Zoom, Adobe Reader, WhatsApp, etc.
- Shareware – Shareware, much like Freeware, can be downloaded from the internet. However, the main difference between both is that, while freeware can be used for an unlimited amount of time without having to make any payment, shareware can be used on a trial basis. Adobe Acrobat and Photoshop, WinZip, and PHP Debugger are some popular types of shareware software.
- Open-Source – Open-source software is also available on the internet free of cost. However, what differentiates them from freeware is that they are available with their source code. This means users who download open-source software can make changes and transformations to it and even add features to it.
Programming Software
Programs and software are created by coders using different software tools, known as programming software. Some such programs used for software development by coders are as given below-
- Compilers – The conversion of codes written by humans into lower-level machine code is performed by compilers. These machine codes can be interpreted directly by computer hardware. While compilers serve a very basic purpose, they are the basis for creating even the most complicated and sophisticated software.
- Debuggers – Debuggers play an essential role in ensuring your software or application performs well by testing and debugging the computer code.
- Linkers – Linkers are responsible for combining various individual files from a compiler into a single executable file. The file converted, as a result, runs on its own without requiring a programming environment.
- Malware – Malware is software developed to attack computers and their software in a harmful way to cause them to misbehave or seize to work. This includes viruses, ransomware, trojans, and worms. Since there are a variety of malware that may be mistakenly downloaded, it is crucial to have antimalware software on your computer to keep it safe from their attacks.
Software Acquisition
Software acquisition refers to the process of obtaining or obtaining access to software for use in a computing environment. This process involves obtaining the rights to use, deploy, and potentially modify or customize the software based on the specific needs and requirements of the user or organization. There are various methods and models for acquiring software, each with its own characteristics and considerations. Here are some common approaches to software acquisition:
1. Commercial Off-The-Shelf (COTS) Software:
– Definition: Software that is ready-made and commercially available for purchase.
– Characteristics:
– Developed by third-party vendors.
– Typically comes with user licenses and support agreements.
– Examples include Microsoft Office, Adobe Creative Cloud, and enterprise resource planning (ERP) systems.
2. Open-Source Software (OSS):
– Definition: Software whose source code is freely available for modification and distribution.
– Characteristics:
– Users can view, modify, and distribute the source code.
– Community-driven development.
– Examples include the Linux operating system, Apache web server, and the Mozilla Firefox browser.
3. Shareware:
– Definition: Software distributed on a trial basis with limited functionality.
– Characteristics:
– Users can use the software for free during a trial period.
– Full features are unlocked upon payment.
– Commonly used for software testing or evaluation.
4. Freeware:
– Definition: Software that is freely available for use without any cost.
– Characteristics:
– Users can use the software without payment.
– May or may not have restrictions on usage.
– Examples include various utility tools and applications.
5. Custom Software Development:
– Definition: Building software solutions tailored to specific organizational needs.
– Characteristics:
– Developed in-house or by third-party developers.
– Addresses unique requirements and workflows.
– Can be costly and time-consuming.
6. Software as a Service (SaaS):
– Definition: Software delivered over the internet as a service.
– Characteristics:
– Subscription-based model.
– Hosted and maintained by the service provider.
– Users access the software through web browsers.
– Examples include cloud-based productivity suites like Google Workspace.
7. Legacy Systems:
– Definition: Software that has been in use for a long time and may be outdated.
– Characteristics:
– May still be in use due to critical functions or budget constraints.
– May require special attention for maintenance or replacement.
8. Public Domain Software:
– Definition: Software not protected by copyright and freely available for use.
– Characteristics:
– Users can modify, distribute, and use the software without restrictions.
– Examples include certain educational software and utilities.
Programming Languages
Programming languages are formal systems designed to communicate instructions to a computer. These instructions, often referred to as code, are written by programmers to develop software, applications, and systems. Programming languages play a crucial role in software development, providing a means for humans to convey their ideas to machines.
Categories of Computer Languages
There are two types of computer languages:
Low-Level Languages: These languages give instructions to a computer in a way that is easily understood by the hardware of the computer. These languages are easier for a computer to understand but difficult for a human understanding. This language is machine-dependent or specific to a given computer. Two low-level languages are Machine Language and Assembly Language.
High-Level Languages: These languages are written in English-like language. Thus, these are easier for a human to understand but difficult for a computer to understand. They can be executed on a machine using a translator. This language is machine-independent. There are many high-level languages e.g. C. C++. Java, COBOL, PHP, etc.
Evolution of Computer Languages
A computer can understand instructions in terms of electric signals as it works on electricity. Electric signals are either ON or OFF, or we can say 1 for ON or 0 for OFF. When computers we invented, firstly instructions were given to it in terms of 1’s and 0’s. This form of language is known as Machine Language or the first-generation language.
First Generation Language:
Firstly, computers were given instructions in the forms of 1’s and 0’s. This language is called Machine Language or first-generation language. A computer was able to understand it directly without any conversion. This language is also known as Machine Language or Binary language. Binary language because only two symbols 1 and 0.
Second Generation Language:
Machine Language was just 1’s and 0’s, in which error finding and correcting were very difficult. So we have to develop a second-generation language. Also called an Assembly Language.
In this language, instructions were replaced with some coded terms called mnemonic. So that it becomes a little easier to read, understand, and correct. A computer can understand and work on machine code only. So assembly language needed a special software called Assembler that converts mnemonic into machine language.
Third Generation Languages:
First, two generations of languages were comparatively easier for a computer to understand, but it was difficult for humans to read, understand and code in them. Thus, came English like programming languages to give instructions to computers. These languages are known as High-Level Languages as they are easier for humans to understand.
C, C++, Java, COBOL Pascal, etc. are some High-Level Languages.
Fourth Generation Language:
Third-generation languages require detailed procedures, but fourth-generation languages just require ‘what’ do we want from the code rather than ‘how to do’. i.e., the procedure. These languages are similar to statements in the human language mainly used in database programming. E.g. Python, Ruby, SQL, MatLab.
SQL-Structured Query Language is one such language, e.g. you just write SELECT ALL department Name FROM EmployeeTable to get all the department names: No detailed program is required.
Fifth Generation Languages:
The fifth-generation languages are more focused on artificial intelligence implementation. These have visual tools to develop a program. Prolog, OPSS Mercury, etc. are some SGLS. E.g. Prolog, OPS5, Mercury etc.
Operating System: Introduction
An operating system (OS) is a crucial software component that acts as an intermediary between computer hardware and the user. It provides a set of essential services and functionalities that allow software applications to run and interact with the underlying hardware. The operating system plays a central role in managing system resources, providing a user interface, and ensuring the efficient execution of computer programs.
Objectives of Operating System:
- Resource Management:
- CPU Management: The OS allocates CPU time to different processes, ensuring fair and efficient utilization of the processor.
- Memory Management: It controls and allocates memory space for processes, managing both main memory (RAM) and secondary storage (like hard drives).
- Device Management: Handles communication between peripheral devices (such as printers, disks, and keyboards) and the computer system.
- Process Management:
- Process Scheduling: Determines the order in which processes are executed, optimizing resource utilization and responsiveness.
- Process Creation and Termination: Manages the creation and termination of processes, including the allocation of necessary resources.
- File System Management:
- File Creation, Deletion, and Organization: The OS oversees the creation, deletion, and organization of files on storage devices.
- Access Control and Security: Implements mechanisms to control access to files, ensuring data security and privacy.
- Memory Management:
- Virtual Memory: The OS provides virtual memory, allowing processes to use more memory than physically available by swapping data between RAM and secondary storage.
- Memory Protection: Prevents one process from accessing the memory space of another, enhancing system stability.
- Device Management:
- Device Drivers: The OS uses device drivers to communicate with and control hardware devices.
- I/O Operations: Manages input and output operations, ensuring proper communication between software applications and hardware peripherals.
- Protection and Security:
- User Authentication: The OS ensures that only authorized users have access to the system through user authentication mechanisms.
- Access Control: Enforces policies to control access to files, directories, and system resources, safeguarding against unauthorized activities.
- User Interface:
- Graphical User Interface (GUI) or Command Line Interface (CLI): Provides a means for users to interact with the computer system, issuing commands and receiving feedback.
- Error Detection and Handling:
- Error Reporting: Detects and reports errors, both hardware and software-related, to users and system administrators.
- Fault Tolerance: Implements measures to handle errors gracefully and maintain system stability.
- System Calls and Program Execution:
- System Calls: Allows applications to request services from the operating system, such as opening or closing files.
- Program Execution: Coordinates the execution of programs, managing the transition from program loading to execution.
- Communication and Synchronization:
- Interprocess Communication (IPC): Facilitates communication and data exchange between different processes.
- Synchronization: Ensures coordinated execution of processes to avoid conflicts and race conditions.
- Load Balancing:
- Distributes computing workloads across multiple processors or nodes to optimize system performance.
- Networking:
- Manages network connectivity, enabling communication between computers and devices in a networked environment.
Types of OS
The classification of operating systems is based on factors such as the number of users, the purpose of use, and the design principles. Here are some common types of operating systems:
- Single-User, Single-Tasking Operating System:
- Designed for a single user to execute one task at a time.
- Commonly found in early personal computers and simple embedded systems.
- Single-User, Multi-Tasking Operating System:
- Allows a single user to run multiple applications or tasks simultaneously.
- Most modern desktop and laptop operating systems fall into this category (e.g., Windows, macOS, Linux).
- Multi-User Operating System:
- Supports concurrent access by multiple users.
- Commonly used in server environments where multiple users can access resources and applications simultaneously.
- Multi-Tasking Operating System:
- Enables concurrent execution of multiple tasks or processes.
- Users can switch between tasks without waiting for one to complete.
- Found in most modern operating systems.
- Real-Time Operating System (RTOS):
- Designed for systems that require real-time processing and response.
- Commonly used in embedded systems, control systems, and critical applications where timing is crucial.
- Network Operating System:
- Designed to support network communication and resource sharing among multiple computers.
- Facilitates file sharing, printer sharing, and other collaborative activities in a network.
- Distributed Operating System:
- Spreads processing tasks across multiple interconnected computers.
- Enables resource sharing and efficient utilization of distributed resources.
- Embedded Operating System:
- Tailored for embedded systems, which are part of larger systems or devices.
- Commonly used in devices like smartphones, digital cameras, and IoT devices.
- Batch Processing Operating System:
- Processes a set or batch of jobs without user interaction.
- Commonly used in environments where similar tasks need to be executed in sequence.
- Time-Sharing Operating System:
- Allows multiple users to interact with the system simultaneously.
- Each user gets a small time slice or quantum to perform tasks.
- Mobile Operating System:
- Designed for mobile devices like smartphones and tablets.
- Examples include Android, iOS, and Windows Mobile.
- Multi-Processor Operating System:
- Manages and coordinates the execution of tasks on systems with multiple processors.
- Optimizes performance by distributing tasks across processors.
- Thin Client Operating System:
- Designed for thin clients that rely on a central server for processing.
- Thin clients typically have minimal processing capabilities and rely on the server for most operations.
- Desktop Operating System:
- Designed for personal computers and workstations.
- Provides a graphical user interface (GUI) and supports a variety of applications.
- Server Operating System:
- Tailored for server environments, emphasizing resource management, scalability, and reliability.
Functions of Operating System:
- Process Management:
- Process Scheduling: Determines the order in which processes are executed, optimizing CPU utilization.
- Process Creation and Termination: Manages the creation and termination of processes, including resource allocation.
- Memory Management:
- Virtual Memory: Provides a virtual address space, allowing processes to use more memory than physically available.
- Memory Allocation and Deallocation: Manages the allocation and deallocation of memory for processes.
- File Management:
- File Creation, Deletion, and Organization: Controls the creation, deletion, and organization of files on storage devices.
- Access Control and Security: Implements mechanisms to control access to files, ensuring data security.
- Device Management:
- Device Drivers: Communicates with and controls hardware devices through device drivers.
- I/O Operations: Manages input and output operations between the computer and peripheral devices.
- Protection and Security:
- User Authentication: Ensures that only authorized users have access to the system through authentication mechanisms.
- Access Control: Enforces policies to control access to files, directories, and system resources, safeguarding against unauthorized activities.
- User Interface:
- Graphical User Interface (GUI) or Command Line Interface (CLI): Provides a means for users to interact with the computer system, issuing commands and receiving feedback.
Examples of Operating Systems:
- Microsoft Windows:
- Versions: Windows 10, Windows 8.1, Windows 7.
- Usage: Widely used in desktop and laptop computers.
- macOS:
- Versions: macOS Big Sur, macOS Catalina.
- Usage: Exclusive to Apple Macintosh computers.
- Linux:
- Distributions: Ubuntu, Fedora, CentOS.
- Usage: Used in servers, desktops, embedded systems, and more.
- Android:
- Usage: Operating system for mobile devices, particularly smartphones and tablets.
- iOS:
- Usage: Exclusive to Apple devices such as iPhones and iPads.
- Unix:
- Variants: AIX, HP-UX, Solaris.
- Usage: Common in enterprise servers and workstations.
- Chrome OS:
- Usage: Designed for Chromebooks and primarily focused on web-based applications.
New Trends in Software:
- Artificial Intelligence (AI) and Machine Learning (ML):
- Integration of AI and ML in various applications, including natural language processing, image recognition, and predictive analytics.
- Cloud Computing:
- Use of cloud services for storage, processing, and hosting applications, enabling scalability and accessibility.
- Edge Computing:
- Processing data closer to the source (edge devices) to reduce latency and improve efficiency.
- Blockchain Technology:
- Implementation of decentralized and secure transaction systems, beyond cryptocurrency, in areas like supply chain and finance.
- Low-Code/No-Code Development:
- Development platforms that enable application creation with minimal coding, allowing non-developers to participate in the development process.
- DevOps and Continuous Integration/Continuous Deployment (CI/CD): Practices that aim to improve collaboration between development and operations teams, along with automated deployment pipelines.