--- /dev/null
+<?php
+
+namespace Drush\Boot;
+
+/**
+ * Defines the interface for a Boot classes. Any CMS that wishes
+ * to work with Drush should extend BaseBoot. If the CMS has a
+ * Drupal-Compatibility layer, then it should extend DrupalBoot.
+ *
+ * @todo Doc these methods.
+ */
+interface Boot {
+ /**
+ * This function determines if the specified path points to
+ * the root directory of a CMS that can be bootstrapped by
+ * the specific subclass that implements it.
+ *
+ * These functions should be written such that one and only
+ * one class will return TRUE for any given $path.
+ *
+ * @param $path to a directory to test
+ *
+ * @return TRUE if $path is a valid root directory
+ */
+ function valid_root($path);
+
+
+ /**
+ * Given a site root directory, determine the exact version of the software.
+ *
+ * @param string $root
+ * The full path to the site installation, with no trailing slash.
+ * @return string|NULL
+ * The version string for the current version of the software, e.g. 8.1.3
+ */
+ function get_version($root);
+
+ /**
+ * Main entrypoint to bootstrap the selected CMS and
+ * execute the selected command.
+ *
+ * The implementation provided in BaseBoot should be
+ * sufficient; this method usually will not need to
+ * be overridden.
+ */
+ function bootstrap_and_dispatch();
+
+ /**
+ * Returns an array that determines what bootstrap phases
+ * are necessary to bootstrap this CMS. This array
+ * should map from a numeric phase to the name of a method
+ * (string) in the Boot class that handles the bootstrap
+ * phase.
+ *
+ * @see \Drush\Boot\DrupalBoot::bootstrap_phases()
+ *
+ * @return array of PHASE index => method name.
+ */
+ function bootstrap_phases();
+
+ /**
+ * List of bootstrap phases where Drush should stop and look for commandfiles.
+ *
+ * This allows us to bootstrap to a minimum neccesary to find commands.
+ *
+ * Once a command is found, Drush will ensure a bootstrap to the phase
+ * declared by the command.
+ *
+ * @return array of PHASE indexes.
+ */
+ function bootstrap_init_phases();
+
+ /**
+ * Return an array of default values that should be added
+ * to every command (e.g. values needed in enforce_requirements(),
+ * etc.)
+ */
+ function command_defaults();
+
+ /**
+ * Called by Drush when a command is selected, but
+ * before it runs. This gives the Boot class an
+ * opportunity to determine if any minimum
+ * requirements (e.g. minimum Drupal version) declared
+ * in the command have been met.
+ *
+ * @return TRUE if command is valid. $command['bootstrap_errors']
+ * should be populated with an array of error messages if
+ * the command is not valid.
+ */
+ function enforce_requirement(&$command);
+
+ /**
+ * Called by Drush if a command is not found, or if the
+ * command was found, but did not meet requirements.
+ *
+ * The implementation in BaseBoot should be sufficient
+ * for most cases, so this method typically will not need
+ * to be overridden.
+ */
+ function report_command_error($command);
+
+ /**
+ * This method is called during the shutdown of drush.
+ *
+ * @return void
+ */
+ public function terminate();
+}