Support for legacy runtimes

Legacy runtimes include language versions that are no longer maintained by open source communities. Because many App Engine customers still depend on these language versions, Google has been providing long term support for the following legacy runtimes in the App Engine standard environment:

Google is transitioning legacy runtimes into the end of support phase. See the support schedule for details.

Our commitment

Legacy runtimes have reached end of support on January 30, 2024.

The following changes have been made to the legacy runtimes:

  • As much as possible, components of the legacy runtimes have have been returned to their unforked, open source states. We had to heavily restrict and modify some of the runtimes to securely run your apps in our data centers. By making changes to how we operate the runtimes in our data centers, we can provide a secure and scalable environment for these runtimes over the long term.

  • Added full build systems that support package repositories, idiomatic component builds, and asset repositories.

Security updates

As communities stop maintaining versions of their languages, your app may be exposed to vulnerabilities for which no publicly available fix exists. Thus, continuing to run your app in some App Engine runtimes involves more risk than upgrading to a runtime that has a community supported language.

We can't commit to fixing every API your app uses. You may find that fixes are only available in libraries for newer versions of the language.

Support for App Engine bundled services

The Python 2.7, Java 8, Go 1.11, and PHP 5.5 runtimes provide bundled App Engine services and APIs such as Blobstore, Memcache, and Task Queues.

You can continue to access many of these bundled services and APIs in select second-generation runtimes:

Your app can call the bundled services APIs through language idiomatic libraries, and access the same functionality as on the legacy runtimes. The bundled services are offered on the newer runtimes to provide more flexibility, giving you the choice to migrate to the unbundled services, or continue using the App Engine legacy bundled services.

If any deprecations are in the pipeline, we will follow our standard deprecation policy and suggest alternatives. We don't expect the majority of apps to require code changes or redeployments.

Current status of each runtime

Python 2.7

We launched the Python 2.7 runtime on February 27, 2012. While we have already removed our modifications and restrictions from large sections of this runtime, we will make further updates to normalize the build process, request path, and package availability. These changes to the runtime enables Google Cloud to support the Python 2.7 runtime long past January 1, 2020, which is when the Python community will end its official support of Python 2.7.

The changes we have made to the Python 2.7 runtime and the changes made in the Fall 2021 announcement bring back most of the bundled App Engine services to Python 3. These services enable you to more easily migrate to Python 3 and/or replace the bundled services with equivalent Google Cloud services before end of support. Refer to the following guides for migration:

Java 8

We launched the Java 8 runtime on June 28, 2017. This runtime was slightly modified for App Engine and it provided broad support for importing Java packages.

We will make the following updates to this runtime:

  • Return the Java runtime to the open source state.

  • Normalize the request path.

  • Upgrade to Jetty 9.4.

These changes will enable Google Cloud to support the Java 8 runtime for the foreseeable future.

The changes we have made to the Java 8 runtime allow you to replace the bundled App Engine services with Google Cloud services and migrate to Java 11/17 before end of support. See information about migrating from Java 8 to Java 11+.

We were able to automatically migrate Java 6 and Java 7 apps to the Java 8 runtime without requiring changes in the app code. However, Java 11 breaks backward compatibility in ways that make it impossible for us to automatically migrate apps to the Java 11 runtime. Since you may need to make significant changes to your Java 6, Java 7, and Java 8 apps when migrating to Java 11, you can keep those apps running in the Java 8 runtime.

Go 1.11

We launched the Go 1.11 runtime on March 20, 2019 and recommended Go 1.6-1.9 apps migrate to the Go 1.11 runtime. The Go 1.11 runtime is the long term state for apps built with Go 1.6 through Go 1.11.

Once your apps are running on Go 1.11, you can start replacing the bundled App Engine services and APIs to Google Cloud services and upgrading to a supported version of Go before end of support. You can find more information on migrating, see migrating your App Engine app to Go 1.12.

PHP 5.5

We launched the PHP 5.5 runtime on May 16, 2013. This runtime removed many features from the open source version and ran apps inside a custom sandbox.

We are currently returning this runtime to its open source state and modernizing the sandbox. We will make further updates to normalize the request path and optimize performance. These changes enable us to support the PHP 5.5 runtime for the foreseeable future.

The changes we have made to the PHP 5.5 runtime allow you to replace the bundled App Engine services with Google Cloud services and migrate to PHP 7/8 before end of support. See information about moving apps from PHP 5.5 to PHP 7/8.

Enabling deployments for legacy runtimes reaching end of support

According to the App Engine runtime lifecycle policy, you will no longer be able to deploy applications using runtimes that have reached end of support. For key dates impacting your runtime, see the support schedule.

If your organization wants to re-enable deployments for legacy runtimes that have reached the end of support timeline, you can define a new organization policy with constraints/appengine.runtimeDeploymentExemption. This organization policy for re-enabling deployments is generally available. Continued use of legacy runtimes past the end of support date is Experimental and subject to the "Pre-GA Offerings Terms".

To create or change organization policies, your account must have the roles/orgpolicy.policyAdmin role.

Use a policy to re-enable deployments

To create a policy that enables deployments, use Google Cloud CLI or Google Cloud console that have reached the end of support within a given organization to the specified environment.

Console

  1. Go to the Organization policies page in the Google Cloud console.
    Go to Organization policies

    The Organization policies page displays a list of the available organization policy constraints.

  2. Select the project, folder, or organization for which you want to add the new policy.

  3. Find the Runtime Deployment Exemption (App Engine) policy in the list. You can use the Filter field at the top of the list.

  4. Click the name of the policy. Alternatively, you can select Edit Policy from the context menu.

  5. Click Manage Policy.

  6. Select Customize under Applies to.

  7. Select Replace under Policy enforcement.

  8. Click Add Rule under Rules.

  9. Select Custom for Policy Values.

  10. Select Allow for Policy Type.

  11. In Custom Value specify the runtime that you want to enforce in the organization. Supported values include:

    • python27 to allow applications using Python 2.7
    • java8 to allow applications using Java 8
    • php55 to allow applications using PHP 5.5
    • To explicitly allow multiple runtimes, specify python27, java8, and php55 together. By default, no runtimes are allowed when no policy is set.
  12. Click Done.

  13. Click Save.

After your changes are applied, this policy enables the deployment of App Engine runtimes that have reached end of support in the specified environment.

gcloud

Run the following command:

gcloud resource-manager org-policies \
allow appengine.runtimeDeploymentExemption \
--organization=ORGANIZATION_NUMBER RUNTIME_ID

Replace:

  • ORGANIZATION_NUMBER with the number of the organization to which you want to apply the policy.
  • RUNTIME_ID with the runtime allowed for deployment.
  • RUNTIME_ID with one of the following runtime IDs:

    • python27 to allow applications using Python 2.7
    • java8 to allow applications using Java 8
    • php55 to allow applications using PHP 5.5
    • To explicitly allow multiple language runtimes, specify python27, java8, and php55 together. By default, no language runtimes are allowed when no policy is set.