diff --git a/core/lib/Drupal/Core/Extension/ModuleInstaller.php b/core/lib/Drupal/Core/Extension/ModuleInstaller.php
index 0dfe322..6d605e8 100644
--- a/core/lib/Drupal/Core/Extension/ModuleInstaller.php
+++ b/core/lib/Drupal/Core/Extension/ModuleInstaller.php
@@ -175,12 +175,13 @@ public function install(array $module_list, $enable_dependencies = TRUE) {
 
         // Update the module handler in order to load the module's code.
         // This allows the module to participate in hooks and its existence to
-        // be discovered by other modules.
+        // be discovered by other modules. The module code ("$module.module" and
+        // "$module.install" files) are loaded only after the kernel rebuild in
+        // order to make the PSR4 namespaces provided by this module available
+        // to its own code.
         // The current ModuleHandler instance is obsolete with the kernel
         // rebuild below.
         $this->moduleHandler->setModuleList($module_filenames);
-        $this->moduleHandler->load($module);
-        module_load_install($module);
 
         // Clear the static cache of system_rebuild_module_data() to pick up the
         // new module, since it merges the installation status of modules into
@@ -190,6 +191,10 @@ public function install(array $module_list, $enable_dependencies = TRUE) {
         // Update the kernel to include it.
         $this->updateKernel($module_filenames);
 
+        // Load the module code ("$module.module" and "$module.install" files).
+        $this->moduleHandler->load($module);
+        module_load_install($module);
+
         // Allow modules to react prior to the installation of a module.
         $this->moduleHandler->invokeAll('module_preinstall', array($module));
 
diff --git a/core/lib/Drupal/Core/Form/FormInterface.php b/core/lib/Drupal/Core/Form/FormInterface.php
index 2cafbeb..a8b3fa2 100644
--- a/core/lib/Drupal/Core/Form/FormInterface.php
+++ b/core/lib/Drupal/Core/Form/FormInterface.php
@@ -10,6 +10,21 @@
 interface FormInterface {
 
   /**
+   * Disabled option on forms and settings
+   */
+  const DISABLED = 0;
+
+  /**
+   * Optional option on forms and settings
+   */
+  const OPTIONAL = 1;
+
+  /**
+   * Required option on forms and settings
+   */
+  const REQUIRED = 2;
+
+  /**
    * Returns a unique string identifying the form.
    *
    * @return string
diff --git a/core/lib/Drupal/Core/Menu/MenuLinkManagerInterface.php b/core/lib/Drupal/Core/Menu/MenuLinkManagerInterface.php
index c64c47f..aabc45c 100644
--- a/core/lib/Drupal/Core/Menu/MenuLinkManagerInterface.php
+++ b/core/lib/Drupal/Core/Menu/MenuLinkManagerInterface.php
@@ -23,6 +23,12 @@
 interface MenuLinkManagerInterface extends PluginManagerInterface {
 
   /**
+   * Maximum length of menu name as entered by the user. Database length is 32
+   * and we add a menu- prefix.
+   */
+  const MAX_MENU_NAME_LENGTH_UI = 27;
+
+  /**
    * Triggers discovery, save, and cleanup of discovered links.
    */
   public function rebuild();
diff --git a/core/modules/aggregator/aggregator.module b/core/modules/aggregator/aggregator.module
index 15b7353..5180b75 100644
--- a/core/modules/aggregator/aggregator.module
+++ b/core/modules/aggregator/aggregator.module
@@ -6,12 +6,16 @@
  */
 
 use Drupal\aggregator\Entity\Feed;
+use Drupal\aggregator\FeedStorageInterface;
 use Drupal\Core\Routing\RouteMatchInterface;
 
 /**
  * Denotes that a feed's items should never expire.
+ *
+ * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x.
+ *   Use \Drupal\aggregator\FeedStorageInterface::CLEAR_NEVER instead.
  */
-const AGGREGATOR_CLEAR_NEVER = 0;
+const AGGREGATOR_CLEAR_NEVER = FeedStorageInterface::CLEAR_NEVER;
 
 /**
  * Implements hook_help().
diff --git a/core/modules/aggregator/src/FeedStorageInterface.php b/core/modules/aggregator/src/FeedStorageInterface.php
index f0318fd..cf30c6a 100644
--- a/core/modules/aggregator/src/FeedStorageInterface.php
+++ b/core/modules/aggregator/src/FeedStorageInterface.php
@@ -10,6 +10,11 @@
 interface FeedStorageInterface extends ContentEntityStorageInterface {
 
   /**
+   * Denotes that a feed's items should never expire.
+   */
+  const CLEAR_NEVER = 0;
+
+  /**
    * Returns the fids of feeds that need to be refreshed.
    *
    * @return array
diff --git a/core/modules/block/src/BlockRepositoryInterface.php b/core/modules/block/src/BlockRepositoryInterface.php
index 6e3f904..9c4f871 100644
--- a/core/modules/block/src/BlockRepositoryInterface.php
+++ b/core/modules/block/src/BlockRepositoryInterface.php
@@ -5,6 +5,20 @@
 interface BlockRepositoryInterface {
 
   /**
+   * Return only visible regions.
+   *
+   * @see system_region_list()
+   */
+  const REGIONS_VISIBLE = 'visible';
+
+  /**
+   * Return all regions.
+   *
+   * @see system_region_list()
+   */
+  const REGIONS_ALL = 'all';
+
+  /**
    * Returns an array of regions and their block entities.
    *
    * @param \Drupal\Core\Cache\CacheableMetadata[] $cacheable_metadata
diff --git a/core/modules/comment/comment.module b/core/modules/comment/comment.module
index b0f1550..7ed1932 100644
--- a/core/modules/comment/comment.module
+++ b/core/modules/comment/comment.module
@@ -28,18 +28,27 @@
 
 /**
  * Anonymous posters cannot enter their contact information.
+ *
+ * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x.
+ *   Use \Drupal\comment\CommentInterface::ANONYMOUS_MAYNOT_CONTACT instead.
  */
-const COMMENT_ANONYMOUS_MAYNOT_CONTACT = 0;
+const COMMENT_ANONYMOUS_MAYNOT_CONTACT = CommentInterface::ANONYMOUS_MAYNOT_CONTACT;
 
 /**
  * Anonymous posters may leave their contact information.
+ *
+ * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x.
+ *   Use \Drupal\comment\CommentInterface::ANONYMOUS_MAY_CONTACT instead.
  */
-const COMMENT_ANONYMOUS_MAY_CONTACT = 1;
+const COMMENT_ANONYMOUS_MAY_CONTACT = CommentInterface::ANONYMOUS_MAY_CONTACT;
 
 /**
  * Anonymous posters are required to leave their contact information.
+ *
+ * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x.
+ *   Use \Drupal\comment\CommentInterface::ANONYMOUS_MUST_CONTACT instead.
  */
-const COMMENT_ANONYMOUS_MUST_CONTACT = 2;
+const COMMENT_ANONYMOUS_MUST_CONTACT = CommentInterface::ANONYMOUS_MUST_CONTACT;
 
 /**
  * The time cutoff for comments marked as read for entity types other node.
diff --git a/core/modules/comment/src/CommentInterface.php b/core/modules/comment/src/CommentInterface.php
index 9f3360c..e80e5ed 100644
--- a/core/modules/comment/src/CommentInterface.php
+++ b/core/modules/comment/src/CommentInterface.php
@@ -23,6 +23,21 @@
   const PUBLISHED = 1;
 
   /**
+   * Anonymous posters cannot enter their contact information.
+   */
+  const ANONYMOUS_MAYNOT_CONTACT = 0;
+
+  /**
+   * Anonymous posters may leave their contact information.
+   */
+  const ANONYMOUS_MAY_CONTACT = 1;
+
+  /**
+   * Anonymous posters are required to leave their contact information.
+   */
+  const ANONYMOUS_MUST_CONTACT = 2;
+
+  /**
    * Determines if this comment is a reply to another comment.
    *
    * @return bool
diff --git a/core/modules/menu_ui/menu_ui.module b/core/modules/menu_ui/menu_ui.module
index 92254c2..79cdcab 100644
--- a/core/modules/menu_ui/menu_ui.module
+++ b/core/modules/menu_ui/menu_ui.module
@@ -17,15 +17,21 @@
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Routing\RouteMatchInterface;
 use Drupal\menu_link_content\Entity\MenuLinkContent;
+use Drupal\Core\Menu\MenuLinkManagerInterface;
 use Drupal\node\NodeTypeInterface;
 use Drupal\system\Entity\Menu;
 use Drupal\node\NodeInterface;
 
 /**
- * Maximum length of menu name as entered by the user. Database length is 32
- * and we add a menu- prefix.
+ * Maximum length of menu name as entered by the user.
+ *
+ * Database length is 32 and we add a menu- prefix.
+ *
+ * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x.
+ *   Use \Drupal\Core\Menu\MenuLinkManagerInterface::MAX_MENU_NAME_LENGTH_UI
+ *   instead.
  */
-const MENU_MAX_MENU_NAME_LENGTH_UI = 27;
+const MENU_MAX_MENU_NAME_LENGTH_UI = MenuLinkManagerInterface::MAX_MENU_NAME_LENGTH_UI;
 
 /**
  * Implements hook_help().
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index 5c86a13..620afd6 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -31,33 +31,51 @@
 
 /**
  * Denotes that the node is not published.
+ *
+ * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x.
+ *   Use \Drupal\node\NodeInterface::NOT_PUBLISHED instead.
  */
-const NODE_NOT_PUBLISHED = 0;
+const NODE_NOT_PUBLISHED = NodeInterface::NOT_PUBLISHED;
 
 /**
  * Denotes that the node is published.
+ *
+ * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x.
+ *   Use \Drupal\node\NodeInterface::PUBLISHED instead.
  */
-const NODE_PUBLISHED = 1;
+const NODE_PUBLISHED = NodeInterface::PUBLISHED;
 
 /**
  * Denotes that the node is not promoted to the front page.
+ *
+ * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x.
+ *   Use \Drupal\node\NodeInterface::NOT_PROMOTED instead.
  */
-const NODE_NOT_PROMOTED = 0;
+const NODE_NOT_PROMOTED = NodeInterface::NOT_PROMOTED;
 
 /**
  * Denotes that the node is promoted to the front page.
+ *
+ * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x.
+ *   Use \Drupal\node\NodeInterface::PROMOTED instead.
  */
-const NODE_PROMOTED = 1;
+const NODE_PROMOTED = NodeInterface::PROMOTED;
 
 /**
  * Denotes that the node is not sticky at the top of the page.
+ *
+ * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x.
+ *   Use \Drupal\node\NodeInterface::NOT_STICKY instead.
  */
-const NODE_NOT_STICKY = 0;
+const NODE_NOT_STICKY = NodeInterface::NOT_STICKY;
 
 /**
  * Denotes that the node is sticky at the top of the page.
+ *
+ * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x.
+ *   Use \Drupal\node\NodeInterface::STICKY instead.
  */
-const NODE_STICKY = 1;
+const NODE_STICKY = NodeInterface::STICKY;
 
 /**
  * Implements hook_help().
diff --git a/core/modules/node/src/NodeInterface.php b/core/modules/node/src/NodeInterface.php
index f3bcaea..87b6892 100644
--- a/core/modules/node/src/NodeInterface.php
+++ b/core/modules/node/src/NodeInterface.php
@@ -14,6 +14,36 @@
 interface NodeInterface extends ContentEntityInterface, EntityChangedInterface, EntityOwnerInterface, RevisionLogInterface, EntityPublishedInterface {
 
   /**
+   * Denotes that the node is not published.
+   */
+  const NOT_PUBLISHED = 0;
+
+  /**
+   * Denotes that the node is published.
+   */
+  const PUBLISHED = 1;
+
+  /**
+   * Denotes that the node is not promoted to the front page.
+   */
+  const NOT_PROMOTED = 0;
+
+  /**
+   * Denotes that the node is promoted to the front page.
+   */
+  const PROMOTED = 1;
+
+  /**
+   * Denotes that the node is not sticky at the top of the page.
+   */
+  const NOT_STICKY = 0;
+
+  /**
+   * Denotes that the node is sticky at the top of the page.
+   */
+  const STICKY = 1;
+
+  /**
    * Gets the node type.
    *
    * @return string
diff --git a/core/modules/responsive_image/responsive_image.module b/core/modules/responsive_image/responsive_image.module
index d654c81..4f88cad 100644
--- a/core/modules/responsive_image/responsive_image.module
+++ b/core/modules/responsive_image/responsive_image.module
@@ -11,14 +11,20 @@
 use Drupal\Core\Routing\RouteMatchInterface;
 use Drupal\image\Entity\ImageStyle;
 use Drupal\responsive_image\Entity\ResponsiveImageStyle;
+use Drupal\responsive_image\ResponsiveImageStyleInterface;
 use Drupal\Core\Image\ImageInterface;
 use Drupal\breakpoint\BreakpointInterface;
 
 /**
  * The machine name for the empty image breakpoint image style option.
+ *
+ * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x.
+ *   Use \Drupal\responsive_image\ResponsiveImageStyleInterface::EMPTY_IMAGE
+ *   and \Drupal\responsive_image\ResponsiveImageStyleInterface::ORIGINAL_IMAGE
+ *   instead.
  */
-const RESPONSIVE_IMAGE_EMPTY_IMAGE = '_empty image_';
-const RESPONSIVE_IMAGE_ORIGINAL_IMAGE = '_original image_';
+const RESPONSIVE_IMAGE_EMPTY_IMAGE = ResponsiveImageStyleInterface::EMPTY_IMAGE;
+const RESPONSIVE_IMAGE_ORIGINAL_IMAGE = ResponsiveImageStyleInterface::ORIGINAL_IMAGE;
 
 /**
  * Implements hook_help().
diff --git a/core/modules/responsive_image/src/ResponsiveImageStyleInterface.php b/core/modules/responsive_image/src/ResponsiveImageStyleInterface.php
index a3fbc71..3e1e5c0 100644
--- a/core/modules/responsive_image/src/ResponsiveImageStyleInterface.php
+++ b/core/modules/responsive_image/src/ResponsiveImageStyleInterface.php
@@ -10,6 +10,12 @@
 interface ResponsiveImageStyleInterface extends ConfigEntityInterface {
 
   /**
+   * The machine name for the empty image breakpoint image style option.
+   */
+  const EMPTY_IMAGE = '_empty image_';
+  const ORIGINAL_IMAGE = '_original image_';
+
+  /**
    * Checks if there is at least one mapping defined.
    *
    * @return bool
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index 3c858f9..13558c2 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -13,6 +13,7 @@
 use Drupal\Core\Database\Query\AlterableInterface;
 use Drupal\Core\Extension\Extension;
 use Drupal\Core\Extension\ExtensionDiscovery;
+use Drupal\Core\Form\FormInterface;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\KeyValueStore\KeyValueDatabaseExpirableFactory;
 use Drupal\Core\PageCache\RequestPolicyInterface;
@@ -30,37 +31,58 @@
 
 /**
  * New users will be set to the default time zone at registration.
+ *
+ * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x.
+ *   Use \Drupal\user\UserInterface::TIMEZONE_DEFAULT instead.
  */
 const DRUPAL_USER_TIMEZONE_DEFAULT = 0;
 
 /**
  * New users will get an empty time zone at registration.
+ *
+ * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x.
+ *   Use \Drupal\user\UserInterface::TIMEZONE_EMPTY instead.
  */
 const DRUPAL_USER_TIMEZONE_EMPTY = 1;
 
 /**
  * New users will select their own timezone at registration.
+ *
+ * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x.
+ *   Use \Drupal\user\UserInterface::TIMEZONE_SELECT instead.
  */
 const DRUPAL_USER_TIMEZONE_SELECT = 2;
 
 /**
- * Disabled option on forms and settings
+ * Disabled option on forms and settings.
+ *
+ * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x.
+ *   Use \Drupal\Core\Form\FormInterface::DISABLED instead.
  */
-const DRUPAL_DISABLED = 0;
+const DRUPAL_DISABLED = FormInterface::DISABLED;
 
 /**
- * Optional option on forms and settings
+ * Optional option on forms and settings.
+ *
+ * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x.
+ *   Use \Drupal\Core\Form\FormInterface::OPTIONAL instead.
  */
-const DRUPAL_OPTIONAL = 1;
+const DRUPAL_OPTIONAL = FormInterface::OPTIONAL;
 
 /**
- * Required option on forms and settings
+ * Required option on forms and settings.
+ *
+ * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x.
+ *   Use \Drupal\Core\Form\FormInterface::REQUIRED instead.
  */
-const DRUPAL_REQUIRED = 2;
+const DRUPAL_REQUIRED = FormInterface::REQUIRED;
 
 /**
  * Return only visible regions.
  *
+ * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x.
+ *   Use \Drupal\block\BlockRepositoryInterface::REGIONS_VISIBLE instead.
+ *
  * @see system_region_list()
  */
 const REGIONS_VISIBLE = 'visible';
@@ -68,6 +90,9 @@
 /**
  * Return all regions.
  *
+ * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x.
+ *   Use \Drupal\block\BlockRepositoryInterface::REGIONS_ALL instead.
+ *
  * @see system_region_list()
  */
 const REGIONS_ALL = 'all';
diff --git a/core/modules/update/src/UpdateFetcherInterface.php b/core/modules/update/src/UpdateFetcherInterface.php
index 8d8f2a9..e9f4410 100644
--- a/core/modules/update/src/UpdateFetcherInterface.php
+++ b/core/modules/update/src/UpdateFetcherInterface.php
@@ -8,6 +8,26 @@
 interface UpdateFetcherInterface {
 
   /**
+   * Project's status cannot be checked.
+   */
+  const NOT_CHECKED = -1;
+
+  /**
+   * No available update data was found for project.
+   */
+  const UNKNOWN = -2;
+
+  /**
+   * There was a failure fetching available update data for this project.
+   */
+  const NOT_FETCHED = -3;
+
+  /**
+   * We need to (re)fetch available update data for this project.
+   */
+  const FETCH_PENDING = -4;
+
+  /**
    * Returns the base of the URL to fetch available update data for a project.
    *
    * @param array $project
diff --git a/core/modules/update/src/UpdateManagerInterface.php b/core/modules/update/src/UpdateManagerInterface.php
index d3ea88f..036138d 100644
--- a/core/modules/update/src/UpdateManagerInterface.php
+++ b/core/modules/update/src/UpdateManagerInterface.php
@@ -8,6 +8,31 @@
 interface UpdateManagerInterface {
 
   /**
+   * Project is missing security update(s).
+   */
+  const NOT_SECURE = 1;
+
+  /**
+   * Current release has been unpublished and is no longer available.
+   */
+  const REVOKED = 2;
+
+  /**
+   * Current release is no longer supported by the project maintainer.
+   */
+  const NOT_SUPPORTED = 3;
+
+  /**
+   * Project has a new release available, but it is not a security release.
+   */
+  const NOT_CURRENT = 4;
+
+  /**
+   * Project is up to date.
+   */
+  const CURRENT = 5;
+
+  /**
    * Fetches an array of installed and enabled projects.
    *
    * This is only responsible for generating an array of projects (taking into
diff --git a/core/modules/update/update.module b/core/modules/update/update.module
index f45b589..1a5711b 100644
--- a/core/modules/update/update.module
+++ b/core/modules/update/update.module
@@ -15,53 +15,84 @@
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Routing\RouteMatchInterface;
 use Drupal\Core\Site\Settings;
+use Drupal\update\UpdateFetcherInterface;
+use Drupal\update\UpdateManagerInterface;
 
-// These are internally used constants for this code, do not modify.
+/*
+ * These are internally used constants for this code, do not modify.
+ */
 
 /**
  * Project is missing security update(s).
+ *
+ * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x.
+ *   Use \Drupal\update\UpdateManagerInterface::NOT_SECURE instead.
  */
-const UPDATE_NOT_SECURE = 1;
+const UPDATE_NOT_SECURE = UpdateManagerInterface::NOT_SECURE;
 
 /**
  * Current release has been unpublished and is no longer available.
+ *
+ * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x.
+ *   Use \Drupal\update\UpdateManagerInterface::REVOKED instead.
  */
-const UPDATE_REVOKED = 2;
+const UPDATE_REVOKED = UpdateManagerInterface::REVOKED;
 
 /**
  * Current release is no longer supported by the project maintainer.
+ *
+ * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x.
+ *   Use \Drupal\update\UpdateManagerInterface::NOT_SUPPORTED instead.
  */
-const UPDATE_NOT_SUPPORTED = 3;
+const UPDATE_NOT_SUPPORTED = UpdateManagerInterface::NOT_SUPPORTED;
 
 /**
  * Project has a new release available, but it is not a security release.
+ *
+ * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x.
+ *   Use \Drupal\update\UpdateManagerInterface::NOT_CURRENT instead.
  */
-const UPDATE_NOT_CURRENT = 4;
+const UPDATE_NOT_CURRENT = UpdateManagerInterface::NOT_CURRENT;
 
 /**
  * Project is up to date.
+ *
+ * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x.
+ *   Use \Drupal\update\UpdateManagerInterface::CURRENT instead.
  */
-const UPDATE_CURRENT = 5;
+const UPDATE_CURRENT = UpdateManagerInterface::CURRENT;
 
 /**
  * Project's status cannot be checked.
+ *
+ * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x.
+ *   Use \Drupal\update\UpdateFetcherInterface::NOT_CHECKED instead.
  */
-const UPDATE_NOT_CHECKED = -1;
+const UPDATE_NOT_CHECKED = UpdateFetcherInterface::NOT_CHECKED;
 
 /**
  * No available update data was found for project.
+ *
+ * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x.
+ *   Use \Drupal\update\UpdateFetcherInterface::UNKNOWN instead.
  */
-const UPDATE_UNKNOWN = -2;
+const UPDATE_UNKNOWN = UpdateFetcherInterface::UNKNOWN;
 
 /**
  * There was a failure fetching available update data for this project.
+ *
+ * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x.
+ *   Use \Drupal\update\UpdateFetcherInterface::NOT_FETCHED instead.
  */
-const UPDATE_NOT_FETCHED = -3;
+const UPDATE_NOT_FETCHED = UpdateFetcherInterface::NOT_FETCHED;
 
 /**
  * We need to (re)fetch available update data for this project.
+ *
+ * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x.
+ *   Use \Drupal\update\UpdateFetcherInterface::FETCH_PENDING instead.
  */
-const UPDATE_FETCH_PENDING = -4;
+const UPDATE_FETCH_PENDING = UpdateFetcherInterface::FETCH_PENDING;
 
 /**
  * Implements hook_help().
diff --git a/core/modules/user/src/UserInterface.php b/core/modules/user/src/UserInterface.php
index 1aea757..291a149 100644
--- a/core/modules/user/src/UserInterface.php
+++ b/core/modules/user/src/UserInterface.php
@@ -14,6 +14,44 @@
 interface UserInterface extends ContentEntityInterface, EntityChangedInterface, AccountInterface {
 
   /**
+   * Maximum length of username text field.
+   *
+   * Keep this under 191 characters so we can use a unique constraint in MySQL.
+   */
+  const USERNAME_MAX_LENGTH = 60;
+
+  /**
+   * Only administrators can create user accounts.
+   */
+  const REGISTER_ADMINISTRATORS_ONLY = 'admin_only';
+
+  /**
+   * Visitors can create their own accounts.
+   */
+  const REGISTER_VISITORS = 'visitors';
+
+  /**
+   * Visitors can create accounts, but they don't become active without
+   * administrative approval.
+   */
+  const REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL = 'visitors_admin_approval';
+
+  /**
+   * New users will be set to the default time zone at registration.
+   */
+  const TIMEZONE_DEFAULT = 0;
+
+  /**
+   * New users will get an empty time zone at registration.
+   */
+  const TIMEZONE_EMPTY = 1;
+
+  /**
+   * New users will select their own timezone at registration.
+   */
+  const TIMEZONE_SELECT = 2;
+
+  /**
    * Whether a user has a certain role.
    *
    * @param string $rid
diff --git a/core/modules/user/user.module b/core/modules/user/user.module
index 90b813f..26f7685 100644
--- a/core/modules/user/user.module
+++ b/core/modules/user/user.module
@@ -28,24 +28,37 @@
  * Maximum length of username text field.
  *
  * Keep this under 191 characters so we can use a unique constraint in MySQL.
+ *
+ * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x.
+ *   Use \Drupal\user\UserInterface::USERNAME_MAX_LENGTH instead.
  */
-const USERNAME_MAX_LENGTH = 60;
+const USERNAME_MAX_LENGTH = UserInterface::USERNAME_MAX_LENGTH;
 
 /**
  * Only administrators can create user accounts.
+ *
+ * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x.
+ *   Use \Drupal\user\UserInterface::REGISTER_ADMINISTRATORS_ONLY instead.
  */
-const USER_REGISTER_ADMINISTRATORS_ONLY = 'admin_only';
+const USER_REGISTER_ADMINISTRATORS_ONLY = UserInterface::REGISTER_ADMINISTRATORS_ONLY;
 
 /**
  * Visitors can create their own accounts.
+ *
+ * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x.
+ *   Use \Drupal\user\UserInterface::REGISTER_VISITORS instead.
  */
-const USER_REGISTER_VISITORS = 'visitors';
+const USER_REGISTER_VISITORS = UserInterface::REGISTER_VISITORS;
 
 /**
  * Visitors can create accounts, but they don't become active without
  * administrative approval.
+ *
+ * @deprecated in Drupal 8.3.x and will be removed before Drupal 9.0.x.
+ *   Use \Drupal\user\UserInterface::REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL
+ * instead.
  */
-const USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL = 'visitors_admin_approval';
+const USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL = UserInterface::REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL;
 
 /**
  * Implements hook_help().
