A command-line tool distributed as a binary that users download and run on their own machines. Like mobile apps, every dependency ships with your binary.
When users download your CLI, that is distribution. Every copyleft condition in your dependency tree applies.
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.
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.
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.
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.
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.
When you distribute your product (app stores, binary downloads, Docker images), every dependency ships with it. Each library’s license conditions apply.
Include each library’s copyright notice and license text in your product’s acknowledgements screen.
Make your complete source code available under the GPL and include copyright notices.
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.
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.
Same as GPL for distributed software, plus the network use clause. For distributed products, the distribution clause already applies, making AGPL equivalent to GPL.
Make your complete source code available under the AGPL and include copyright notices.
Homebrew, npm global, pip, cargo, Docker image, direct download. All count as distribution.
Distributing the image distributes everything inside it.
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.
If you distribute Docker images, the OS packages inside carry their own license obligations — but your application code remains independent.
JSON schemas, YAML configs, data files. No license concerns.
--licenses FlagThe 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.
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.
Scan your dependency tree before each release to catch new or changed licenses.
npx license-checkergo-licensescargo-licensepip-licensesIf 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.