Repository: HypothesisWorks/hypothesis

Issue:
We should document plans for future releases
In particular, the [ongoing development](https://hypothesis.readthedocs.io/en/latest/development.html) page should include:

- Hypothesis' policy for which versions of Python are supported.  Also how and when we may decide to stop supporting older versions.

- A timeline for dropping Python 2 support - we keep mentioning 2020 but it's not documented anywhere.  [python3statement.org](http://www.python3statement.org) has a fantastic [practicalities page](http://www.python3statement.org/practicalities/) on how to make this work, especially if we want to make a py3-only release before the EOL date.

- ~~Hypothesis' policy for which versions of *Hypothesis* are supported.  Latest patch release only?  Latest patch of last *n* minor versions?  We don't need [diagrams](https://www.djangoproject.com/download/#supported-versions) or [extensive detail](https://docs.djangoproject.com/en/dev/internals/release-process/#supported-versions) like Django, but the basic approach is important information.~~

- Hypothesis' policy for deciding to release new major and minor versions of *Hypothesis*.  Feature accumulation?  Calendar schedule?  Deprecated features becoming a burden on development?  Probably related to #408.


Discussion:
Yes, this is a good idea.

Interim answers:

* Hypothesis' policy for which versions of Python are supported. (all non-EOL versions?)

Hmm I could sworn this was listed somewhere. It's 3.4+, whatever the current latest version of PyPy (currently Python 2 version, will include Python 3 version when they've caught up to a version of Python 3 we support), all versions of CPython 2.7.x (sigh). 

> A timeline for dropping Python 2 support - we keep mentioning 2020 but it's not documented anywhere. python3statement.org has a fantastic practicalities page on how to make this work, especially if we want to make a py3-only release before the EOL date.

2020 is less a plan and more of a fantasy for me. I haven't firmly decided to drop Python 2 support for then, but I really want to. 

> Hypothesis' policy for which versions of Hypothesis are supported. Latest patch release only? Latest patch of last n minor versions? We don't need diagrams or extensive detail like Django, but the basic approach is important information.

Latest patch release only. When we drop Python 2 support we *might* move to providing patch updates for the last major version to support Python 2. Maybe. Answer may depend on commercial funding.

> Hypothesis' policy for deciding to release new major and minor versions of Hypothesis. Feature accumulation? Calendar schedule? Deprecated features becoming a burden on development? Probably related to #408.

At present, absolutely no policy whatsoever. It's currently "Whenever @DRMacIver feels like it or someone pokes him into doing so", which is obviously bad.

It used to be the case that I did releases almost as soon as things landed on master and I'd like to get back to that. I think #408 would help a lot in doing so.
*headdesk*  Somehow I missed [this page](https://hypothesis.readthedocs.io/en/latest/supported.html), which actually needs some updates - it says Python 3.3+ where we only test 3.4+, and instead of outdated claims about Django we should just note that supported version of optional packages are listed on the extras page.  

So future development should link there, and just mention the criteria for dropping support (including for versions of optional dependencies).

I think that and #537 between them cover everything in this issue.

Resolving patch:
diff --git a/docs/conf.py b/docs/conf.py
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -37,6 +37,7 @@
 extensions = [
     'sphinx.ext.autodoc',
     'sphinx.ext.doctest',
+    'sphinx.ext.extlinks',
     'sphinx.ext.viewcode',
     'sphinx.ext.intersphinx',
 ]
@@ -79,6 +80,16 @@
 random.seed(0)
 '''
 
+# This config value must be a dictionary of external sites, mapping unique
+# short alias names to a base URL and a prefix.
+# See http://sphinx-doc.org/ext/extlinks.html
+extlinks = {
+    'commit': ('https://github.com/HypothesisWorks/hypothesis-python/commit/%s', 'commit '),
+    'gh-file': ('https://github.com/HypothesisWorks/hypothesis-python/blob/master/%s', ''),
+    'gh-link': ('https://github.com/HypothesisWorks/hypothesis-python/%s', ''),
+    'issue': ('https://github.com/HypothesisWorks/hypothesis-python/issues/%s', 'issue #'),
+    'pull': ('https://github.com/HypothesisWorks/hypothesis-python/pulls/%s', 'pull request #'),
+}
 
 # -- Options for HTML output ----------------------------------------------
 
diff --git a/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -74,6 +74,7 @@ def local_file(name):
     zip_safe=False,
     extras_require=extras,
     install_requires=install_requires,
+    python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*',
     classifiers=[
         'Development Status :: 5 - Production/Stable',
         'Intended Audience :: Developers',


Test patch: