diff --git a/cmd/protoc-gen-go/internal_gengo/main.go b/cmd/protoc-gen-go/internal_gengo/main.go
index 8905448..b582cbe 100644
--- a/cmd/protoc-gen-go/internal_gengo/main.go
+++ b/cmd/protoc-gen-go/internal_gengo/main.go
@@ -21,6 +21,7 @@
 	"google.golang.org/protobuf/internal/encoding/tag"
 	"google.golang.org/protobuf/internal/fieldnum"
 	"google.golang.org/protobuf/internal/genname"
+	"google.golang.org/protobuf/internal/version"
 	"google.golang.org/protobuf/reflect/protoreflect"
 	"google.golang.org/protobuf/runtime/protoimpl"
 
@@ -121,7 +122,7 @@
 
 	if GenerateVersionMarkers {
 		g.P("// versions:")
-		protocGenGoVersion := protoimpl.VersionString()
+		protocGenGoVersion := version.String()
 		protocVersion := "(unknown)"
 		if v := gen.Request.GetCompilerVersion(); v != nil {
 			protocVersion = fmt.Sprintf("v%v.%v.%v", v.GetMajor(), v.GetMinor(), v.GetPatch())
diff --git a/cmd/protoc-gen-go/main.go b/cmd/protoc-gen-go/main.go
index 9ac544b..5f249be 100644
--- a/cmd/protoc-gen-go/main.go
+++ b/cmd/protoc-gen-go/main.go
@@ -18,12 +18,12 @@
 
 	gengo "google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo"
 	"google.golang.org/protobuf/compiler/protogen"
-	"google.golang.org/protobuf/runtime/protoimpl"
+	"google.golang.org/protobuf/internal/version"
 )
 
 func main() {
 	if len(os.Args) == 2 && os.Args[1] == "--version" {
-		fmt.Fprintf(os.Stderr, "%v %v\n", filepath.Base(os.Args[0]), protoimpl.VersionString())
+		fmt.Fprintf(os.Stderr, "%v %v\n", filepath.Base(os.Args[0]), version.String())
 		os.Exit(1)
 	}
 
diff --git a/integration_test.go b/integration_test.go
index e4444a4..2a9a470 100644
--- a/integration_test.go
+++ b/integration_test.go
@@ -25,7 +25,7 @@
 	"testing"
 	"time"
 
-	"google.golang.org/protobuf/runtime/protoimpl"
+	"google.golang.org/protobuf/internal/version"
 )
 
 var (
@@ -321,7 +321,7 @@
 	}
 	if *buildRelease {
 		t.Run("BuildRelease", func(t *testing.T) {
-			v := protoimpl.VersionString()
+			v := version.String()
 			for _, goos := range []string{"linux", "darwin", "windows"} {
 				for _, goarch := range []string{"386", "amd64"} {
 					binPath := filepath.Join("bin", fmt.Sprintf("protoc-gen-go.%v.%v.%v", v, goos, goarch))
diff --git a/internal/version/version.go b/internal/version/version.go
new file mode 100644
index 0000000..03f0aab
--- /dev/null
+++ b/internal/version/version.go
@@ -0,0 +1,79 @@
+// Copyright 2019 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package version records versioning information about this module.
+package version
+
+import (
+	"fmt"
+	"strings"
+)
+
+// These constants determine the current version of this module.
+//
+//
+// For our release process, we enforce the following rules:
+//	* Tagged releases use a tag that is identical to String.
+//	* Tagged releases never reference a commit where the String
+//	contains "devel".
+//	* The set of all commits in this repository where String
+//	does not contain "devel" must have a unique String.
+//
+//
+// Steps for tagging a new release:
+//	1. Create a new CL.
+//
+//	2. Update Minor, Patch, and/or PreRelease as necessary.
+//	PreRelease must not contain the string "devel".
+//
+//	3. Since the last released minor version, have there been any changes to
+//	generator that relies on new functionality in the runtime?
+//	If yes, then increment RequiredGenerated.
+//
+//	4. Since the last released minor version, have there been any changes to
+//	the runtime that removes support for old .pb.go source code?
+//	If yes, then increment SupportMinimum.
+//
+//	5. Send out the CL for review and submit it.
+//	Note that the next CL in step 8 must be submitted after this CL
+//	without any other CLs in-between.
+//
+//	6. Tag a new version, where the tag is is the current String.
+//
+//	7. Write release notes for all notable changes
+//	between this release and the last release.
+//
+//	8. Create a new CL.
+//
+//	9. Update PreRelease to include the string "devel".
+//	For example: "" -> "devel" or "rc.1" -> "rc.1.devel"
+//
+//	10. Send out the CL for review and submit it.
+const (
+	Major      = 1
+	Minor      = 20
+	Patch      = 1
+	PreRelease = "devel"
+)
+
+// String formats the version string for this module in semver format.
+//
+// Examples:
+//	v1.20.1
+//	v1.21.0-rc.1
+func String() string {
+	v := fmt.Sprintf("v%d.%d.%d", Major, Minor, Patch)
+	if PreRelease != "" {
+		v += "-" + PreRelease
+
+		// TODO: Add metadata about the commit or build hash.
+		// See https://golang.org/issue/29814
+		// See https://golang.org/issue/33533
+		var metadata string
+		if strings.Contains(PreRelease, "devel") && metadata != "" {
+			v += "+" + metadata
+		}
+	}
+	return v
+}
diff --git a/release.bash b/release.bash
index cc3d886..95049ed 100755
--- a/release.bash
+++ b/release.bash
@@ -63,9 +63,9 @@
 git sync
 
 # Create commit for actual release.
-sed -i -e "s/\(\s*versionMinor\s*=\s*\)[0-9]*/\1$VERSION_MINOR/" runtime/protoimpl/version.go
-sed -i -e "s/\(\s*versionPatch\s*=\s*\)[0-9]*/\1$VERSION_PATCH/" runtime/protoimpl/version.go
-sed -i -e "s/\(\s*versionPreRelease\s*=\s*\)\"[^\"]*\"/\1\"$VERSION_PRERELEASE\"/" runtime/protoimpl/version.go
+sed -i -e "s/\(\s*Minor\s*=\s*\)[0-9]*/\1$VERSION_MINOR/" internal/version/version.go
+sed -i -e "s/\(\s*Patch\s*=\s*\)[0-9]*/\1$VERSION_PATCH/" internal/version/version.go
+sed -i -e "s/\(\s*PreRelease\s*=\s*\)\"[^\"]*\"/\1\"$VERSION_PRERELEASE\"/" internal/version/version.go
 if ! [[ -z $GEN_VERSION ]]; then
 	sed -i -e "s/\(\s*GenVersion\s*=\s*\)[0-9]*/\1$GEN_VERSION/" runtime/protoimpl/version.go
 fi
@@ -80,7 +80,7 @@
 # Create commit to start development after release.
 VERSION_PRERELEASE="${VERSION_PRERELEASE}.devel" # append ".devel"
 VERSION_PRERELEASE="${VERSION_PRERELEASE#"."}"   # trim possible leading "."
-sed -i -e "s/\(\s*versionPreRelease\s*=\s*\)\"[^\"]*\"/\1\"$VERSION_PRERELEASE\"/" runtime/protoimpl/version.go
+sed -i -e "s/\(\s*PreRelease\s*=\s*\)\"[^\"]*\"/\1\"$VERSION_PRERELEASE\"/" internal/version/version.go
 git commit -a -m "all: start $(version_string)"
 
 echo
diff --git a/runtime/protoimpl/version.go b/runtime/protoimpl/version.go
index f98cf9d..ff094e1 100644
--- a/runtime/protoimpl/version.go
+++ b/runtime/protoimpl/version.go
@@ -5,82 +5,13 @@
 package protoimpl
 
 import (
-	"fmt"
-	"strings"
+	"google.golang.org/protobuf/internal/version"
 )
 
-// These constants determine the current version of this module.
-//
-//
-// For our release process, we enforce the following rules:
-//	* Tagged releases use a tag that is identical to VersionString.
-//	* Tagged releases never reference a commit where the VersionString
-//	contains "devel".
-//	* The set of all commits in this repository where VersionString
-//	does not contain "devel" must have a unique VersionString.
-//
-//
-// Steps for tagging a new release:
-//	1. Create a new CL.
-//
-//	2. Update versionMinor, versionPatch, and/or versionPreRelease as necessary.
-//	versionPreRelease must not contain the string "devel".
-//
-//	3. Since the last released minor version, have there been any changes to
-//	generator that relies on new functionality in the runtime?
-//	If yes, then increment GenVersion.
-//
-//	4. Since the last released minor version, have there been any changes to
-//	the runtime that removes support for old .pb.go source code?
-//	If yes, then increment MinVersion.
-//
-//	5. Send out the CL for review and submit it.
-//	Note that the next CL in step 8 must be submitted after this CL
-//	without any other CLs in-between.
-//
-//	6. Tag a new version, where the tag is is the current VersionString.
-//
-//	7. Write release notes for all notable changes
-//	between this release and the last release.
-//
-//	8. Create a new CL.
-//
-//	9. Update versionPreRelease to include the string "devel".
-//	For example: "" -> "devel" or "rc.1" -> "rc.1.devel"
-//
-//	10. Send out the CL for review and submit it.
-const (
-	versionMajor      = 1
-	versionMinor      = 20
-	versionPatch      = 1
-	versionPreRelease = "devel"
-)
-
-// VersionString formats the version string for this module in semver format.
-//
-// Examples:
-//	v1.20.1
-//	v1.21.0-rc.1
-func VersionString() string {
-	v := fmt.Sprintf("v%d.%d.%d", versionMajor, versionMinor, versionPatch)
-	if versionPreRelease != "" {
-		v += "-" + versionPreRelease
-
-		// TODO: Add metadata about the commit or build hash.
-		// See https://golang.org/issue/29814
-		// See https://golang.org/issue/33533
-		var versionMetadata string
-		if strings.Contains(versionPreRelease, "devel") && versionMetadata != "" {
-			v += "+" + versionMetadata
-		}
-	}
-	return v
-}
-
 const (
 	// MaxVersion is the maximum supported version for generated .pb.go files.
 	// It is always the current version of the module.
-	MaxVersion = versionMinor
+	MaxVersion = version.Minor
 
 	// GenVersion is the runtime version required by generated .pb.go files.
 	// This is incremented when generated code relies on new functionality
