Distribution Triggers Conditions

When users download your CLI, that is distribution. Every copyleft condition in your dependency tree applies.

1 IDE and Tooling No obligations

Your IDE (VS Code, IntelliJ, Xcode, Android Studio), linters (ESLint, Prettier, SwiftLint, clippy, Pylint), formatters (Black, Prettier), build tools (Gradle, Make, Cargo, go build), bundlers (Webpack, Vite, Rollup, esbuild), transpilers (Babel, TypeScript), test runners (Jest, Vitest, pytest, XCTest), and version control (Git). These are all development tools.

No obligations

None of these tools ship with your final product. They run during development and build time, not at runtime. Their licenses impose no conditions on your output.

Bundler runtime snippets

Some bundlers inject a small runtime snippet into your output (e.g. Webpack’s module loader). These snippets are typically released under the same permissive license as the bundler itself (MIT for Webpack, Vite, Rollup). The condition is simply to include the copyright notice, which is usually embedded as a comment in the output.

2 Language and Runtime No obligations

Swift, Kotlin, Dart, Java, TypeScript, Go, Rust, Python, Node.js, C/C++.

No license obligations apply. Compilers transform your code but do not embed themselves in the output. GCC includes a Runtime Library Exception that explicitly permits this. Java’s Classpath Exception permits proprietary applications that use the Java runtime. All major language runtimes are permissive or include exceptions for proprietary code.

Bundled runtimes

If you package a runtime with your binary (e.g. Python via PyInstaller), the runtime ships with your tool. Python’s PSF license is permissive. Check the bundler’s terms too.

3 Libraries and Dependencies Obligations apply

When you distribute your product (app stores, binary downloads, Docker images), every dependency ships with it. Each library’s license conditions apply.

MIT, BSD, Apache 2.0

Permissions

  • Commercial use
  • Modification
  • Distribution
  • Private use

Conditions

  • Include copyright notice
  • Include license text

Limitations

  • No liability
  • No warranty
Your obligation

Include each library’s copyright notice and license text in your product’s acknowledgements screen.

GPL

Permissions

  • Commercial use
  • Modification
  • Distribution

Conditions

  • Disclose source code
  • Same license on derivative works
  • Include copyright notice

Limitations

  • No liability
  • No warranty
Your obligation

Make your complete source code available under the GPL and include copyright notices.

LGPL

Permissions

  • Commercial use
  • Modification
  • Distribution

Conditions

  • Disclose source of library
  • Same license on library modifications
  • Allow relinking

Limitations

  • No liability
  • No warranty

LGPL permits proprietary use only if users can replace the library with a modified version — this is the “relinking” requirement.

Mobile apps (iOS, Android): Static linking is the norm. When the LGPL library is linked statically into your binary, users cannot swap it out. LGPL’s conditions therefore apply to your entire app, equivalent to GPL.

CLI tools in Go or Rust: Both languages produce statically linked binaries by default. The same consequence follows — LGPL behaves like GPL for your distributed binary.

Your obligation

Switch to dynamic linking, replace the dependency, or release your app under the LGPL.

Dynamic linking: If you dynamically link the library (e.g. a shared .so or .dll), users can swap the library without recompiling your binary. The LGPL conditions apply only to the library itself, not to your application code. You must ship the library’s source and allow relinking, but your proprietary code stays private.

AGPL

Permissions

  • Commercial use
  • Modification
  • Distribution
  • Patent use

Conditions

  • Disclose source code
  • Same license on derivative works
  • Network use is distribution
  • Include copyright notice

Limitations

  • No liability
  • No warranty

Same as GPL for distributed software, plus the network use clause. For distributed products, the distribution clause already applies, making AGPL equivalent to GPL.

Your obligation

Make your complete source code available under the AGPL and include copyright notices.

4 Distribution Method No obligations

Homebrew, npm global, pip, cargo, Docker image, direct download. All count as distribution.

Docker images

Distributing the image distributes everything inside it.

5 Operating System No obligations

Your product runs on the user’s device — Android (Linux GPL), iOS (proprietary), macOS, Windows, or Linux.

No license obligations apply. Your product is a user-space application and is not a derivative work of the kernel. The Linux kernel’s license does not extend to programs that run on top of it. Android’s C library (Bionic) uses a BSD license, not glibc (LGPL), specifically to avoid imposing conditions on app developers.

Docker images

If you distribute Docker images, the OS packages inside carry their own license obligations — but your application code remains independent.

6 Configuration and Data Files No obligations

JSON schemas, YAML configs, data files. No license concerns.

How to Fulfill Your Obligations

1. Add a --licenses Flag


The CLI equivalent of a mobile app’s acknowledgements screen. yourtool --licenses prints all third-party copyright notices and license texts to stdout. This satisfies the “include copyright notice and license text” condition for MIT, BSD, Apache, and most permissive licenses.

2. Ship a NOTICES File


Include a NOTICES or THIRD-PARTY-LICENSES file alongside your binary in the distribution package. This covers users who install via a package manager or download an archive directly.

3. Run a License Audit


Scan your dependency tree before each release to catch new or changed licenses.

If your audit reveals LGPL dependencies in a statically linked binary, you must switch to dynamic linking, replace the dependency, or comply with full copyleft conditions.