License Test Suite
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.
Skip To: Applications Components Development Tools Platforms
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:
-
Emacs, a highly extensive text editor
-
Eclipse, a highly extensive integrated development environment
Generators
output source code
Examples:
-
Bison, a parser generator
-
WebPack, a front-end JavaScript bundler
-
UglifyJS, a JavaScript minifier
-
Obfuscar, an obfuscator for .NET assemblies
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