Microsoft Maintains Go Fork for FIPS 140-2 Support

https://github.com/microsoft/go

The Go Programming Language

Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.

This repository, microsoft/go, contains the infrastructure Microsoft uses to build Go. The submodule named go contains the Go source code. By default, the submodule's remote URL is the official GitHub mirror of Go, golang/go. The canonical Git repository for Go source code is located at https://go.googlesource.com/go.

This project is not involved in producing the official binary distributions of Go.

Unless otherwise noted, the Go source files are distributed under the BSD-style license found in the LICENSE file.

Why does this fork exist?

This repository produces a modified version of Go that can be used to build FIPS 140-2 compliant applications. Our goal is to share this implementation with others in the Go community who have the same requirement, and to merge this capability into upstream Go as soon as possible. See eng/doc/fips for more information about this feature and the history of FIPS 140-2 compliance in Go.

The binaries produced by this repository are also intended for general use within Microsoft instead of the official binary distribution of Go.

We call this repository a fork even though it isn't a traditional Git fork. Its branches do not share Git ancestry with the Go repository. However, the repository serves the same purpose as a Git fork: maintaining a modified version of the Go source code over time.

Support

This project follows the upstream Go Release Policy. This means we support each major release (1.X) until there are two newer major releases. A new Go major version is released every six months, so each Go major version is supported for about one year.

When upstream Go releases a new minor version (1.X.Y), we release a corresponding microsoft/go version that may also include fork-specific changes. This normally happens once a month. At any time, we may release a new revision (1.X.Y-Z) to fix an issue without waiting for the next upstream minor release. Revision releases are uncommon.

Each microsoft/go release is announced at the Microsoft for Go Developers blog. Check out the upstream golang-announce mailing list for a summary of the changes in each Go version.

There are a few additional support resources internal to Microsoft:

Download and install

We build the forked Go toolset with this list of OS/Arch combinations. To use a prebuilt copy of Go while targeting a platform that is not on this list, cross-compilation may be necessary.

  • linux_amd64
  • linux_armv6l
  • linux_arm64
  • windows_amd64

The following sections list the ways to get a build of the Microsoft fork of Go.

Note

Don't see an option that works for you? Let us know!
File a GitHub issue, or comment on an existing issue in this tag:

Docker Container Images

microsoft/go-images maintains and documents container images that are available on Microsoft Artifact Registry.

Azure Linux

The Azure Linux distribution includes builds of this Go fork.

  • In Azure Linux 2.0, the package msft-golang installs this fork.
  • In Azure Linux 3.0, the golang package installs this fork.

Binary archive

Signed builds of Go for several platforms are available as zip and tar.gz files.

Build from source

Pre-patched source tarball

The microsoft/go GitHub releases include a source tarball file ending in .src.tar.gz. After downloading and extracting the tar.gz file, build it using the upstream instructions.

Clone and build

The first step is to clone this repository using Git and check out the desired tag or commit. The zip file that GitHub offers for download is incomplete: it doesn't include the go submodule.

If you want to contribute to the Microsoft Go project, read the Developer Guide. It lists the steps we recommend to set up a Microsoft Go development environment, execute your first Microsoft Go build, run the standard library test suite, and contribute a PR.

If you just want to build Microsoft Go on your own machine, you may find it more convenient to use the tools provided by the eng/run.ps1 script. We use this script for CI builds. See eng/README.md for more details about eng/run.ps1 and other repository infrastructure.

Once built, the Microsoft Go binary is found at go/bin/go.

Contributing

This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.

When you submit a pull request, a CLA bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

Please read the Developer Guide for more information about contributing to this project.

Trademarks

This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow Microsoft's Trademark & Brand Guidelines. Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks or logos are subject to those third-party's policies.

{
"by": "dschofie",
"descendants": 18,
"id": 40214871,
"kids": [
40217149,
40218943,
40214872,
40217126,
40229012,
40217328,
40217271
],
"score": 43,
"time": 1714503746,
"title": "Microsoft Maintains Go Fork for FIPS 140-2 Support",
"type": "story",
"url": "https://github.com/microsoft/go"
}
{
"author": "microsoft",
"date": null,
"description": "The Microsoft build of the Go toolset. Contribute to microsoft/go development by creating an account on GitHub.",
"image": "https://opengraph.githubassets.com/1b1c87e6f07260ffea396e04c395d8d484427a66b8e487aad76f5fa98c9b416a/microsoft/go",
"logo": "https://logo.clearbit.com/github.com",
"publisher": "GitHub",
"title": "GitHub - microsoft/go: The Microsoft build of the Go toolset",
"url": "https://github.com/microsoft/go"
}
{
"url": "https://github.com/microsoft/go",
"title": "GitHub - microsoft/go: The Microsoft build of the Go toolset",
"description": "The Go Programming Language Go is an open source programming language that makes it easy to build simple, reliable, and efficient software. This repository, microsoft/go, contains the infrastructure Microsoft...",
"links": [
"https://github.com/microsoft/go"
],
"image": "https://opengraph.githubassets.com/1b1c87e6f07260ffea396e04c395d8d484427a66b8e487aad76f5fa98c9b416a/microsoft/go",
"content": "<div><article><p></p><h2>The Go Programming Language</h2><a target=\"_blank\" href=\"https://github.com/microsoft/go#the-go-programming-language\"></a><p></p>\n<p>Go is an open source programming language that makes it easy to build simple,\nreliable, and efficient software.</p>\n<p>This repository, <a target=\"_blank\" href=\"https://github.com/microsoft/go\">microsoft/go</a>, contains the\ninfrastructure Microsoft uses to build Go. The submodule named <code>go</code> contains the\nGo source code. By default, the submodule's remote URL is the official GitHub\nmirror of Go, <a target=\"_blank\" href=\"https://github.com/golang/go\">golang/go</a>. The canonical Git\nrepository for Go source code is located at <a target=\"_blank\" href=\"https://go.googlesource.com/go\">https://go.googlesource.com/go</a>.</p>\n<p>This project is not involved in producing the <a target=\"_blank\" href=\"https://go.dev/dl/\">official binary distributions\nof Go</a>.</p>\n<p>Unless otherwise noted, the Go source files are distributed under the\nBSD-style license found in the LICENSE file.</p>\n<p></p><h2>Why does this fork exist?</h2><a target=\"_blank\" href=\"https://github.com/microsoft/go#why-does-this-fork-exist\"></a><p></p>\n<p>This repository produces a modified version of Go that can be used to build FIPS\n140-2 compliant applications. Our goal is to share this implementation with\nothers in the Go community who have the same requirement, and to merge this\ncapability into upstream Go as soon as possible. See\n<a target=\"_blank\" href=\"https://github.com/microsoft/go/blob/microsoft/main/eng/doc/fips\">eng/doc/fips</a> for more information about this feature and the\nhistory of FIPS 140-2 compliance in Go.</p>\n<p>The binaries produced by this repository are also intended for general use\nwithin Microsoft instead of the official binary distribution of Go.</p>\n<p>We call this repository a fork even though it isn't a traditional Git fork. Its\nbranches do not share Git ancestry with the Go repository. However, the\nrepository serves the same purpose as a Git fork: maintaining a modified version\nof the Go source code over time.</p>\n<p></p><h2>Support</h2><a target=\"_blank\" href=\"https://github.com/microsoft/go#support\"></a><p></p>\n<p>This project follows the upstream Go\n<a target=\"_blank\" href=\"https://go.dev/doc/devel/release#policy\">Release Policy</a>.\nThis means we support each major release (1.X) until there are two newer major\nreleases. A new Go major version is\n<a target=\"_blank\" href=\"https://github.com/golang/go/wiki/Go-Release-Cycle\">released every six months</a>,\nso each Go major version is supported for about one year.</p>\n<p>When upstream Go releases a new minor version (1.X.Y), we release a\ncorresponding microsoft/go version that may also include fork-specific changes.\nThis normally happens once a month. At any time, we may release a new revision\n(1.X.Y-Z) to fix an issue without waiting for the next upstream minor release.\nRevision releases are uncommon.</p>\n<p>Each microsoft/go release is announced at the\n<a target=\"_blank\" href=\"https://devblogs.microsoft.com/go/\">Microsoft for Go Developers</a> blog.\nCheck out the upstream <a target=\"_blank\" href=\"https://groups.google.com/g/golang-announce\">golang-announce mailing list</a>\nfor a summary of the changes in each Go version.</p>\n<p>There are a few additional support resources internal to Microsoft:</p>\n<ul>\n<li><a target=\"_blank\" href=\"https://eng.ms/docs/more/languages-at-microsoft/go/articles/overview\">Languages at Microsoft: Go</a>.</li>\n<li><a target=\"_blank\" href=\"https://idwebelements.microsoft.com/GroupManagement.aspx?Group=golang-announce&amp;Operation=join\">A Microsoft-internal email distribution list 📧 (instant join link)</a>\nfor release announcements.</li>\n</ul>\n<p></p><h2>Download and install</h2><a target=\"_blank\" href=\"https://github.com/microsoft/go#download-and-install\"></a><p></p>\n<p>We build the forked Go toolset with this list of OS/Arch combinations. To use a\nprebuilt copy of Go while targeting a platform that is not on this list,\ncross-compilation may be necessary.</p>\n<ul>\n<li><code>linux_amd64</code></li>\n<li><code>linux_armv6l</code></li>\n<li><code>linux_arm64</code></li>\n<li><code>windows_amd64</code></li>\n</ul>\n<p>The following sections list the ways to get a build of the Microsoft fork of Go.</p>\n<div><p>Note</p><p>Don't see an option that works for you? Let us know!<br />\nFile a GitHub issue, or comment on an existing issue in this tag:\n<a target=\"_blank\" href=\"https://github.com/microsoft/go/labels/Area-Acquisition\"><img src=\"https://camo.githubusercontent.com/647c07c8edc702b49b09df9c858950803cb41afba6af709030b9f70e20e03339/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6162656c732f6d6963726f736f66742f676f2f417265612d4163717569736974696f6e\" /></a></p>\n</div>\n<p></p><h3>Docker Container Images</h3><a target=\"_blank\" href=\"https://github.com/microsoft/go#docker-container-images\"></a><p></p>\n<p><strong><a target=\"_blank\" href=\"https://github.com/microsoft/go-images\">microsoft/go-images</a></strong> maintains and\ndocuments container images that are available on Microsoft Artifact Registry.</p>\n<p></p><h3>Azure Linux</h3><a target=\"_blank\" href=\"https://github.com/microsoft/go#azure-linux\"></a><p></p>\n<p>The <strong><a target=\"_blank\" href=\"https://github.com/microsoft/azurelinux\">Azure Linux</a></strong> distribution\nincludes builds of this Go fork.</p>\n<ul>\n<li>In Azure Linux 2.0, the package <code>msft-golang</code> installs this fork.</li>\n<li>In Azure Linux 3.0, the <code>golang</code> package installs this fork.</li>\n</ul>\n<p></p><h3>Binary archive</h3><a target=\"_blank\" href=\"https://github.com/microsoft/go#binary-archive\"></a><p></p>\n<p><a target=\"_blank\" href=\"https://github.com/microsoft/go/blob/microsoft/main/eng/doc/Downloads.md\">Signed builds of Go</a>\nfor several platforms are available as <code>zip</code> and <code>tar.gz</code> files.</p>\n<p></p><h3>Build from source</h3><a target=\"_blank\" href=\"https://github.com/microsoft/go#build-from-source\"></a><p></p>\n<p></p><h4>Pre-patched source tarball</h4><a target=\"_blank\" href=\"https://github.com/microsoft/go#pre-patched-source-tarball\"></a><p></p>\n<p><a target=\"_blank\" href=\"https://github.com/microsoft/go/releases\">The microsoft/go GitHub releases</a>\ninclude a source tarball file ending in <code>.src.tar.gz</code>. After downloading and\nextracting the tar.gz file, build it using the\n<a target=\"_blank\" href=\"https://go.dev/doc/install/source\">upstream instructions</a>.</p>\n<p></p><h4>Clone and build</h4><a target=\"_blank\" href=\"https://github.com/microsoft/go#clone-and-build\"></a><p></p>\n<p>The first step is to clone this repository using Git and check out the desired\ntag or commit. The <code>zip</code> file that GitHub offers for download is incomplete: it\ndoesn't include the <code>go</code> submodule.</p>\n<p>If you want to contribute to the Microsoft Go project, read the <a target=\"_blank\" href=\"https://github.com/microsoft/go/blob/microsoft/main/eng/doc/DeveloperGuide.md\">Developer\nGuide</a>. It lists the steps we recommend to set up a\nMicrosoft Go development environment, execute your first Microsoft Go build, run\nthe standard library test suite, and contribute a PR.</p>\n<p>If you just want to build Microsoft Go on your own machine, you may find it more\nconvenient to use the tools provided by the <code>eng/run.ps1</code> script. We use this\nscript for CI builds. See <a target=\"_blank\" href=\"https://github.com/microsoft/go/blob/microsoft/main/eng/README.md\">eng/README.md</a> for more details about\n<code>eng/run.ps1</code> and other repository infrastructure.</p>\n<p>Once built, the Microsoft Go binary is found at <code>go/bin/go</code>.</p>\n<p></p><h2>Contributing</h2><a target=\"_blank\" href=\"https://github.com/microsoft/go#contributing\"></a><p></p>\n<p>This project welcomes contributions and suggestions. Most contributions require you to agree to a\nContributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us\nthe rights to use your contribution. For details, visit <a target=\"_blank\" href=\"https://cla.opensource.microsoft.com/\">https://cla.opensource.microsoft.com</a>.</p>\n<p>When you submit a pull request, a CLA bot will automatically determine whether you need to provide\na CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions\nprovided by the bot. You will only need to do this once across all repos using our CLA.</p>\n<p>This project has adopted the <a target=\"_blank\" href=\"https://opensource.microsoft.com/codeofconduct/\">Microsoft Open Source Code of Conduct</a>.\nFor more information see the <a target=\"_blank\" href=\"https://opensource.microsoft.com/codeofconduct/faq/\">Code of Conduct FAQ</a> or\ncontact <a target=\"_blank\" href=\"mailto:[email protected]\">[email protected]</a> with any additional questions or comments.</p>\n<p>Please read the <a target=\"_blank\" href=\"https://github.com/microsoft/go/blob/microsoft/main/eng/doc/DeveloperGuide.md\">Developer Guide</a> for more information about contributing to this project.</p>\n<p></p><h2>Trademarks</h2><a target=\"_blank\" href=\"https://github.com/microsoft/go#trademarks\"></a><p></p>\n<p>This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft\ntrademarks or logos is subject to and must follow\n<a target=\"_blank\" href=\"https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general\">Microsoft's Trademark &amp; Brand Guidelines</a>.\nUse of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.\nAny use of third-party trademarks or logos are subject to those third-party's policies.</p>\n</article></div>",
"author": "",
"favicon": "https://github.githubassets.com/favicons/favicon.svg",
"source": "github.com",
"published": "",
"ttr": 180,
"type": "object"
}