Computer Software (1)
Computer Software (1)
COMPUTER SOFTWARE
INTRODUCTION
A computer system consists of hardware and software. The computer hardware cannot
perform any task on its own. It needs to be instructed about the tasks to be performed. The
computer, as a machine, can do nothing for you without the software. Software is required for
the functioning of computer. Software programs instruct computer about the actions to be
performed, so as to get the desired output. Software tells the computer how the tasks are to be
performed; hardware carries out these tasks. Different sets of software can be loaded on the
same hardware to perform different kinds of tasks.
All programs (software) are written using programming languages. Programmers usually
write programs in Source Language (a language that is like broken English). The Source
language is then converted into Machine language; the language that the computer can
understand.
While the terms computer program and computer software are often used interchangeably,
they have distinct meanings. Here's a breakdown of the differences:
Aspect Computer Program Computer Software
A broader term that includes not just
A set of instructions written in a
programs but also related data,
specific programming language that
Definition documentation, libraries, and other
a computer follows to perform a
components required to make the
specific task or solve a problem.
programs function.
More specific; a single program is
More general; encompasses multiple
focused on performing one
Scope programs and all associated resources
particular task or a set of related
needed for operation.
tasks.
Microsoft Office Suite (which includes
Microsoft Word, a web browser
Word, Excel, PowerPoint, etc.),
Examples like Google Chrome, or a calculator
operating systems like Windows or
program.
macOS.
Comprises just the executable code Includes the program(s), configuration
Components or the set of instructions written by files, user manuals, libraries, and support
a programmer. files.
Refers to an individual set of Refers to an entire package or collection
Usage instructions or code written to of programs and associated files used
perform a specific function. together.
Summary:
In essence, all computer programs are software, but not all software consists of a single
program.
1. Programs: Sets of instructions that tell the computer how to execute specific tasks,
like word processing or browsing the web.
2. Data: Information that is processed by the software, including input data, stored data,
and generated outputs.
3. Functionality: Software provides different types of functionalities based on its
category, such as system management, application-level operations, or development
tools.
Characteristics of Software
The characteristics of software are essential traits that define its behavior, development, and
interaction with hardware and users. Here are some key characteristics of software:
1. Intangibility: Unlike hardware, software cannot be physically touched. It consists of code,
data, and instructions that are intangible, residing in storage devices or memory.
4. Maintainability: Software can be updated and maintained over time through patches, bug
fixes, or feature enhancements. This ability ensures that software remains functional and
relevant in changing environments.
5. Reliability: A key characteristic is that software should operate consistently under specific
conditions without failure. Reliable software produces the correct output from valid inputs.
9. Efficiency: Efficient software uses minimal computing resources (like CPU, memory, and
storage) while achieving its objectives. Efficiency affects performance, speed, and cost.
10. Portability: Software can often run on different hardware platforms and operating
systems with little or no modification. This characteristic is crucial for cross-platform
applications.
11. User Interface (UI): Software is typically designed with a user interface, which defines
how users interact with the program. A good UI improves usability and user experience.
12. Dependability: Dependable software consistently delivers the expected results without
causing unexpected failures or errors. It also ensures data integrity and security.
13. Time-Dependence: Software can become obsolete over time due to changing technology
or requirements. Periodic updates are needed to keep the software compatible with new
systems.
14. Correctness: Software is expected to perform tasks as specified, delivering accurate and
valid outputs based on the inputs provided.
15. Security: Software should include security features to protect against unauthorized
access, data breaches, and other vulnerabilities. This is critical in today’s data-driven
environment.
These characteristics collectively define the quality, usability, and effectiveness of software
in a computing system.
1. Enabling Daily Computing Tasks: Software plays a crucial role in enabling users to
perform everyday tasks such as word processing, browsing the internet,
communication (email, video calls), and entertainment (games, multimedia). Without
software, the hardware is essentially useless, as software provides the instructions
needed to operate the computer.
2. Automation of Tasks: Software enables automation of repetitive tasks, improving
efficiency and productivity. Applications like spreadsheet programs (e.g., Microsoft
Excel) allow users to automate complex calculations, while software like project
management tools streamlines workflows.
3. Technological Innovations: Advancements in software development drive
technological innovation across industries. Software powers emerging technologies
like artificial intelligence (AI), machine learning (ML), virtual reality (VR), and the
Internet of Things (IoT). For instance, self-driving cars rely heavily on complex
software algorithms to interpret data and make driving decisions.
4. Connectivity and Communication: Software enables global communication through
internet-based platforms such as email, messaging apps, and social media. It also
powers cloud computing services, allowing people to collaborate in real time,
regardless of location.
5. Business Operations and Digital Transformation: In businesses, software is critical
for operations management, from customer relationship management (CRM) systems
to enterprise resource planning (ERP) software. Many industries have undergone
digital transformation, where software plays a key role in improving efficiency,
decision-making, and customer engagement.
6. Security and Data Protection: Security software protects sensitive data from
cyberattacks, malware, and unauthorized access. With the increasing reliance on
digital systems, cybersecurity software has become essential in protecting individual
users, businesses, and governments.
7. Adaptability and Customization: Software is highly adaptable, allowing users to
customize and configure it to suit specific needs. This flexibility enables software to
serve a wide range of purposes, from personal use to specialized professional
applications, across diverse fields like healthcare, finance, and education.
In summary, software is fundamental to modern computing, driving both daily tasks and
large-scale technological advancements, shaping the way we live, work, and interact with the
world.
History of Software
The term software and its commercial availability have evolved significantly since the early
days of computing. Before the late 1950s, software as we know it today didn't exist, and the
term itself was yet to be coined. During this time, software was primarily developed by
scientists, researchers, and large organizations for specific computational tasks. Here's a
timeline that highlights key milestones in the history of software:
Early Developments
- 21st June 1948: Tom Kilburn, a computer scientist at the University of Manchester,
UK, wrote the world’s first piece of software. Kilburn's program ran on the
Manchester Baby computer, which performed a simple mathematical computation.
- 1958: The term "software" was coined by American statistician John W. Tukey in an
article. Until then, the focus was mainly on hardware, and there was little
differentiation between physical machines and the code running on them. Tukey’s
terminology began the shift in recognizing the distinct and critical role of software in
computing.
- 1977: The release of Apple II, a major milestone in personal computing, introduced
computing to a wider audience. Shortly after, VisiCorp released VisiCalc, the first
spreadsheet software for personal computers, which helped revolutionize business
computing by automating financial calculations.
- 1981: IBM began the sale of commercial software for their personal computers (PCs).
Software was no longer the domain of scientists and engineers but was becoming
accessible to consumers for everyday use. Operating systems like IBM PC DOS
emerged, helping users manage tasks and interact with hardware more easily.
- Mid-1980s: Key software applications such as AutoCAD (for design and drafting)
and Microsoft Word and Excel were introduced. These applications significantly
expanded the practical uses of personal computers in business, education, and
engineering.
- 1985: The release of Microsoft Windows 1.0 marked a significant step toward
graphical user interfaces (GUI) that made computers easier to use for non-technical
users. Windows allowed users to interact with computers via icons and menus, rather
than text-based commands.
- 1997: DVDs were introduced, offering a much larger storage capacity than CDs. This
allowed entire software suites like Microsoft Office to be stored on a single disk,
improving software distribution and installation.
- 1999: The launch of Salesforce.com pioneered the concept of cloud computing,
allowing users to access software over the internet instead of installing it on
individual machines. This laid the foundation for the Software as a Service (SaaS)
model, which became increasingly popular in the following decades.
- 2000: SaaS became a significant trend in the software industry, offering businesses a
subscription-based model to access applications online. This changed the way
organizations purchased, used, and maintained software, reducing the need for
physical installation and on-premise infrastructure.
- 2007: The launch of the first Apple iPhone ushered in the era of mobile computing,
leading to the rapid development and distribution of mobile applications (apps). The
introduction of the App Store in 2008 provided developers a centralized platform to
reach millions of users, revolutionizing how software was distributed and used on
mobile devices.
- 2010 – Present: DVDs and other physical media became obsolete for software
distribution as internet speeds improved, enabling users to download and install
software directly from the web. Platforms like Steam, Google Play, and Microsoft
Store have transformed software delivery by offering users instant access to a vast
range of applications and games. Additionally, software updates and patches are now
seamlessly distributed online.
Current Trends
- The rise of cloud-based services continues to dominate the software industry, with
companies like Amazon Web Services (AWS), Google Cloud, and Microsoft Azure
providing infrastructure for cloud-based applications and services.
- AI-powered software is becoming mainstream, with machine learning and
automation tools enhancing applications in various sectors like healthcare, finance,
and marketing.
- Open-source software has also gained popularity, enabling collaborative
development of software by the global community and making high-quality
applications accessible for free.
Conclusion: From the earliest days of computing to today's internet-based and cloud-driven
era, software has evolved dramatically. Its development has enabled personal computing,
transformed industries, and continues to drive technological innovation across every aspect of
modern life. Software is now available in many forms, from mobile apps to enterprise-grade
solutions, with an increasing focus on cloud computing, artificial intelligence, and machine
learning shaping its future.
Software Flexibility.
The Software used on a given computer is said to be flexible, i.e. it is relatively easy to
change. For example, in a home computer used for playing games, instead of buying a new
machine each time a new game is needed, you only need to „load‟ a new program into the
machine. Again, it is relatively easy to change between games at will.
This table captures the fundamental distinctions between software and hardware, reflecting
how they work together to create a functional computing system.
Interaction:
System Software
System software is essential for the basic functioning and management of a computer. It
enables the operation of both the computer hardware and application software, providing an
interface between the user and the computer. Unlike application software, system software
operates in the background, ensuring the smooth running of hardware components and other
software programs. Users typically do not need to be aware of how the system software
works while using their computers. For example, when a user prints a document, system
software (such as the device driver) interacts with the printer hardware to process the print
request without requiring the user's direct involvement.
Figure: System software
1. Basic Functionality: Provides core functions necessary for running the computer. It
provides the fundamental capabilities that allow a computer to operate.
2. Hardware Control: Manages and controls the hardware components such as the
CPU, memory, input/output devices, storage etc.
3. User and Software Interface Role: Acts as a bridge/ intermediary between the user,
the application software, and the computer hardware, ensuring proper communication
and coordination.
System software can be broadly categorized into two groups based on their functionality:
Control Over Hardware Resources and Automation: System software controls the
computer’s hardware and automates various operations processes to ease the
management and debugging of applications, allowing users to make efficient use of
computing resources like memory, printers, and storage devices.
Background Operation: It runs behind the scenes, ensuring that hardware and
software interact smoothly, without the user needing to manage low-level operations
manually.
Efficient Resource Management: Manages the allocation of system resources (such
as CPU time and memory) to different applications, improving overall system
performance.
Manufacturer Development: System software is often developed and installed by
the hardware manufacturer, as it requires deep knowledge of the hardware
architecture. Some system software is embedded in the computer’s ROM (Read-
Only Memory) to provide initial boot functionality and is permanently stored, known
as Resident Software.
Hardware-Oriented: System software is closely tied to the hardware, dictating how
other software interacts with the hardware components, making it closely aligned with
the specific hardware configuration of the computer.
Resident Software:
- Resident software or routines are permanently stored in the computer's memory (e.g.,
ROM). This ensures the system software that is essential for hardware initialization
(such as the BIOS) is always available.
In summary, system software plays a crucial role in managing and controlling a computer's
hardware and providing a foundation for running application software. It facilitates
communication between hardware and software, optimizing computer performance and
enabling seamless operations.
The operating system is a collection/set of programs designed to ensure the smooth running
of the computer system and helps execute programs and offers a computer application’s
general services.
The OS is the most critical component of system software. It manages computer hardware
and software resources, providing a user-friendly interface for managing files, running
applications, and controlling hardware. Key functions include:
Resource Management: Managing CPU time, memory space, file storage, and I/O
devices.
Error Prevention and Control: Ensuring that programs execute smoothly and
preventing system errors.
User Interface: Providing a command-line or graphical interface for easy interaction
with the computer.
2. Device Drivers:
Device drivers act as translators between hardware devices and the system software, enabling
the operating system to communicate with the hardware. In other words, it intermediates
between the device and the software, in order to use the device.
Purpose of Device Drivers: Device drivers act as translators between hardware
devices (e.g., keyboard, mouse, printer, hard disk) and the operating system, enabling
communication and proper functioning of the devices.
Functionality: When a command is given to a device, the device driver translates
high-level commands (e.g., "PRINTLN") into low-level, device-specific instructions
that the hardware can understand.
Plug and Play: Modern operating systems come preloaded with common device
drivers (e.g., for keyboard, mouse, webcam), allowing automatic detection of devices.
These are known as plug-and-play devices.
Installing Device Drivers: Some devices (e.g., printers) require manual installation
of specific drivers, typically provided by the device manufacturer (via CD or online
download). Most device manufacturers, host the device drivers for their devices on
their companies’ websites; users can download the relevant driver and install it on
their computer.
Types of Device Drivers:
Each hardware device requires its own specific device driver to function correctly, and new
devices need the appropriate driver to be loaded into memory for use. For instance, a printer’s
device driver translates high-level commands like "Print" into device-specific instructions the
printer can understand.
3. Firmware:
Key Characteristics:
Permanent Software: Unlike regular software, firmware is fixed in the hardware and
cannot be easily modified. It is typically stored in ROM or flash memory.
Low-Level Operations: Firmware manages essential, low-level tasks such as
controlling device hardware (e.g., printers, hard drives, or cameras), booting up a
computer, and managing input/output operations.
Microprogram: A microprogram refers to a series of specialized instructions that
control the hardware's operation at a very basic level. These instructions are used to
interpret higher-level commands for execution by the device. The Microprogram is
held in the Control Unit (CU), and is used to interpret the external Instruction set of a
computer. The Instruction set is the list of instructions available to the programmer
that can be used to give direct orders to the computer.
Hardware-Specific: Firmware is written specifically for the hardware it operates on.
Each hardware device, such as a router, mobile phone, or graphics card, has its own
firmware to ensure proper functionality.
Examples:
- BIOS (Basic Input/Output System): The firmware in a computer that initializes and
manages hardware during the boot process.
- Router Firmware: Controls the functioning of network routers, allowing them to
manage data traffic and connectivity.
- Printer Firmware: Manages print commands and controls the physical printing
process.
Importance:
4. System Utilities:
These are specialized programs designed for system maintenance and optimization. System
utilities are used for supporting and enhancing the programs and the data in computer. Utility
programs are used by end-users to perform many of the routine functions & operations such
as, sorting, merging, program debugging, manage computer files, diagnose and repair
computer problems that occur, etc. Some system utilities may come embedded with OS and
others may be added later on.
1. Searching.
They help to search for a file from one or more specified records. For example, in a Sales
record, the Search facility assists in finding the salesperson with the highest sales.
For example, from tape to disk & vice versa, or from a floppy disk to hard disk.
3. Spell-checking of words.
After a document is typed, the words in the document are checked against those in a ‘custom
dictionary’ in secondary storage. If any word used is not found in the dictionary, a warning is
given indicating a possible spelling error.
4. Formatting programs.
Before a storage devices/disks can be used, it must be „initialized‟ or formatted. This means
that, the system must put certain information on the disk, which helps with the storing and
retrieving user’s programs & data at a later time.
Therefore, a computer system that uses storage devices/disks would have a utility program
for initializing or formatting these disks.
Again, useful information can be obtained by studying the contents of memory at the time the
program failed.
i.Text Editors.
ii.Language Translators.
iii. Diagnostic Tools/ Programs.
iv. Sort utility.
v. Merge utility.
vi. Copy utility.
vii. Core/ Dump utility.
viii. Linker.
ix. Loader.
x. Library Program.
xi. Database management system (DBMS) – a utility program that manages data
contents.
Text Editor.
This is a utility program that enables/ allows users to create files in which they can store any
textual information they desire using the computer.
Once the files are created, the Text editor provides facilities which allow the user modify
(make changes to) the files; such as adding, deleting, or changing information in the file.
Data can be copied from one file to another. When a file is no longer needed, it can be
deleted from the system.
The operations of the Text editor are controlled by an interactive OS that provides a
‘dialogue’ between the user and the Operating system.
The Text editors are used to create, e.g. program statements through the Keyboard connected
to the computer. Editing can then be carried out using the Edit keys on the Keyboard or by
using a sequence of commands.
Sort utility.
The Sort utility is used to arrange the records within a file according to some predetermined
sequence. The arrangement can either be in Ascending or Descending order of the alphabets
or numerals.
For example, a user may wish to sort data into some desired sequence, such as; sort a student
file into ascending order by name or into descending order by average grade or sort a mailing
list by postal code, etc.
Merge utility.
Merging is the process by which the records in two or more sorted files are brought together
into one larger file in such a way that, the resulting file is also sorted.
The Merge utility is used to influence the combining of the contents of 2 or more input files
to produce one output file.
Copy utility.
It is usually advisable to maintain duplicate copies of the operational files so that in case
something goes wrong with the original files, then their contents can be recreated from the
duplicate/ backup copy or copies.
The duplication process, i.e. copying the contents of one file to another is done through the
influence of the Copy utility. The copying can be from one media to a different media or
from one media to another media of the same make, e.g. from USB to hard disk or from a
USB to another USB.
Dump utility.
The term Dumping is used to describe the copying of the contents of the main memory. The
Dump utility is therefore, used to transfer (copy) the contents of the computer’s internal
memory into a storage media, e.g. the disk or through the Printer (to get a Hard copy output).
The result of dumping is that the main memory ‘image’ is reflected by the stored or the
printed contents.
Language Translator.
Programs written in high-level languages have to be translated into binary code (Machine
language), before the computer can run these programs.
A Translator is a utility program written & supplied by the computer manufacturers, used to
convert the Source Codes (the program statements written in any of the computer
programming languages) to Object Codes (their computer language equivalents).
Each language needs its own translator. Most OS provide users with Compilers or
Interpreters for the common high-level languages. In addition, an Assembler is usually
available for those wishing to write programs in the Assembly language of the particular
machine.
Note: These translators are not part of the OS, but they are designed to be used under the
operating system & are accessible to it.
Linker.
Computer programs are usually developed in Modules or Subroutines (i.e. program
segments meant to carry out the specific relevant tasks).
During the program translation into their machine code, these modules are translated
separately into their object code equivalents.
The Linker is a utility software that accepts the separately translated program modules as its
input and logically combines them into one logical module, known as the Load Module that
has got all the required bits & pieces for the translated program to be obeyed by the computer
hardware.
Loader.
The Loader is a utility program that transfers the load module (i.e. the linker output) into the
computer memory, ready for it to be executed by the computer hardware.
The transfer process is from the backing store, e.g. magnetic disk into the computer’s main
memory. This is because some systems generate object codes for the program, but instead of
being obeyed straight away, they store them into the media.
Diagnostic tools/programs usually come with the translators and are used to detect &
correct system faults –both hardware and software.
They provide facilities which help users to debug (remove errors from) their programs more
easily.
E.g., Dr.Watson is a diagnostic tool from Microsoft that takes a snapshot/ photograph of your
system whenever a system fault occurs. It intercepts software faults, identifies the software
that faulted, and offers a detailed description of the cause & how to repair the fault.
Other diagnostic tools for detecting hardware faults are, Norton Utilities, PC Tools, QAPlus,
etc.
Programming Languages
The set of instructions that the computer can recognize is referred to as the Instruction Set.
Programming languages are formal languages used in writing computer programs comprising
a set of vocabulary and grammatical rules to specify computations and tasks a computer must
perform. These languages are essential for developing software, controlling hardware
behavior, creating user interfaces, and executing various algorithms. The programming
language should be understood, both by the programmer (who is writing the program) and the
computer. A computer understands the language of 0∙s and 1∙s, while the programmer is more
comfortable with English-like language. They offer a medium through which programmers
can communicate with computers to perform specific functions.
Each programming language has a unique syntax, rules, and keywords. Depending on its
abstraction from the hardware, a programming language may belong to one of the following
three main categories: machine language, assembly language, and high-level language. The
choice of programming language depends on the task's complexity, speed requirements, and
hardware capabilities. Programming languages fall into three categories:
- Examples:
1. First Generation: Machine language (binary code), directly executed by the CPU.
Machine language uses machine codes (binary digits) that consist of 0‟s & 1‟s.
2. Second Generation/ Low-level languages/ Assembly language: Assembly
language, using mnemonic codes or labels for easier coding than machine language. ).
Words like ADD, SUM could be used in programs, and a program called an
Assembler translates these words into Machine language. It was developed (in early
1950‟s) to speed up programming. Comments can be incorporated into the program
statements to make them easier to be understood by the human programmers.
3. Third Generation: High-level languages. These languages are more abstract, using
English-like syntax, which makes them easier to understand and code. These are
languages developed to solve the problems encountered in low-level programming
languages. The grammar of High-level languages is very close to the human being’s
natural languages vocabulary, hence easy for the human beings to understand and use.
They allow a problem solution to be specified in a human & problem- oriented
manner. The programs are able to run in any family of computers provided the
relevant translator is installed. Programs written in high-level languages are shorter
than their low-level equivalents, since one statement translates into several machine
code instructions.
Examples:
COBOL (COmmon Business Oriented Language).
FORTRAN (FORmula TRANslation).
BASIC (Beginners All-purpose Symbolic Instruction Code).
PASCAL.
C.
C++ (Object C).
Java
LOGO.
COROL.
RPG (Report Program Generator).
SNOBOL (String Oriented Symbolic Language).
4. Fourth Generation: Languages designed to be more user-friendly, often used for
databases and high-level application development.
- Examples: SQL, MATLAB, Visual Basic, VB.NET, C#.NET, scripting
languages like JavaScript.
5. Fifth Generation: Logic-based languages often used for artificial intelligence and
expert systems.
- Examples: Prolog, LISP (LISt Processing)., and Mercury.
Translator Software
Since computers can only execute machine code, programs written in higher-level languages
need to be translated into machine language. Translator software is used to convert a program
written in high-level language and assembly language to a form that the computer can
understand. Translator software converts a program written in assembly language, and high-
level language to a machine-level language program
The translated program is called the object code.
There are three different kind of translator software:
Assembler,
Compiler, and
Interpreter.
1. Assembler:
- Definition: A software that translates assembly language into machine code.
Assembly language is also referred to as a symbolic representation of the
machine code.
Figure: Assembler
2. Compiler:
- Definition: A translator that converts a program written in a high-level
language into machine language all at once.
The program written in high-level language is referred to as the source code and compiled
program is referred as the object code. The object code is the executable code, which can run
as a stand-alone code. It does not require the compiler to be present during execution.
In some languages, compilation using the compiler and linking using the linker are required
for creating the executable object code.
The compilation process generally involves two parts—breaking down the source code into
small pieces and creating an intermediate representation, and, constructing the object code for
the intermediate representation. The compiler also reports syntax errors, if any, in the source
code.
- Key Features:
The entire program is compiled, producing an executable object code.
The object code can be run multiple times without the need for
recompilation.
Generates faster code compared to interpreted programs.
- Examples:
C++, Java, FORTRAN, COBOL, Pascal use compilers.
- Use: Ideal for large programs where execution speed is crucial.
3. Interpreter:
- Definition: A translator that converts high-level language into machine code
line-by-line during program execution.
The purpose of interpreter is similar to that of a compiler. The interpreter is used to convert
the high-level language program into computer-understandable form. However, the
interpreter functions in a different way than a compiler. Interpreter performs line-by-line
execution of the source code during program execution. Interpreter reads the source code
line-by-line, converts it into machine understandable form, executes the line, and then
proceeds to the next line.
- Key Features:
The interpreter translates one line at a time and immediately executes
it.
Slower than compilers, but useful for development and debugging due
to real-time error detection.
- Examples:
Python, Ruby, BASIC, and JavaScript use interpreters.
- Use: Used where ease of debugging is needed or where interactive execution
is essential, such as in scripting and development environments.
1. Execution Method:
- Compiler: Translates the entire source code into object code at once. The
object code is then executed.
- Interpreter: Translates and executes the source code line-by-line.
2. Object Code:
- Compiler: Produces object code that can be run multiple times without
recompiling.
- Interpreter: Does not produce object code; it interprets the source code each
time it's run.
3. Speed:
-Compiler: Compiled programs run faster because they are already translated
into machine code.
- Interpreter: Slower execution as each line is translated during runtime.
4. Execution Requirement:
- Compiler: After compilation, only the object code is required for execution.
- Interpreter: Both the interpreter and the source code are needed during
execution.
5. Use Case:
- Compiler: Suitable for larger programs where speed is critical.
- Interpreter: Ideal for scripting or real-time debugging due to line-by-line
execution.
Linker:
A source code of a program is often very large consisting of several hundred or more lines.
The source code may also include reference to libraries. All these independent modules may
not be stored in a single object file. The code is broken down into many independent modules
for easy debugging and maintenance. Before execution of the program, these modules and the
required libraries are linked together using the linker software. The compiled and the linked
program are called the executable code.
- Use: Used when a program is divided into smaller modules that need to be
combined for execution.
Loader:
Software has to be loaded into the main memory during execution. Loader assigns storage
space to the program in the main memory for execution. Figure below shows the working of
a Java Runtime Environment (JRE). The java source file Sample.java is compiled and
converted into a set of bytecodes and are stored in Sample.class file. At runtime, the class
loader loads the bytecodes from the hard disk, checks it, and runs it in an interpreter. The
interpreter executes the bytecode and makes calls to the underlying hardware.
NOTE: Loaders and linkers are grouped under system utilities for developing software,
rather than for general computer management. Here's why:
- System Utilities for Developing Software: These utilities assist in the process of
developing, compiling, linking, and loading software for execution. Linkers and
loaders are essential tools in transforming high-level or assembly-level code into
executable programs.
- Linker: Combines object files and resolves symbol references to create an
executable.
- Loader: Loads the executable into memory and prepares it for execution.
- System Utilities for Computer Management: These utilities are focused on
maintaining, optimizing, or managing the computer's resources and overall system
health (e.g., disk defragmenters, file compression utilities, antivirus software). They
don't directly contribute to software development but rather manage the environment
in which software operates.
So, linkers and loaders are part of the software development process, helping transform
written code into executable software, which clearly places them under system utilities for
developing software.
- Use: Once the code is compiled and linked, the loader places the executable
program into memory, ready for the CPU to run.
Debugger:
A debugger is a specialized software tool that helps developers test and identify issues or
bugs in their code. Debuggers enable developers to examine the internal state of an
application while it is running, allowing them to trace the flow of execution, set breakpoints,
inspect variables, and step through code line by line to find errors or unexpected behavior.
Debuggers are essential in the software development process as they help ensure that the code
functions as intended, making it easier to identify and resolve bugs before the software is
released.
Categories of Debuggers
Debuggers can be categorized based on their functionality and the level at which they
operate:
1. Source-Level Debuggers
These debuggers work at the source code level, allowing developers to debug
applications by referencing the original source code. They enable the inspection of
variables, execution flow, and logic based on the actual programming language code.
- Examples: GDB (GNU Debugger), Visual Studio Debugger, Eclipse
Debugger.
2. Machine-Level (Low-Level) Debuggers
Machine-level debuggers allow debugging at the machine code or assembly
language level. These debuggers are used for low-level programming tasks, such as
debugging operating systems, device drivers, or hardware-specific code, where source
code may not be available.
- Examples: LLDB, OllyDbg, Windbg.
3. Post-Mortem Debuggers
These debuggers are used after a program has crashed. They help analyze the core
dump or memory dump files to diagnose what caused the crash. This is useful when
live debugging is not possible.
- Examples: WinDbg (with crash dump analysis), GDB with core dumps.
4. Remote Debuggers
Remote debuggers enable developers to debug an application running on a different
machine or device than the one hosting the debugger. This is commonly used in
embedded systems or when testing code on different environments or platforms.
- Examples: Visual Studio Remote Debugger, Eclipse Remote Debugger.
5. Integrated Debuggers
These debuggers are built into Integrated Development Environments (IDEs),
combining debugging functionality with other tools like editors and compilers. They
make it easier for developers to debug while coding.
- Examples: Visual Studio, Eclipse, IntelliJ IDEA.
6. Interactive Debuggers
Interactive debuggers allow developers to modify the execution flow of a program
dynamically. Developers can change variable values and even skip or rerun certain
sections of code to understand program behavior better.
- Examples: Python’s PDB (Python Debugger), Ruby's IRB Debugger.
In summary, debuggers are critical tools that assist developers in understanding and resolving
errors in their programs, and they come in various forms depending on the level and method
of debugging required.
- System-level functionality: Debuggers interact with both the operating system and
the application being debugged, often requiring deep access to the hardware and
memory to trace, control, and monitor code execution.
- Development process: They are crucial in the software development lifecycle,
helping developers troubleshoot and fix issues within the code before an application is
finalized and deployed.
Programming software like compilers, interpreters, linkers, and debuggers serve as essential
tools for writing and improving software applications, making debuggers a key part of this
software category.
Conclusion: Programming languages are essential for instructing computers on what to do.
From low-level machine languages to high-level, user-friendly languages, they offer a range
of tools for developers based on the task's complexity and requirements. Various translator
software like assemblers, compilers, and interpreters help convert these human-readable
programs into machine-readable formats for execution.
Middleware:
Categories of Middleware
Explanation
1. System Software:
- Middleware provides essential services that help different applications
communicate and manage data. It operates at a level that allows it to manage
interactions between system resources (like databases, servers, and networks)
and applications, which is characteristic of system software.
2. Application Software:
- In some contexts, middleware can also be viewed as application software
when it is designed to facilitate specific applications or user-driven processes.
For instance, if middleware is specifically tailored to support a certain
application’s functionality (like connecting a web application to a database), it
takes on the role of application software in that scenario.
NB:
Application Software
Definition: Application software or application programs are end-user programs that serve
specific functionality and is designed to help users accomplish specific tasks. It may be a
single program or a set of programs (software package) that provides required functionality
for various applications, such as word processing, image editing, database management, and
accounting.
Note:
Application programs can be written by the user, programmers employed by the user,
or by a Software house (a company specializing in writing software).
Application programs can be written with very little knowledge of the hardware
details of a specific computer, and can run on several different computers with little or
no modification.
In summary, application software bridges the gap between users and the system, helping
them perform specific tasks efficiently through a user-friendly interface and providing
solutions to various problems.
Advantages:
Disadvantages:
Advantages:
Disadvantages:
Application software is categorized into various types based on their functionalities, from
word processors and spreadsheets to graphics, CAD, and multimedia programs. Each type is
designed to solve specific problems and assist users in accomplishing particular tasks
efficiently.
Software Suites:
Low-level languages are used to write the While high-level languages are used to
system software. write the application software.
Without system software, the system stops and While Without application software
can’t run. system always runs.
Conclusion: In short, both these system software and application software are integral parts
of Computer System. Each of them have a different and unique role. As system software
ensures that hardware will managed smoothly and application software ensures that user can
perform any specific task smoothly and directly without any disturbance, difference between
these two types of software helps in better understanding how computers function and how to
utilize them effectively.
Software as a Product:
A Software house is a company that specializes in producing software and related services.
When software is purchased for use on a particular computer, the purchaser obtains a copy of
the program plus a no. of other items of documentation.
Software may therefore refer to the various programs used in a computer system together
with their associated documentation.
(a). Licence.
The purchaser pays a Licence Fee, which gives him/her the right to use the software on a
particular computer or a specified no. of computers on a particular site.
Alternatively, a Site Licence may be paid, which entitles the purchaser to use the software on
any computer at a particular space. Sometimes, the licence may specify the no. of users that
may use the software at any one time, and in case of a Single-user licence, the users’ name
must be registered.
Note: Using software in breach of licence agreements is a serious offence for which the user
may be sued for damages or subjected to criminal prosecution.
The guide provides information about what hardware is needed to enable the programs to run
satisfactorily.
It tries to describe the procedures to be followed in order to set up the software, so that it can
be used satisfactorily & efficiently on a particular kind of computer.
If the purchaser is not an expert in setting up the software, he pays an additional fee to have
the software installed.
Sometimes, faults called Bugs may light up sometime after the software has been delivered
and put to use.
A good supplier will make every effort to correct bugs as and/or when they are discovered &
will provide a new corrected version of the program containing the necessary “Bug fixes”.
The correction of bugs (i.e. maintenance) is often combined with enhancements to the
software to make it better in some way. Enhancements normally involve increased
“functionality”, i.e. making it work faster.
Licensed purchasers may get some of these changes provided free of charge, perhaps during
the 1st year of use. Subsequently, the purchaser may be required to pay an annual fee for
maintenance and updates.
A User Guide is usually a manual provided for the end-user to enable him/her to learn how to
use the software. Such guides usually use suitable examples to take the user through the
stages of carrying out various tasks with the software.
A reference manual is normally intended to be used by a user who already knows how to use
the software, but who needs to be reminded about a particular point or who wants to obtain
more detailed information about a particular reference.
This may be a single sheet or card, which the user may keep for help with common tasks
carried out with the software.
(h). Training.
The software supplier may provide training courses on how to use the software. Sometimes,
some initial training is provided free as part of initial purchase.
A User group is a club for individuals or organizations who use a particular hardware or
software product. The club is often run and partly sponsored by the supplier.
Members of user groups receive Newsletters, which enable them to find out more about the
product & how to use it.
Malware:
Types of Malware
1. Viruses:
- Description: A virus attaches itself to clean files and spreads throughout a
computer system, infecting other files and programs. It can corrupt data, steal
information, or create backdoors for other malware.
- Example: A virus that spreads through email attachments or infected USB
drives.
2. Worms:
- Description: Worms are standalone malware that replicate themselves to
spread to other computers, often exploiting network vulnerabilities. Unlike
viruses, they do not require a host program to spread. It replicates through
computer memory, crashing the system when memory is exhausted. It’s a
program that “borrows” (or sneaks) into a computer’s memory. It is designed
to search for idle computer memory, and then rewrite itself successfully
through the computer’s memory until the system crashes.
- Example: The ILOVEYOU worm that spread via email in the early 2000s.
3. Trojan Horses:
- Description: Trojans disguise themselves as legitimate software or are
embedded in legitimate software. They often create backdoors for attackers to
access the system. They are programs, which deliberately set out to destroy
data, often their trigger (activator / starter) could be specific event like time
(time bombs) or logic conditions (logic bombs). Trojans do not multiply like
viruses, but are equally harmful.
- Example: A fake antivirus program that pretends to scan your system but
actually infects it.
4. Ransomware:
- Description: Ransomware encrypts a user’s files and demands payment
(ransom) for the decryption key. It can severely disrupt personal and
organizational operations.
- Example: WannaCry, which attacked thousands of computers worldwide in
2017.
5. Spyware:
- Description: Spyware secretly monitors user activities and collects personal
information, such as login credentials and browsing habits, often without user
consent.
- Example: Keyloggers that record keystrokes to capture sensitive information.
6. Adware:
- Description: Adware automatically delivers advertisements to a user’s device.
While not always harmful, it can disrupt user experience and collect personal
data.
- Example: Software that displays pop-up ads and tracks user behavior to
deliver targeted ads.
7. Rootkits:
- Description: Rootkits are designed to gain unauthorized root access to a
system while remaining undetectable. They can hide other malware, making
removal difficult.
- Example: Malware that modifies the operating system to hide its presence and
the presence of other malicious software.
8. Botnets:
- Description: A botnet is a network of infected computers (bots) controlled by
a hacker. They can be used to execute distributed denial-of-service (DDoS)
attacks or send spam emails.
- Example: The Mirai botnet, which was used in major DDoS attacks against
internet infrastructure.
9. Variants: Programs similar to viruses that belong to the same family but have slightly
different effects. Example; a virus called HAALAND causes .COM files to increase
by 1,168 bytes, while its two variants; HAALAND1 & HAALAND2 increase them
by 128 and 1514 bytes respectively.
1. Use Antivirus Software: Regularly update and run antivirus programs to detect and
remove malware.
2. Keep Software Updated: Ensure that operating systems and applications are up-to-
date with the latest security patches.
3. Educate Users: Inform users about safe browsing habits, phishing scams, and the
importance of not downloading untrusted software.
4. Implement Firewalls: Use firewalls to protect networks and devices from
unauthorized access.
5. Regular Backups: Regularly back up important data to recover from potential
malware attacks, especially ransomware.
Conclusion
Malware poses a serious threat to computer security and can lead to significant data loss,
financial damage, and identity theft. Understanding the different types of malware and
implementing effective security measures can help protect systems and data from these
malicious threats.
Computer Viruses:
A computer virus is a malicious program designed to replicate itself and cause damage to a
computer system without the user's knowledge.
A Computer virus is a program (or a piece of software), which attaches itself to another
program or a system.
It is designed specifically to copy itself to other programs & cause some undesirable effect on
the programs (or damage them) without the knowledge of the user. E.g., it may attach itself
to the FORMAT command, and be run every time you format a diskette.
Types of Viruses:
1. Destructive Viruses:
- Massive Destruction: Erases all files or damages the disk format, making
recovery difficult. The virus attacks the format of disks, or deletes all files on
the disk, making any damage to programs or data on that disk unrecoverable.
- Partial Destruction: Erases or modifies specific portions of a disk, affecting
any files stored in that location.
- Selective Destruction: Targets and modifies specific files or file groups.
- Random Havoc: Randomly alters data or system processes. Randomly
changes data on a disk or in memory during normal program execution. Also
changes keystroke values, or data from other I/O devices.
- Network Saturation: Uses system resources to slow down or crash the
network. The virus systematically uses up computer memory or space,
impeding performance or causing the system to crash.
2. Non-Destructive Viruses:
- These viruses don't cause damage but can be highly annoying.
- What Non-destructive viruses do?
1. They might lock the Keyboard.
2. Change keystroke values (e.g. changing the effect of the SHIFT key).
3. Display an obnoxious (loathsome/ horrible/ intolerable) message on the
screen.
4. Change the display colours.
5. Delete characters displayed on a visual display.
Sources of Virus Transmission (Virus transmission - ways in which a virus can spread):
Any disk used on a contaminated system could become contaminated. If the same disk is
used on another system, then the virus will spread.
The use of rented disks containing Pirated computer software introduces the risk that the
software may be contaminated by a virus code or might have been amended to perform some
other destructive function, which may affect your system.
There are cases of virus programs being introduced and contaminating software under
development in laboratories and then being installed onto diskettes containing the finished
software product.
Some virus programs pose as game software. Since many people like playing games on
computers, then virus can spread very fast. It can take a very short period for a game
program to spread across many countries.
Freeware & Shareware programs are commonly available from Bulletin Board Systems
(BBS). Using a Modem & a Telephone to dial into a public bulletin board system &
download programs onto your system may cause transmission.
Such programs should be treated with care. They should first be used in a controlled
environment until it is clear that the program actually does what it is supposed to do and does
not contain either a virus or a destructive code.
Distribution of software through networks is an obvious target for virus programmers as they
provide a built-in method for widespread & anonymous (unidentified, unknown, secret)
propagation.
Symptoms of a Virus:
The presence of a virus can be indicated if one or more of the following symptoms appear on
your computer.
i. Unfamiliar graphics or quizzical (surprising) messages appearing on the screen.
ii. Programs taking longer than usual to load. Slow program execution.
iii. Disk access time seeming too long for simple tasks.
iv. Unusual Error messages or computer crashes occurring more frequently.
v. Less memory available than usual, e.g. Base memory may read less than 640K.
vi. Access lights turning on for non-referenced devices.
vii. Programs or files disappearing mysteriously.
viii. Executable files or data files changing size for no obvious reason.
ix. Changes of disk volume IDs.
x. Frequent Read/Write errors.
xi. Computer hags (gets stuck) anytime when executing or running a program.
Any evidence of these or similar events should be of an immediate concern. The PC should
be isolated at once and investigated.
A virus infects a machine for which it was written, i.e. a virus that was written for a
Macintosh computer cannot infect an IBM PC or a Clone.
A virus infects files containing programs; they do not infect files containing data.
A virus-infected program attaches itself to the bottom of a normal useful program. When the
normal program is run, the portion containing the virus is the first to be run, thus infecting
other uninfected programs
The most common type of virus is the Boot Sector Virus, which is common to most disks,
e.g. disk A: The virus hides in the Boot sector of the disk (the area of the disk, which is
automatically loaded when the computer starts up). The virus resides in RAM from where it
can infect the boot sector of your hard disk & every disk you use.
Note: For an anti-virus to be able to detect a virus, it must know its signature.
Software operates by processing commands (inputs) given by the user. These commands,
written in human-understandable languages, are converted into binary (machine language)
that the software and computer hardware understand. The software then processes these
inputs and provides the desired output, which depends on the nature of the commands and the
software's functionality.
Software distribution refers to the methods and channels through which software is made
available to users based on ownership and usage rights. Here are the primary ways software is
distributed:
1. Commercial Distribution
- Description: Users are provided with a license to use the software, but they do not
own the software outright. While users can operate the software, they don’t own it,
and they are typically restricted from making modifications or adding features.
- Characteristics:
- Users cannot modify or add features to the software.
- Often involves purchasing a copy of the software or a license.
- Examples: Traditional software purchases like Microsoft Office or Adobe Creative
Suite.
2. Open-Source Distribution
- Description: Software that is available for download along with its source code,
allowing users to modify and distribute it. Open-source software is freely
distributed and includes access to the source code, allowing users to modify or
enhance the program. Some open-source software is free, while others may be
sold at a retail price.
- Characteristics:
- Users can make changes and improvements to the software.
- May be offered free of charge or sold at retail prices.
- Examples: Linux operating systems, Apache web server, and LibreOffice.
3. Freeware
- Description: Software that is available for download at no cost and can be used
indefinitely. Freeware is free for users to download and use without any licensing
fees. However, freeware often contains embedded advertising (adware) that generates
revenue for the developer.
- Characteristics:
- Typically ad-supported or offered by companies to increase their reach.
- Users can download and use it without payment, but the source code is usually
not available for modification.
- Examples: Skype, Audacity, Zoom, Adobe Reader, WhatsApp, Google Chrome,
VLC Media Player.
4. Shareware
5. Cloud-Based Distribution
- Description: Software delivered over the internet and accessed through a web
browser or thin client.
- Characteristics:
- Users do not need to install the software on their local machines.
- Often based on subscription models, where users pay for access rather than
outright purchase.
- Examples: Google Workspace, Microsoft 365, and Salesforce.
6. Bundled Distribution
- Description: Software that is packaged and sold together with other software.
- Characteristics:
- Typically includes a suite of related applications, often at a reduced price
compared to purchasing each application separately.
-Often found in software suites.
- Examples: Microsoft Office Suite (includes Word, Excel, PowerPoint, etc.).
7. Physical Distribution
The method of software distribution can vary significantly based on the software type, target
audience, and intended use. Each distribution model has its advantages and disadvantages,
affecting how users access, use, and pay for software.
The Software Development Life Cycle (SDLC) is a structured process used for developing
software applications. It outlines various phases that guide the planning, creation, testing,
deployment, and maintenance of software systems. Understanding the SDLC is crucial for
ensuring that software is developed efficiently, meets user requirements, and maintains high
quality throughout its life.
1. Requirements Gathering and Analysis
- Definition: The initial phase where project stakeholders, including users, developers,
and managers, come together to discuss and define the software's requirements.
- Purpose:
Identify user needs and expectations.
Document functional and non-functional requirements.
Establish a clear understanding of the project scope.
- Activities:
Conduct interviews and surveys.
Organize workshops and focus groups.
Analyse existing systems and gather user feedback.
- Outcome: A comprehensive requirements specification document that serves as the
foundation for all subsequent phases.
2. Design
- Definition: The phase where the architecture of the software is defined, focusing on
how the system will operate and meet the requirements identified earlier.
- Purpose:
Outline the overall structure of the software, including user interfaces,
databases, and system interfaces.
Create detailed design specifications that guide developers during
implementation.
- Activities:
Create architectural diagrams and flowcharts.
Develop user interface prototypes.
Design database schema and data models.
- Outcome: Design documentation that provides a roadmap for developers to follow
during the implementation phase.
4. Testing
- Definition: The phase where the software is rigorously tested to identify and fix
defects and ensure it meets the specified requirements.
- Purpose:
Validate that the software functions as intended and meets quality standards.
Identify and resolve any issues before deployment.
- Activities:
Conduct various types of testing, including unit testing, integration testing,
system testing, and user acceptance testing (UAT).
Document test results and track defects.
Perform regression testing after fixes to ensure no new issues have been
introduced.
- Outcome: A software product that is free from critical defects and ready for
deployment.
5. Deployment
- Definition: The phase where the software is made available for use by end users.
- Purpose:
Ensure a smooth transition from development to production environments.
Provide users with access to the software.
- Activities:
Install the software on user systems or deploy it to production servers.
Provide training and documentation for users.
Monitor the deployment process for any immediate issues.
- Outcome: The software is successfully launched and operational in a real-world
environment.
6. Maintenance
- Definition: The final phase of the SDLC, focusing on the ongoing support and
improvement of the software after it has been deployed.
- Purpose:
Address any issues that arise post-deployment.
Implement updates and enhancements based on user feedback and changing
requirements.
- Activities:
Monitor system performance and user satisfaction.
Fix bugs and vulnerabilities as they are discovered.
Plan for future upgrades and feature enhancements.
- Outcome: A software application that remains relevant, functional, and secure over
time.
The Software Development Life Cycle (SDLC) is a vital framework that ensures software
projects are managed effectively, leading to high-quality products that meet user needs. Each
phase plays a critical role in the overall success of software development, and understanding
these phases is essential for aspiring software developers and project managers.
Software Testing:
- Reliability: Testing ensures that the software operates as intended under various
conditions, providing assurance that it can perform consistently over time without
failures.
- Functionality: It verifies that the software performs its required functions accurately,
aligning with user expectations and business requirements.
- Cost-Effectiveness: Identifying and addressing defects during the early stages of
development helps reduce the cost and effort of fixing issues later in the software
lifecycle.
- User Satisfaction: Thorough testing enhances the user experience by delivering high-
quality software that is free from critical errors, thus fostering user trust and
satisfaction.
- Regulatory Compliance: In certain industries, software must meet specific
regulatory requirements. Testing ensures compliance with these standards, thereby
minimizing legal risks.
Types of Testing
Software testing can be categorized into various types, each serving a distinct purpose within
the software development lifecycle:
1. Unit Testing
3. System Testing
- Definition: System testing evaluates the complete and integrated software application
to verify that it meets specified requirements.
- Objective: The goal is to validate the software's end-to-end functionality,
performance, security, and usability.
- Conducted By: Typically performed by a specialized testing team.
- Types:
Functional Testing: Validates that the software performs the required
functions.
Non-Functional Testing: Evaluates aspects like performance, usability, and
security.
- Definition: UAT is the final phase of testing before the software is released to users.
It involves actual users testing the software to ensure it meets their needs and
requirements.
- Objective: The aim is to confirm that the software is ready for deployment and that
users can operate it as intended.
- Conducted By: Performed by end-users or clients.
- Types:
Alpha Testing: Conducted in-house by testers who simulate user interactions.
Beta Testing: Conducted by a limited number of external users in a real-world
environment.
Software testing is a critical activity that ensures the quality, reliability, and functionality of
software applications. By employing various testing types—such as unit testing, integration
testing, system testing, and user acceptance testing—developers and testers can effectively
identify defects and validate that the software meets user expectations and business
requirements. This process ultimately contributes to delivering high-quality software that
enhances user satisfaction and reduces maintenance costs.
Regular testing helps identify technical issues in the source code and ensure the software
meets performance expectations. Maintaining software quality post-development involves
continually evaluating user needs and updating the software to address any issues.
Modern software development practices embrace Lean and Agile principles, which
emphasize customer requirements and continuous improvement. Whether developing small-
scale applications or large, complex systems, these methodologies help integrate new features
quickly and ensure the software remains responsive to user needs.
Effective computer maintenance ensures that systems run smoothly, securely, and efficiently.
Regular maintenance helps to prevent hardware and software failures, prolongs the life of the
computer, and enhances user experience.
1. Disk Cleanup
- Purpose: Removes unnecessary files that consume disk space, such as
temporary files, system cache, and recycle bin contents.
- Benefits:
Frees up disk space.
Improves system performance.
Reduces the likelihood of system slowdowns.
2. Disk Defragmentation
- Purpose: Rearranges fragmented data on the hard drive so that related data is
stored close together, enabling faster access.
- Benefits:
Enhances file access speed.
Increases overall system efficiency.
Helps maintain hard drive health by reducing wear and tear.
3. Antivirus Scanning
- Purpose: Detects and removes malicious software (malware) that can
compromise system security and integrity.
- Benefits:
Protects against viruses, spyware, and other malicious threats.
Ensures data integrity and user privacy.
Reduces the risk of data loss and system damage.
4. Software Updates
- Purpose: Installs the latest updates and patches for operating systems and
applications to fix bugs, improve functionality, and enhance security.
- Benefits:
Fixes vulnerabilities that could be exploited by attackers.
Improves software performance and stability.
Introduces new features and capabilities.
Software Licensing
Software licenses are legal agreements that govern the use and distribution of software. They
provide users with rights to one or more copies of software and set limits on how the software
can be used. Licensing terms typically include fair use policies, warranties, liability
limitations, and protection against intellectual property infringements.
Types of Licenses
1. Proprietary Licenses
- Description: Software is owned by an individual or company, and users must
obtain permission to use it.
- Characteristics:
Users cannot modify or distribute the software.
Usually requires purchasing a license.
Examples include Microsoft Windows and Adobe Photoshop.
2. Open-Source Licenses
- Description: Software is released with a license that allows users to view,
modify, and distribute the source code.
- Characteristics:
Promotes collaboration and transparency.
Users can customize software to fit their needs.
Examples include the GNU General Public License (GPL) and Apache
License.
3. Shareware and Freeware
- Shareware:
Description: Software that is available for free on a trial basis but
requires payment for continued use.
Characteristics:
Users can evaluate the software before purchasing.
Examples include WinZip and Adobe Acrobat Reader.
- Freeware:
Description: Software that is available for free and can be used
indefinitely.
Characteristics:
May include advertisements or limited functionality.
Examples include Skype and Audacity.
Copyright Issues
Software Patents
While copyright laws protect against unauthorized copying of software, patents prevent
others from developing software with similar functional aspects. Patents give software
developers exclusive rights to the functional innovations described in their patents, offering
additional legal protection beyond copyright.