
The Go programming language, also known as Golang, has a permissive open-source license. This license allows developers to use, modify, and distribute the language and its standard library freely.
The Go license is a variant of the BSD license, which is one of the most permissive open-source licenses. It's designed to promote collaboration and innovation in the development community.
The license requires that any modifications or additions to the Go code must be made available under the same license terms. This ensures that the community can continue to benefit from the contributions of others.
In practice, this means that developers can use the Go language in commercial products, modify the language to suit their needs, and even distribute their own versions of the language.
Take a look at this: Is Golang a Functional Language
Licensing Types
There are two common types of open source licenses: permissive and copyleft.
Copyleft licenses can be restrictive, affecting companies and technical people alike, by limiting use, modification, or redistribution.
Permissive licenses, on the other hand, grant users these rights and simplify legal compliance.
Permissive vs Copyleft
Permissive licenses grant their users the rights to use, modify, and redistribute software, vastly simplifying legal compliance. This is a big deal, especially when you're working with different packages, like those in the standard library or community-developed libraries.
Copyleft licenses, on the other hand, have restrictions against at least one of these rights, which can be a legal burden for companies and technical people alike.
Licensing Issues
The GPL license has a limitation that's addressed by the Lesser GPL (LGPL) license, which is also equivalent to GPL for the Go programming language due to a specific clause.
This clause requires you to provide complete object files to recipients so they can relink them with the library after making changes and recompiling it.
The LGPL license tries to resolve the linking issue, but it's still a complex topic that can be a challenge for developers.
License proliferation is a risk that can hurt code reuse between different projects by taking away the focus on engineering and making the ecosystem weaker.
Here are some key differences between substantially unmodified and substantially modified distributions:
- Substantially unmodified distributions may use the Go Trademarks if they comply with the terms of the Go programming language's open source license and are made in good faith.
- Examples of modifications that are considered substantially unmodified include language translation and localization, bug and security patches, and necessary interoperability/compatibility modifications.
- Substantially modified distributions require review and approval from [email protected] before the Go Trademarks can be used.
LGPL Linking Issue
The LGPL linking issue is a major concern for developers. The LGPL license is intended to resolve the linking issue, but it's not without its own set of challenges.
The LGPL license is equivalent to the GPL license for the Go programming language due to a specific clause. This clause requires developers to provide complete object files to recipients so they can relink them with the library after making changes.
Developers must also show recipients the terms of the LGPL license, so they know their rights. This can be a complex process, especially for large projects with many contributors.
The LGPL 2.1 clause explicitly states the requirements for linking other code with the library. It's essential for developers to understand these requirements to avoid any potential issues.
In practice, this means developers must be prepared to share their code and provide recipients with the necessary information to relink it with the library.
Proliferation Risk
License proliferation would hurt code reuse between different projects.
This is because it takes away the focus on engineering, making the ecosystem weaker.
In fact, license proliferation can make it harder to share and reuse code, which is a major obstacle in software development.
This can lead to a lot of duplicated effort and wasted resources, as developers try to recreate the same functionality multiple times.
Substantially Unmodified Distributions
Substantially unmodified distributions can use the Go Trademarks if they comply with the terms of the Go programming language's open source license and are made in good faith to replicate the quality and substance of the original project.
To be considered substantially unmodified, a distribution can include language translation and localization, bug and security patches, and necessary interoperability/compatibility modifications.
Substantially unmodified distributions must follow the "Naming Conventions for Authorized Uses" and may use the Go Trademarks in connection with such distributions.
Examples of approved naming conventions include using the Go Trademarks in a sentence like "[New Name/Company] managed Go" or "[New Name], a fork of Go".
License Compliance
License compliance is crucial for any software project. It involves ensuring that you have the necessary permissions to use and distribute third-party libraries and dependencies.
Some licenses require you to give credit to the original creators, which can be a challenge. You can use tools like vendorlicenses to help with this task. Vendorlicenses checks and concatenates licenses found on the vendor directory of your program, producing a list of dependencies used to build your software.
This list is usually found on a legal submenu hidden somewhere on software, consumer devices, such as cellphones, videogames, or car media players.
Compliance
Compliance is a crucial aspect of license management. Some licenses require you to give credit to the original creators.
You can use a tool like vendorlicenses to check and concatenate licenses found in your program's vendor directory. This tool produces a list of dependencies used to build your software.
This list is usually hidden in a legal submenu, but it's essential to include it somewhere in your software. You can find this list on consumer devices like cellphones, videogames, or car media players.
If you need extra legal protection, consider using FOSSA for vetting. FOSSA is a tool that can help you vet your licenses and ensure compliance.
Substantially Modified Distributions
Substantially Modified Distributions require review and approval from [email protected] before the Go Trademarks can be used.
If you're planning to create a substantially modified distribution, you'll need to explicitly state the changes you're making to functionality, interfaces, or features.
Substantially modified distributions may include changes to the code or features of the Go programming language.
To get approval, you'll need to submit your distribution for review to [email protected].
If your substantially modified distribution is approved, you can use the Go Trademarks in connection with it, following the "Naming Conventions for Authorized Uses".
However, you cannot use the Go Trademarks if your distribution is intended to disparage the Go programming language or its reputation.
You also cannot use the Go Trademarks if your distribution violates the Go programming language's code of conduct.
Here are some specific restrictions to keep in mind:
- Do not use the Go Trademarks to disparage the Go programming language or its reputation.
- Do not use the Go Trademarks if your distribution violates the Go programming language's code of conduct.
License Management
License Management is crucial when working with GoLang. You need to save licenses, copyright notices, and source code, depending on the license type.
This process involves analyzing a binary/package's dependencies to determine what needs to be redistributed to comply with the license terms. The required artifacts, such as the license itself and a copyright notice, will be saved in the specified directory.
The command that handles this process is quite efficient, saving you time and effort in managing licenses.
Generating A New
Generating a new license is a crucial step in managing licenses. You can use a private key to generate a new license.
To do this, you'll need to create a struct containing the end date and a user email that is marshalled to JSON. This is the format required for the license generation process.
Here's an example of how you can create a struct to hold this information: you can use a simple struct with two properties, one for the end date and one for the user email.
Recommended read: Golang Extend Struct
Save Licenses, Copyright Notices
Saving licenses and copyright notices is an essential part of license management. This involves analyzing a binary or package's dependencies to determine what needs to be redistributed alongside it to comply with license terms.
The command for this process analyzes dependencies and determines what needs to be redistributed. This typically includes the license itself and a copyright notice, but may also include the dependency's source code.
You'll want to save these required artifacts in a specified directory. The directory path is indicated by the --save_path parameter.
All the required artifacts will be saved in the specified directory. This ensures you have everything you need to comply with license terms.
By following this process, you can ensure that your binary or package is properly licensed and compliant.
Dependency and Copying
Go's Proverbs, a set of guiding principles for the Go community, include the phrase "A little copying is better than a little dependency." This suggests that sometimes copying a small piece of code is the better choice.
Rob Pike's quote emphasizes the importance of simplicity and ease of use. In the Go community, this is a widespread practice, where developers opt to copy code instead of adding a small dependency.
No-frills permissive licensing makes it easy to use someone else's code, give credit where due, and move on, rather than getting bogged down in legal vetting and potential risks.
Consider reading: Go High Level Twilio Integration
Dependency vs. Copying

In the Go community, a widespread practice is to copy a little bit of code instead of adding a small dependency.
This is because Go's Proverbs include the phrase "A little copying is better than a little dependency", which suggests that copying code can be a more straightforward solution.
No-frills permissive licensing makes it easy to use a piece of code, give due credit, and move on, rather than getting bogged down in legal vetting and risks.
This approach can save time and effort, and it's a common practice among developers.
Dependency Has Non-Go Code
If you notice a warning about a dependency containing non-Go code, it's essential to investigate further. This is because it's not possible to check the non-Go code for further dependencies, which may conceal additional license requirements.
You should locate the license file on disk and parse the go module metadata to find the remote repo and version. This information will help you determine whether the non-Go code has any dependencies that need to be addressed.

Here are the steps to follow:
- Locate the license file on disk.
- Parses go module metadata and finds the remote repo and version.
- Adds the license file path to this URL.
By taking these steps, you can ensure that you're complying with the license terms of the non-Go code and any additional dependencies it may have.
Fair Use and Distribution
To accurately refer to the Go programming language, you can use the Go trademark in a nominative fair use manner. This means using the trademark in word mark form, such as plain text, and only as much as is necessary.
You should limit your use of the Go trademark to matter-of-fact statements and avoid using it in a way that suggests affiliation with or endorsement from the community or Google. This is especially important in educational contexts or in books and blogs about the Go programming language and its derivative works.
Here are the basic rules for nominative fair use of the Go Trademarks:
- Only use the Go trademark in word mark form, i.e., plain text.
- Only use the Go trademark as much as is necessary.
- Do not use the Go trademark in any way that suggests or implies affiliation with or endorsement from the community or from Google.
Usages
When specifying the Go package, you'll want to format it just like you would for a Go build. This is where go-licenses comes in, expecting the same package argument format as go build.
To learn more about package argument, check out go help packages. It's a great resource for understanding the specifics.
Go-licenses is designed to save not only licenses but also copyright notices and source code, depending on the license type.
On a similar theme: Golang Build
Nominative Fair Use

Nominative fair use is a way to accurately identify the Go programming language or compatible applications by referring to the language by name. This is a basic rule for nominative fair use of the Go Trademarks.
To use the Go trademark in nominative fair use, you must only use the trademark in word mark form, i.e., plain text. Don't use the Go Logo or Go as a stylized form without permission.
You should only use the Go trademark as much as is necessary, and use should be limited to matter-of-fact statements. This means you don't need to use the trademark unless it's essential to your message.
Here are some examples of nominative fair use in practice:
- Example 1: "The Go programming language is used in many applications."
- Example 2: "Go is a popular language for building scalable applications."
In educational contexts, books, or blogs about the Go programming language and its derivative works, nominative or descriptive uses in fair use may arise. This is a common scenario where nominative fair use is applied.
Go Trademarks and Authorization
To use the Go Trademarks, you'll need to follow some specific guidelines. Authorized Software Uses of the Go Trademarks can be found in the "Go's New Brand" document, which includes guidance on using the Go Logo and the Gopher mascot.
Before using the Go Logo, make sure you understand the rules. The Go Logo may not be used in certain manners without review and approval, including being used as or incorporated in the logo for a commercial product, being modified in any form, or being used in close proximity to another logo, badge, or stylized trademark.
Authorization to use the Go Trademarks is not transferable. This means that if you're authorized to use the Go Trademarks, you can't pass that permission on to someone else or use it for a third-party project. Every use of the Go Trademarks must comply with the applicable guidelines or have explicit prior written permission.
If you're an authorized user, you should be aware of your responsibilities. You may not enforce the Go Trademarks yourself, but you should notify [email protected] of any suspected or actual misuse, misappropriation, infringement, or other violation of the Go Trademarks.
Featured Images: pexels.com


