emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* Policy proposal: Do not move existing functions/macros except in major version increments
@ 2020-04-17  2:16 Adam Porter
  2020-04-17  9:03 ` Nicolas Goaziou
  2020-06-01 15:11 ` Bastien
  0 siblings, 2 replies; 7+ messages in thread
From: Adam Porter @ 2020-04-17  2:16 UTC (permalink / raw)
  To: emacs-orgmode

The relatively recent moving of org-get-outline-path to org-refile.el
has caused breakage in Org itself in several places, e.g.

https://lists.gnu.org/archive/html/emacs-orgmode/2020-04/msg00260.html
https://lists.gnu.org/archive/html/emacs-orgmode/2020-04/msg00259.html
https://lists.gnu.org/archive/html/emacs-orgmode/2020-04/msg00261.html

Thankfully, Kyle has proposed a patch to revert that change.  I hope it
is merged.

If it is not, when a new Org version is released with those changes
(actually, sooner, because some users run the master branch), it will
cause further breakage in out-of-tree packages and code in user
configurations.

I think changes like this should not be made without very careful
consideration of the wider implications.  These kinds of changes create
a not-insubstantial burden on maintainers of Org-related packages to
keep up with churn and maintain compatibility with multiple Org versions
(which are used in the wild for years--I know of users still using Org
8, as well as Org 9 versions that are included with older Emacs versions
(e.g. Emacs 26.3 is still stuck in Debian unstable, not migrating to
testing, stable, or backports)).

For my own packsges, I would expect to get multiple bug reports for
several of my packages, which means that for each one, I then have to
deal with the report, make a fix, test it, log it, push it, close the
bug report...and for all that, nothing is gained.  It adds up, and it's
frustrating and demoralizing.

Of course, I am not opposed, in principle, to refactoring and
reorganization of this sort.  Org is a huge project, and it certainly
could benefit from these kinds of changes, in general.

So, I propose that changes like these should not be made except in major
version increments, e.g. this change should have been delayed until the
release of Org 10.0.  It would be helpful for users and package authors
if they knew that changes like these would not be made until the next
major version increment.

If this is agreeable to the Org maintainers, I'd ask that it be
documented in the project and announced in the NEWS file.

Thanks,
Adam



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Policy proposal: Do not move existing functions/macros except in major version increments
  2020-04-17  2:16 Policy proposal: Do not move existing functions/macros except in major version increments Adam Porter
@ 2020-04-17  9:03 ` Nicolas Goaziou
  2020-04-23  3:03   ` Adam Porter
  2020-06-01 15:11 ` Bastien
  1 sibling, 1 reply; 7+ messages in thread
From: Nicolas Goaziou @ 2020-04-17  9:03 UTC (permalink / raw)
  To: Adam Porter; +Cc: emacs-orgmode

Hello,

Adam Porter <adam@alphapapa.net> writes:

> The relatively recent moving of org-get-outline-path to org-refile.el
> has caused breakage in Org itself in several places, e.g.

[...]

> Thankfully, Kyle has proposed a patch to revert that change.  I hope it
> is merged.
>
> If it is not, when a new Org version is released with those changes

What makes you think a new Org would be released in this situation,
without fixing it first?

> I think changes like this should not be made without very careful
> consideration of the wider implications.  These kinds of changes create
> a not-insubstantial burden on maintainers of Org-related packages to
> keep up with churn and maintain compatibility with multiple Org versions
> (which are used in the wild for years--I know of users still using Org
> 8, as well as Org 9 versions that are included with older Emacs versions
> (e.g. Emacs 26.3 is still stuck in Debian unstable, not migrating to
> testing, stable, or backports)).

[...]

> So, I propose that changes like these should not be made except in major
> version increments, e.g. this change should have been delayed until the
> release of Org 10.0.  It would be helpful for users and package authors
> if they knew that changes like these would not be made until the next
> major version increment.

FWIW, I think this is too strong a requirement.

This breakage is unfortunate, and I can hear the consequences it has on
the Org ecosystem, but, hey, it happens. Note that moving part of Org
elsewhere usually introduces less friction. This is a relatively
exceptional situation.

Master is an unstable branch, relatively open to experimentation.
Moreover, that experimentation happens before deciding if the next
release should be 10.0 or 9.4, so it wouldn't help users or package
authors.

It doesn't mean we cannot do better here. For example, I think we could
improve the way Org loads its libraries. Ideally, external libraries
should only (require 'org), and optionally, (require 'ox-*) or (require
'ol-*). Thus, changes like the one discussed here would be
implementation details. For example, "ox-hugo.el" requires directly
"ob-core.el", and now "org-refile.el", which is, IMO, a path to
troubles. It should only require "org.el".

The current situation is tricky though: "org.el" requires some libraries
(e.g., "org-key.el", "org-table.el", ...), and some libraries require
"org.el" (e.g., "org-capture.el", "org-element.el", ...). I expect
"org.el" to be the entry point for the Org package, so loading should
happen in one-way only.

This would not solve everything, but it would certainly make things
smoother for external libraries.

WDYT?

Regards,

-- 
Nicolas Goaziou


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Policy proposal: Do not move existing functions/macros except in major version increments
  2020-04-17  9:03 ` Nicolas Goaziou
@ 2020-04-23  3:03   ` Adam Porter
  2020-04-23 11:26     ` Nicolas Goaziou
  0 siblings, 1 reply; 7+ messages in thread
From: Adam Porter @ 2020-04-23  3:03 UTC (permalink / raw)
  To: emacs-orgmode

Hi Nicolas,

Nicolas Goaziou <mail@nicolasgoaziou.fr> writes:

> Hello,
>
> Adam Porter <adam@alphapapa.net> writes:
>
>> The relatively recent moving of org-get-outline-path to org-refile.el
>> has caused breakage in Org itself in several places, e.g.
>
> [...]
>
>> Thankfully, Kyle has proposed a patch to revert that change.  I hope
>> it is merged.
>>
>> If it is not, when a new Org version is released with those changes
>
> What makes you think a new Org would be released in this situation,
> without fixing it first?

I don't know what will happen.  I don't know whether the Org maintainers
would consider the problem serious enough to avert (as you said later,
"it happens").  That's why I pointed out what the consequences would be
if the patch isn't merged, to encourage its merging.

>> I think changes like this should not be made without very careful
>> consideration of the wider implications.  These kinds of changes
>> create a not-insubstantial burden on maintainers of Org-related
>> packages to keep up with churn and maintain compatibility with
>> multiple Org versions (which are used in the wild for years--I know
>> of users still using Org 8, as well as Org 9 versions that are
>> included with older Emacs versions (e.g. Emacs 26.3 is still stuck in
>> Debian unstable, not migrating to testing, stable, or backports)).
>
> [...]
>
>> So, I propose that changes like these should not be made except in
>> major version increments, e.g. this change should have been delayed
>> until the release of Org 10.0.  It would be helpful for users and
>> package authors if they knew that changes like these would not be
>> made until the next major version increment.
>
> FWIW, I think this is too strong a requirement.
>
> This breakage is unfortunate, and I can hear the consequences it has
> on the Org ecosystem, but, hey, it happens. Note that moving part of
> Org elsewhere usually introduces less friction. This is a relatively
> exceptional situation.

Of course, I am biased here, but I feel like it's not quite as
exceptional as it ought to be.  The more Org-related packages I make and
maintain, the more version-specific workarounds I have to add due to
changed function names, signatures, etc.  These are sometimes necessary,
of course, but I think they should be made more carefully and
deliberately.

Of course, Org doesn't make any promises to third-party packages.  But
that is the issue, isn't it?  I'm saying that I think it should start
taking this issue a little more seriously.  :)

> Master is an unstable branch, relatively open to experimentation.
> Moreover, that experimentation happens before deciding if the next
> release should be 10.0 or 9.4, so it wouldn't help users or package
> authors.

That is a matter of policy, which is what I'm proposing.  When such a
change is desired (symbol name, function signature, etc), it should be
targeted at the next major version increment.  If the project as a whole
is not ready to make that increment, that change should be delayed until
then--it can be developed in a branch and merged when preparing the
major release.  These kinds of changes could even be documented in
advance, e.g. in a ROADMAP or PLANS file, or whatever you want to call
it, which would be more explicit and referenceable than merely a mailing
list post.

> It doesn't mean we cannot do better here. For example, I think we
> could improve the way Org loads its libraries. Ideally, external
> libraries should only (require 'org), and optionally, (require 'ox-*)
> or (require 'ol-*). Thus, changes like the one discussed here would be
> implementation details. For example, "ox-hugo.el" requires directly
> "ob-core.el", and now "org-refile.el", which is, IMO, a path to
> troubles. It should only require "org.el".
>
> The current situation is tricky though: "org.el" requires some
> libraries (e.g., "org-key.el", "org-table.el", ...), and some
> libraries require "org.el" (e.g., "org-capture.el", "org-element.el",
> ...). I expect "org.el" to be the entry point for the Org package, so
> loading should happen in one-way only.
>
> This would not solve everything, but it would certainly make things
> smoother for external libraries.
>
> WDYT?

That is a good idea, and one that needs addressing.  I'd be glad to give
some feedback on it, but in a separate thread, please, because it seems
like a different matter from the issue I'm raising and the proposal I'm
making.

Thanks,
Adam



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Policy proposal: Do not move existing functions/macros except in major version increments
  2020-04-23  3:03   ` Adam Porter
@ 2020-04-23 11:26     ` Nicolas Goaziou
  0 siblings, 0 replies; 7+ messages in thread
From: Nicolas Goaziou @ 2020-04-23 11:26 UTC (permalink / raw)
  To: Adam Porter; +Cc: emacs-orgmode

Hello,

Adam Porter <adam@alphapapa.net> writes:

> Of course, I am biased here, but I feel like it's not quite as
> exceptional as it ought to be.  The more Org-related packages I make and
> maintain, the more version-specific workarounds I have to add due to
> changed function names, signatures, etc.  These are sometimes necessary,
> of course, but I think they should be made more carefully and
> deliberately.
>
> Of course, Org doesn't make any promises to third-party packages.  But
> that is the issue, isn't it?  I'm saying that I think it should start
> taking this issue a little more seriously.  :)

[...]

> That is a matter of policy, which is what I'm proposing.  When such a
> change is desired (symbol name, function signature, etc), it should be
> targeted at the next major version increment.  If the project as a whole
> is not ready to make that increment, that change should be delayed until
> then--it can be developed in a branch and merged when preparing the
> major release.  These kinds of changes could even be documented in
> advance, e.g. in a ROADMAP or PLANS file, or whatever you want to call
> it, which would be more explicit and referenceable than merely a mailing
> list post.

I think it isn't a realistic policy, because it is not even close to how
Org development happens.

Unlike what you write, even with a smiley, I am taking compatibility
issues and breakages as seriously as I can. I do my best to not
introduce them in the first place, and, if I do, because I think that's
for the better, I do my best to make the transition easier. Yet,
breakage happens, and I am sincerely sorry about that. Now, fire me if
you want.

However, please remember that Org development happens in a best effort,
and in a somewhat opportunistic, fashion. Most internal changes, and
therefore breakages, stem off a bug report or an enhancement request,
not from a big ROADMAP file in the sky. Call it amateurism, but I think
it is in its most noble meaning.

Maybe in the not-so-distant future, professional-minded folks will lead
the project, defining road maps, strict rules for features integration,
proper issue tracking, and whatnot. And maybe that will be a good thing.
Any help is welcome. Until then, we have two branches:

1. master, where breakage can happen, which implies at least minor
   version numbers bumps.

2. maint, where breakage is to be avoided at all cost, which implies
   only bugfix version number bumps.

Close to a release, we also happen to have "feature-freeze" periods. In
that situation, development happens in a temporary third branch: next.

You may consider it to be an insufficient policy, but AFAICT, this is
all we have at the moment, and, possibly, all we can afford, too.

Of course, this is only my opinion. I wouldn't dare talking for other
developers. AFAIC, I already do all I can, with the time I have;
I cannot follow your policy.

> That is a good idea, and one that needs addressing.  I'd be glad to give
> some feedback on it, but in a separate thread, please, because it seems
> like a different matter from the issue I'm raising and the proposal I'm
> making.

I thought most third-party breakages came from misuse of internal
functions in Org. But if you say it is orthogonal, and that I am
off-topic, so be it.

Regards,

-- 
Nicolas Goaziou


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Policy proposal: Do not move existing functions/macros except in major version increments
  2020-04-17  2:16 Policy proposal: Do not move existing functions/macros except in major version increments Adam Porter
  2020-04-17  9:03 ` Nicolas Goaziou
@ 2020-06-01 15:11 ` Bastien
  2020-06-01 18:07   ` Adam Porter
  1 sibling, 1 reply; 7+ messages in thread
From: Bastien @ 2020-06-01 15:11 UTC (permalink / raw)
  To: Adam Porter; +Cc: emacs-orgmode

Hi Adam,

Adam Porter <adam@alphapapa.net> writes:

> The relatively recent moving of org-get-outline-path to org-refile.el
> has caused breakage in Org itself in several places, e.g.
>
> https://lists.gnu.org/archive/html/emacs-orgmode/2020-04/msg00260.html
> https://lists.gnu.org/archive/html/emacs-orgmode/2020-04/msg00259.html
> https://lists.gnu.org/archive/html/emacs-orgmode/2020-04/msg00261.html

ahem, my bad.  I made this bold (and wrong) move, and I broke code out
of org-mode.

I understand your proposal, and it's always good to be reminded that
many people depend on Org's code out there.  It is not easy to spend
time working on Org *and* tracking all these interesting extensions.

I agree with Nicolas that we should not put more constraints on the
shoulders of Org current developers, especially because their time is 
limited - and obviously not enough to cope with every request.

That said, we can make it easier for third-party developers to know
what changes will be released in the future.

See the "Upcoming changes" in https://updates.orgmode.org

You can subscribe to this RSS feed:
https://updates.orgmode.org/feed/changes

Or check the data directly:
https://updates.orgmode.org/data/changes

To announce the change you see, I just used this email header:

  X-Woof-Change: 9092c289 9.4

That is the commit number where the change happens and the version
in which the change will be released.

The list of upcoming changes is emptied when a new major released is
done, because the changes are then advertized in this file, as usual:
https://orgmode.org/Changes.html

I think that's a tiny distributed effort for developers and a easy
way to track changes for third-party developers.

Best,

-- 
 Bastien


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Policy proposal: Do not move existing functions/macros except in major version increments
  2020-06-01 15:11 ` Bastien
@ 2020-06-01 18:07   ` Adam Porter
  2020-06-01 22:59     ` Bastien
  0 siblings, 1 reply; 7+ messages in thread
From: Adam Porter @ 2020-06-01 18:07 UTC (permalink / raw)
  To: Bastien; +Cc: emacs-orgmode

Hi Bastien,

On 6/1/20, Bastien <bzg@gnu.org> wrote:
> Hi Adam,
>
> Adam Porter <adam@alphapapa.net> writes:
>
>> The relatively recent moving of org-get-outline-path to org-refile.el
>> has caused breakage in Org itself in several places, e.g.
>>
>> https://lists.gnu.org/archive/html/emacs-orgmode/2020-04/msg00260.html
>> https://lists.gnu.org/archive/html/emacs-orgmode/2020-04/msg00259.html
>> https://lists.gnu.org/archive/html/emacs-orgmode/2020-04/msg00261.html
>
> ahem, my bad.  I made this bold (and wrong) move, and I broke code out
> of org-mode.
>
> I understand your proposal, and it's always good to be reminded that
> many people depend on Org's code out there.  It is not easy to spend
> time working on Org *and* tracking all these interesting extensions.

Of course, no one could be expected to keep track of all those things.
Such is the nature of writing software that runs in a Lisp image,
where anyone can use anything, and does.

> I agree with Nicolas that we should not put more constraints on the
> shoulders of Org current developers, especially because their time is
> limited - and obviously not enough to cope with every request.

I mostly agree with you.  My request is simply that, when a change has
the potential to break third-party packages, and it's a change, such
as this one, that mostly moves code around for organizational
purposes, that it be delayed until the next major version.  My goal
for such a policy would be to reduce the frequency of such changes
that third-party package authors have to write compatibility code for.
The (if (version< org-version ...)) workarounds become confusing for
authors and users, and somewhat of a maintenance burden.

> That said, we can make it easier for third-party developers to know
> what changes will be released in the future.
>
> See the "Upcoming changes" in https://updates.orgmode.org
>
> You can subscribe to this RSS feed:
> https://updates.orgmode.org/feed/changes
>
> Or check the data directly:
> https://updates.orgmode.org/data/changes
>
> To announce the change you see, I just used this email header:
>
>   X-Woof-Change: 9092c289 9.4
>
> That is the commit number where the change happens and the version
> in which the change will be released.
>
> The list of upcoming changes is emptied when a new major released is
> done, because the changes are then advertized in this file, as usual:
> https://orgmode.org/Changes.html
>
> I think that's a tiny distributed effort for developers and a easy
> way to track changes for third-party developers.

That's a very clever way to do it!  Thanks for your work on this.  If
it's feasible, you might also consider allowing committers to put such
a header in the git commit log and parsing it out of that, which could
make it even easier.

Thanks,
Adam


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Policy proposal: Do not move existing functions/macros except in major version increments
  2020-06-01 18:07   ` Adam Porter
@ 2020-06-01 22:59     ` Bastien
  0 siblings, 0 replies; 7+ messages in thread
From: Bastien @ 2020-06-01 22:59 UTC (permalink / raw)
  To: Adam Porter; +Cc: emacs-orgmode

Hi Adam,

Adam Porter <adam@alphapapa.net> writes:

> I mostly agree with you.  My request is simply that, when a change
> has the potential to break third-party packages, and it's a change,
> such as this one, that mostly moves code around for organizational
> purposes, that it be delayed until the next major version.

IIRC this was the case for the change that triggered your first email,
it was in master, no?

> My goal for such a policy would be to reduce the frequency of such
> changes that third-party package authors have to write compatibility
> code for.  The (if (version< org-version ...)) workarounds become
> confusing for authors and users, and somewhat of a maintenance
> burden.

I understand the burden.  We don't really follow the conventions of
semantic versioning.  We use "x.y.z" versions with z being for bugfix
releases and both y and x for... the rest.

Because we are slow at releasing so-called minor releases, they end up
containing some changes that users and developers should be aware of.
Hence the need to let them know about such changes.  I don't think
using a policy will help here, because definitions of "breaking" may
vary: is a change in a function's signature always a breaking change?
For every function?  Or just for core functions?  If so, which ones?
(See the many discussions in the npm universe about what to consider
a breaking change and worth a major release.)

In a word: even though stricter rules could somehow help, I do think
the main issue is about *communication*, not conventions.

> That's a very clever way to do it!  Thanks for your work on this.  

Thanks, I hope it will be useful.

> If
> it's feasible, you might also consider allowing committers to put such
> a header in the git commit log and parsing it out of that, which could
> make it even easier.

The idea is that updates that are important enough to be listed on
updates.orgmode.org are the ones that *should* be somehow announced on
the mailing list.  If we let updates.orgmode.org monitor commits, then
people who are only reading the list will miss updates (which we
don't want, I think.)

That said, it would be nice to have a function that checks the data
from https://updates.orgmode.org/data/updates and warn the user when
there is a new upcoming change.

-- 
 Bastien


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2020-06-01 22:59 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-17  2:16 Policy proposal: Do not move existing functions/macros except in major version increments Adam Porter
2020-04-17  9:03 ` Nicolas Goaziou
2020-04-23  3:03   ` Adam Porter
2020-04-23 11:26     ` Nicolas Goaziou
2020-06-01 15:11 ` Bastien
2020-06-01 18:07   ` Adam Porter
2020-06-01 22:59     ` Bastien

Code repositories for project(s) associated with this inbox:

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).