This document sets out a list of well known projects, placed in a loose taxonomy, that serve as a checklist when drafting public software license terms. When thinking about how a new license will work when applied to different kinds of software, running through this list can help.
This list can also serve as a research list for lawyers without technical backgrounds, who need to develop a sense of the kinds of software available.
Last Updated: February 2, 2022
We can think of software projects as falling into a few general categories and subcategories:
-
Applications meet a particular, non-technical need for end-users
-
Standalone Applications provide all the functionality needed to meet the end-user need
Examples:
-
Plugins add more functionality to larger applications
Examples:
- Adblock Plus, a web browser extension that blocks advertisements on webpages
-
Server Applications provide a server for client applications to contact
Examples:
-
Client Applications contact server applications
Examples:
- Firefox, a web browser
-
Peer-to-Peer Applications act as both clients and servers
Examples:
-
BitTorrent, a file sharing application
-
Ethereum, a peer-to-peer, blockchain-based processing system
-
-
-
Components are used to build applications
-
Libraries provide code for developers to invoke
Examples:
-
jQuery, a front-end JavaScript toolkit and compatibility layer
-
mongo-c-driver, a C driver for the MongoDB database
-
OpenSSL, a cryptography and SSL/TLS toolkit
-
-
Frameworks invoke code that developers write
Examples:
-
Ruby on Rails, a server-side web application framework
-
Ember, a full-stack web application framework
-
Cordova, a mobile application framework
-
-
Services communicate with other programs
Examples:
-
PostgreSQL, a SQL database
-
Network Time Protocol Daemon, a system daemon that synchronizes system clocks
-
-
-
Development Tools help developers make software
-
Editors are the applications programmers use to write code
Examples:
-
Generators output source code
Examples:
-
Analyzers take source code as input, and output useful information
Examples:
-
Compilers take source code as input, and output binary code
Examples:
-
Debuggers help programmers run programs step-by-step
Examples:
- GDB, a C debugger
-
Package Managers download and install software components
Examples:
-
Revision Control Systems manage changes to source code over time
Examples:
-
-
Platforms help users run applications
-
Kernels makes computer hardware available for computer software to use
Examples:
- Linux, a UNIX-like operating system
-
Base Systems perform small tasks from the command line
Examples:
-
GNU coreutils, a collection of core UNIX utilities
-
BusyBox, a collection of core UNIX utilities for embedded systems
-
-
Interpreters run programs written in interpreted languages
Examples:
- Python, a programming language interpreter
-
Orchestrators set each each part of an application up to be run, and connect them together
Examples:
-
Chef, a configuration management tool
-
Kubernetes, a container-based orchestration system
-
-