Blame lang/python/doc/rst/short-history.rst

Packit Service 30b792
Overview
Packit Service 30b792
========
Packit Service 30b792
Packit Service 30b792
+-----------------+------------------------------------------+
Packit Service 30b792
| Version:        | 0.0.1                                    |
Packit Service 30b792
+-----------------+------------------------------------------+
Packit Service 30b792
| GPGME Version:  | 1.13.0                                   |
Packit Service 30b792
+-----------------+------------------------------------------+
Packit Service 30b792
| Author:         | Ben McGinnes <ben@gnupg.org>             |
Packit Service 30b792
+-----------------+------------------------------------------+
Packit Service 30b792
| Author GPG Key: | DB4724E6FA4286C92B4E55C4321E4E2373590E5D |
Packit Service 30b792
+-----------------+------------------------------------------+
Packit Service 30b792
| Language:       | Australian English, British English      |
Packit Service 30b792
+-----------------+------------------------------------------+
Packit Service 30b792
| xml:lang:       | en-AU, en-GB, en                         |
Packit Service 30b792
+-----------------+------------------------------------------+
Packit Service 30b792
Packit Service 30b792
The GPGME Python bindings passed through many hands and numerous phases
Packit Service 30b792
before, after a fifteen year journey, coming full circle to return to
Packit Service 30b792
the source. This is a short explanation of that journey.
Packit Service 30b792
Packit Service 30b792
.. _in-the-begining:
Packit Service 30b792
Packit Service 30b792
In the beginning
Packit Service 30b792
----------------
Packit Service 30b792
Packit Service 30b792
In 2002 John Goerzen released PyME; Python bindings for the GPGME module
Packit Service 30b792
which utilised the current release of Python of the time and SWIG. [1]_
Packit Service 30b792
Shortly after creating it and ensuring it worked he stopped supporting
Packit Service 30b792
it, though he left his work available on his Gopher site.
Packit Service 30b792
Packit Service 30b792
Keeping the flame alive
Packit Service 30b792
-----------------------
Packit Service 30b792
Packit Service 30b792
A couple of years later the project was picked up by Igor Belyi and
Packit Service 30b792
actively developed and maintained by him from 2004 to 2008. Igor\'s
Packit Service 30b792
whereabouts at the time of this document\'s creation are unknown, but
Packit Service 30b792
the current authors do hope he is well. We\'re assuming (or hoping) that
Packit Service 30b792
life did what life does and made continuing untenable.
Packit Service 30b792
Packit Service 30b792
Passing the torch
Packit Service 30b792
-----------------
Packit Service 30b792
Packit Service 30b792
In 2014 Martin Albrecht wanted to patch a bug in the PyME code and
Packit Service 30b792
discovered the absence of Igor. Following a discussion on the PyME
Packit Service 30b792
mailing list he became the new maintainer for PyME, releasing version
Packit Service 30b792
0.9.0 in May of that year. He remains the maintainer of the original
Packit Service 30b792
PyME release in Python 2.6 and 2.7 (available via PyPI).
Packit Service 30b792
Packit Service 30b792
.. _ouroboros:
Packit Service 30b792
Packit Service 30b792
Coming full circle
Packit Service 30b792
------------------
Packit Service 30b792
Packit Service 30b792
In 2015 Ben McGinnes approached Martin about a Python 3 version, while
Packit Service 30b792
investigating how complex a task this would be the task ended up being
Packit Service 30b792
completed. A subsequent discussion with Werner Koch led to the decision
Packit Service 30b792
to fold the Python 3 port back into the original GPGME release in the
Packit Service 30b792
languages subdirectory for non-C bindings under the module name of
Packit Service 30b792
``pyme3``.
Packit Service 30b792
Packit Service 30b792
In 2016 this PyME module was integrated back into the GPGME project by
Packit Service 30b792
Justus Winter. During the course of this work Justus adjusted the port
Packit Service 30b792
to restore limited support for Python 2, but not as many minor point
Packit Service 30b792
releases as the original PyME package supports. During the course of
Packit Service 30b792
this integration the package was renamed to more accurately reflect its
Packit Service 30b792
status as a component of GPGME. The ``pyme3`` module was renamed to
Packit Service 30b792
``gpg`` and adopted by the upstream GnuPG team.
Packit Service 30b792
Packit Service 30b792
In 2017 Justus departed G10code and the GnuPG team. Following this Ben
Packit Service 30b792
returned to maintain of gpgme Python bindings and continue building them
Packit Service 30b792
from that point.
Packit Service 30b792
Packit Service 30b792
.. _relics-past:
Packit Service 30b792
Packit Service 30b792
Relics of the past
Packit Service 30b792
==================
Packit Service 30b792
Packit Service 30b792
There are a few things, in addition to code specific factors, such as
Packit Service 30b792
SWIG itself, which are worth noting here.
Packit Service 30b792
Packit Service 30b792
The Annoyances of Git
Packit Service 30b792
---------------------
Packit Service 30b792
Packit Service 30b792
As anyone who has ever worked with git knows, submodules are horrible
Packit Service 30b792
way to deal with pretty much anything. In the interests of avoiding
Packit Service 30b792
migraines, that was skipped with addition of the PyME code to GPGME.
Packit Service 30b792
Packit Service 30b792
Instead the files were added to a subdirectory of the ``lang/``
Packit Service 30b792
directory, along with a copy of the entire git log up to that point as a
Packit Service 30b792
separate file within the ``lang/python/docs/`` directory. [2]_ As the
Packit Service 30b792
log for PyME is nearly 100KB and the log for GPGME is approximately 1MB,
Packit Service 30b792
this would cause considerable bloat, as well as some confusion, should
Packit Service 30b792
the two be merged.
Packit Service 30b792
Packit Service 30b792
Hence the unfortunate, but necessary, step to simply move the files. A
Packit Service 30b792
regular repository version has been maintained should it be possible to
Packit Service 30b792
implement this better in the future.
Packit Service 30b792
Packit Service 30b792
The Perils of PyPI
Packit Service 30b792
------------------
Packit Service 30b792
Packit Service 30b792
The early port of the Python 2 ``pyme`` module as ``pyme3`` was never
Packit Service 30b792
added to PyPI while the focus remained on development and testing during
Packit Service 30b792
2015 and early 2016. Later in 2016, however, when Justus completed his
Packit Service 30b792
major integration work and subsequently renamed the module from
Packit Service 30b792
``pyme3`` to ``gpg``, some prior releases were also provided through
Packit Service 30b792
PyPI.
Packit Service 30b792
Packit Service 30b792
Since these bindings require a matching release of the GPGME libraries
Packit Service 30b792
in order to function, it was determined that there was little benefit in
Packit Service 30b792
also providing a copy through PyPI since anyone obtaining the GPGME
Packit Service 30b792
source code would obtain the Python bindings source code at the same
Packit Service 30b792
time. Whereas there was the potential to sew confusion amongst Python
Packit Service 30b792
users installing the module from PyPI, only to discover that without the
Packit Service 30b792
relevant C files, header files or SWIG compiled binaries, the Python
Packit Service 30b792
module did them little good.
Packit Service 30b792
Packit Service 30b792
There are only two files on PyPI which might turn up in a search for
Packit Service 30b792
this module or a sample of its content:
Packit Service 30b792
Packit Service 30b792
#. gpg (1.8.0) - Python bindings for GPGME GnuPG cryptography library
Packit Service 30b792
#. pyme (0.9.0) - Python support for GPGME GnuPG cryptography library
Packit Service 30b792
Packit Service 30b792
.. _pypi-gpgme-180:
Packit Service 30b792
Packit Service 30b792
GPG 1路8路0 - Python bindings for GPGME GnuPG cryptography library
Packit Service 30b792
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit Service 30b792
Packit Service 30b792
This is the most recent version to reach PyPI and is the version of the
Packit Service 30b792
official Pyhon bindings which shipped with GPGME 1.8.0. If you have
Packit Service 30b792
GPGME 1.8.0 installed and *only* 1.8.0 installed, then it is probably
Packit Service 30b792
safe to use this copy from PyPI.
Packit Service 30b792
Packit Service 30b792
As there have been a lot of changes since the release of GPGME 1.8.0,
Packit Service 30b792
the GnuPG Project recommends not using this version of the module and
Packit Service 30b792
instead installing the current version of GPGME along with the Python
Packit Service 30b792
bindings included with that package.
Packit Service 30b792
Packit Service 30b792
.. _pypi-gpgme-90:
Packit Service 30b792
Packit Service 30b792
PyME 0路9路0 - Python support for GPGME GnuPG cryptography library
Packit Service 30b792
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit Service 30b792
Packit Service 30b792
This is the last release of the PyME bindings maintained by Martin
Packit Service 30b792
Albrecht and is only compatible with Python 2, it will not work with
Packit Service 30b792
Python 3. This is the version of the software from which the port from
Packit Service 30b792
Python 2 to Python 3 code was made in 2015.
Packit Service 30b792
Packit Service 30b792
Users of the more recent Python bindings will recognise numerous points
Packit Service 30b792
of similarity, but also significant differences. It is likely that the
Packit Service 30b792
more recent official bindings will feel \"more pythonic.\"
Packit Service 30b792
Packit Service 30b792
For those using Python 2, there is essentially no harm in using this
Packit Service 30b792
module, but it may lack a number of more recent features added to GPGME.
Packit Service 30b792
Packit Service 30b792
Footnotes
Packit Service 30b792
=========
Packit Service 30b792
Packit Service 30b792
.. [1]
Packit Service 30b792
   In all likelihood this would have been Python 2.2 or possibly Python
Packit Service 30b792
   2.3.
Packit Service 30b792
Packit Service 30b792
.. [2]
Packit Service 30b792
   The entire PyME git log and other preceding VCS logs are located in
Packit Service 30b792
   the ``gpgme/lang/python/docs/old-commits.log`` file.