On Mon, 2016-08-01 at 03:23 -0400, Alexandre Demers wrote:
>
> Since I had no answer for now about my previous email, I'll assume the
> major version number to be the API/ABI compatibility number. With that,
> here is a patch to generate and install a pkg-config file for libpodofo.
>
> Please, note that the .pc file will only be created for system where
> pkg-config is available. I could have restricted it only to the OS, but
> than again pkg-config can be installed on mostly any OS. On the other
> hand, .pc file could be created and installed in all cases, so if
> wanted, this condition could be removed.
>

        Hi,
I'm not a PoDoFo maintainer, but from my past experience, the API
stability is currently identified by the MAJOR.MINOR.MICRO version,
thus basically what it is right now.

Regarding the patch:
a) please send patches as attachments, different mail applications can
    garble "patches" sent inline;
b) I would create the .pc file always personally;
c) does the patch expect any other changes being applied?
        Bye,
        zyx


Hi zyx,

Indeed, about the API backward compatibility, it seems as such. I've 
found this very useful site yesterday which lists API/ABI backward 
compatibility for many free libraries: http://upstream.rosalinux.ru/

One can find the results for PoDoFo between 0.5.0 and 0.9.3: 
http://upstream.rosalinux.ru/versions/podofo.html

- Not proposing a "stable" number in the versioning scheme should be 
avoided at all costs, otherwise programs need to be recompiled for every 
"patch" increment to insure that it is still working as expected. 
Example: at work, I'm on Archlinux, using Scribus-svn (thus compiled 
directly on my system) for the added functionalities provided by the 
latest dev version. When I needed Scribus, I had to recompile it for 
that small patch increment.

Another example: Valve's Steam had many bugs reported on Linux when the 
libnm team broke their API compatibility without having such a 
versioning mechanism: Steam was relying on a given version, the number 
thought to be representing the API compatibility had not been updated, 
thus crashing Steam for many users that were using their native 
libraries once they had received the latest libnm library. It is a 
mechanism change that has to be implemented.

- I would at least suggest to use the minor number as the stable API 
mecanism; patch number would then be used only for fixes. By going a bit 
further, adding new functions, symbols, etc. is not a problem as long as 
the available API/ABI is preserved. Thus, the minor number could be used 
for that purpose instead and the major number increment would represent 
something deeper (API/ABI incompatibility).

- PoDoFo could also use an odd/even minor number to indicate if the API 
is stable or if this is a development version.

- Functions could be flagged as deprecated (webpage, doc, changelog or 
even outputting a warning when used) if they were to be replaced/removed 
in the next stable version after new ones had be introduced.

- Here are my toughts when reading about 0.5.0 being the latest 
"stable", and than about 0.9.0 being refactored and enhanced: one should 
ask himself why 0.5.0 was never promoted to an official 1.0.0 and 0.9.0 
to a 2.0.0. The API/ABI is incompatible, podofo-base and podofo-doc 
libraries were removed and merged in libpodofo and so on.
Major increment = API/ABI [in]compatibility
Minor increment = new features, API/ABI backward compatible
Patch increment = fixes, nothing added nor removed

Now, since we are at 0.9.4 and some patches have been merged since its 
release, maybe it is time to create a 1.0.0 version, to add some 
indications to the merge/development process for API/ABI backward 
compatibility, maybe even to name someone in charge of merging patches 
for a given branch once a release is out, etc. From there, 1.0.0 would 
be the new stable release and a branch would be created. Then, 1.0.X 
would be created along the way for fixes and trunk would be used to add 
new features until a given point where 1.Y.0 would be released and 
branched. Later, to initiate major changes, a new branch would be 
created (in-the-way-to-2.0.0) that would become 2.0.0 when ready, etc. 
At the rate where the releases are created, I think that would be the 
best way to go (two years between 0.9.3 and 0.9.4, a year between 0.9.2 
and 0.9.3, almost 2 years between 0.9.1 and 0.9.2). To ensure nothing is 
broken between Minor or Patch increments, we could run something like 
ABI compliance checker.

a) I'm sorry about the patch attachment/inline, I'm used to the mesa, 
dri and kernel way of doing this: all emails are sent as plain text, 
encoded in UTF-8. Patches are also sent inlined as plain text. It is 
easier to read, reply and comment for anybody, easier to search for and 
by using plain text in UTF-8, there is no problem to merge them. 
PoDoFo's community could have a look at "git-send-email" on that matter. 
However, if PoDoFo prefers attachments, that's what I'll use next time.

b) noted, comments are appreciated. I've been thinking about it for the 
last few days.

c) no other change needed. The CMakeLists.txt changes take care of 
creating and installing the file; the .pc.in <http://pc.in> is used as 
an input file (template) to create a personalized .pc file according to 
the system or distribution at build time. It may need to be adjusted 
after statuating about the API/ABI backward compatibility scheme VS 
versioning though.

Cheers,
Alexandre Demers

------------------------------------------------------------------------------
_______________________________________________
Podofo-users mailing list
Podofo-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/podofo-users

Reply via email to