> Should we change our policy and stop exporting new internal packages so
that they really cannot be used?

-2, we want to enable extenders to use and explore code before making it
API. IMHO a good way to provide new API is by having it already been
explored by users.

> And for existing internal that one wants to change/remove, we should
probably go with a deprecation policy like for "real" API.

This may be a joke, but if that was a serious suggestion, -2 to that
proposal. Not being able to freely change internals is a horrible
suggestion as this would effectively prevent all new development
activities.

Best regards, Lars

On Thu, Jan 25, 2018 at 9:20 AM, Mikaël Barbero <
mikael.barb...@eclipse-foundation.org> wrote:

> Very interesting thread, thanks to all for sharing your opinion.
>
> Changing existing internals could break clients because so far, they can
> use it. Should we change our policy and stop exporting new internal
> packages so that they really cannot be used? And for existing internal that
> one wants to change/remove, we should probably go with a deprecation policy
> like for "real" API. Maybe the deprecation period before change/deletion
> will not be as long as for "real" API, but I guess we would get best of
> both worlds with such a policy, isn't it?
>
> WDYT?
>
> Cheers,
>
> --
> *Mikaël Barbero - *Eclipse Foundation
> IT Services - Release Engineering
> 📱 (+33) 642 028 039
> 📧 mikael.barb...@eclipse-foundation.org
> 🐦 @mikbarbero
>
> Le 25 janv. 2018 à 07:37, Ed Merks <ed.me...@gmail.com> a écrit :
>
> Leo,
>
> While I agree in principle, the principles lead down a path where I'm sure
> no one really wants to go; it is the path paved with good intentions.
>
> Specific comments below.
>
> On 24.01.2018 18:24, Leo Ufimtsev wrote:
>
> Hello Ed,
>
> On Wed, Jan 24, 2018 at 7:27 AM, Ed Merks <ed.me...@gmail.com> wrote:
>
>> I'm a more than little annoyed to see that this method
>>
>> org.eclipse.jface.internal.text.html.HTMLPrinter.insertPageProlog(StringBuffer,
>> int, RGB, RGB, String)
>>
>> I understand your frustration, we sometimes have to deal with similar
> problems.
> E.g when Gtk makes changes to their methods, it breaks SWT and causes
> glitches in Eclipse.
>
> But:
>
> As the package suggests, it's an *internal* method: org.eclipse.jface.
> *internal*.text.html.
> 'Internal' means it's not suppose to be used by public.
>
> Yes, the point of "internal" has been hammered upon, but it's a general
> point, like human rights, and of course we all agree the humans should have
> plenty of those.  But it strays far and wide from the specific problem at
> hand.  The irony of the specific problem is apparent is when you look at
> the call hierarchy of the methods in question. They're not used internally
> at all, unless JDT is considered internal, which it clearly is not.  As a
> result of JDT's trending setting example, you'll find uses of this in any
> code that tries to have really nice hover information like JDT does. Given
> there bugs are open asking for it to be API, it's clear there are clients
> of this specific code.  Yes, they're all bad, very bad.
>
> Of course I empathize with Lars' efforts to make improvements, and I have
> in fact helped him in part with those changes, so I more than resent
> arguments that I personally stand in the way of the platform's great
> progress.  Of course I could have been less of a jerk in how I phrased my
> opinion on this specific change.  Sorry for that.
>
>
> If you wish to use internal api because it's useful to you, then you
> should first put in effort to make
> the api public and *only then* use it. Not use it and then complain about
> it's removal.
>
> Yes, the human rights issue again.  The Bugzilla record speaks for itself
> though as does the call hierarchy of the methods, which makes it clear they
> exist to be used outside of the project that provides them.  Had this high
> standard been applied to JDT, we'd not have this problem.  There simple is
> a double standard.  Had we applied this standard when developing Oomph,
> there would be no Oomph.  So while it's a high and mighty principle that
> one cannot argue against without the wrath of the human rights activists
> protesting at your door, it's simply not pragmatic and has not been well
> applied by the overall Eclipse PMC itself.
>
> And again, the specifics of the problem StringBuffer -> StringBuilder; of
> course a trivial change, one that I can change in two minutes in EMF, but
> not without maintaining my compatible version ranges in EMF.
>
>
> Because you chose to use internal api, and your suggestion to revert the
> code removal, you are slowing down platform
> development and by extension slowing down the whole Eclipse development
> process.
>
> Yes, I see it's a significant human rights violation.  But I thought I did
> my part for human rights when I changed EMF's templates to generate
> StringBuilder in places such as the generated toString() method of each
> EClass.
>
> I know JDT, Dani and his team,  are very careful with changing internals
> because they know many clients use them, and they know that while making
> rapid progress is great, if they behave disruptively because they have the
> intrinsic right to so so, they could end up with fewer clients.  And kudos
> to Dani and his team for their consideration; EMF uses JDT internals as
> well and has never in 15 years been broken by any JDT internal "API"
> changes, even with the changes for Java 9.  It's an impressive
> accomplishment for the JDT team, and I'm sure that as a whole it slows them
> down, but they carefully consider the overall balance.
>
>
> It's very important for us to stay agile and move quickly, this involves
> being able to refactor old code, remove redundant code etc..
>
> It's not so clear to outsiders in which direction things are moving
> quickly. I don't think StringBuffer -> StringBuilder is arguably a case in
> point.  No one actually cares whether a toString method uses StringBuilder
> as opposed to StringBuffer, but of course that can be easily changed
> because no one can see that change.  But changing the signature of visible
> methods begs for more caution and consideration, especially when these
> internals are in fact only used externally.
>
>
> As case in point, in Fedora, "yum" got dropped and replaced with 'dnf'
> package manager
> because "yum" had too much internal api being used by external users and
> they couldn't refactor/stay agile.
>
> My experience with HTMLPrinter is that it took me longer than necessary to
> fix some color related issues
> in platform because HTML printer was such a mess of multiple redundant
> methods.
> I'm actually very glad those methods were removed and I think they should
> stay removed.
>
> Fortunately it wasn't your decision!  I'd be very, very, very glad to
> remove Package.getESubpackages() because it's a pointless abomination that
> only ever causes problems while providing no semantic value whatsoever.
> But that's really API, not "internal".  But if I wanted to be agile (and I
> really do!), I'd increment to EMF 3.0, and make all kinds of improvements,
> but the disruption to the community would far outweigh any value that such
> an effort would bring.
>
>
> This is nothing personal. If we move too slowly, eclipse will die and we
> will all loose :-(.
>
> Conversely, if you move too disruptively, Eclipse will also die because
> all kinds of tools that end users love will stop working in Photon, so end
> users won't install Photon and that will make look Eclipse bad.  While you
> can argue (and will of course be right) that the providers of those tools
> were human rights violators for using "internal", the perception of the
> general users will be that Eclipse releases are disruptive and break their
> tools.  The users will then look closely at what new features and improved
> performance they get in return by moving to Photon, and being unable to
> find any that are relevant to them, they'll shake their heads and wonder if
> some other IDE might be a better alternative.  In addition, the folks
> developing the tools will also dread each new Eclipse release and will
> wonder if it's really a good place to develop tools.
>
> So best we all balance these highly principled issues---I do not argue
> that the principles are sound---and look to make improvements in the least
> disruptive way possible, accepting the fact that for most downstream
> clients and for most users, having their code and their tools simply keep
> working is the most important goal for them.  Of course that flies in the
> face of agile refactoring and rapid progress, and of course that suggestion
> will set the development teams' hair on end.  But for EMF, that's something
> I live with, because I know most clients, and no users, will care what I do
> in EMF; they will only notice when I've done something if I breaks them and
> then they'll have a bad impression of EMF.  My arguments about principles
> will fall deaf ears.
>
>
> Moving forward, I suggest we help each other move fast and keep things
> going quickly.
> This involves not using internal api and try to make sure platform
> development is fast and effective.
>
> This would argue for applying these high standards within the overall
> platform itself, so PDE should not use any internals of p2, e.g., so
> "import org.eclipse.equinox.internal.p2.director.PermissiveSlicer" in
> org.eclipse.pde.internal.core.target.IUBundleContainer clearly argues
> that to implement cool things in PDE one needs the highly useful internals
> of p2.  Similarly JDT should not use any internals of UI, JFace, Text, and
> so on.
>
> Unfortunately this is not highly pragmatic, though it does conform to the
> high principles we expect all downstream clients to emulate. If we expect
> downstream clients to be highly principled, the standard needs to be set
> first and foremost but those arguing for the value of those principles.
> Start the effort in your own back yard, and then show to the world that all
> cool things can be implemented with the public APIs with no need to use
> internals across projects.   When that effort is complete, climb up onto
> that high horse and go on the crusade.
>
> Unfortunately, instead of moving forward quickly, this digression into
> high principles would result in the teams spending *all *their time
> figuring out what API clients really need in order to implement
> highly-functional, cool applications.   The end-effect would be that all
> the clients who already have highly-functional, cool application would be
> broken and would need to migrate to a new set of APIs, which hopefully
> really do satisfy *all *their needs.
>
> Is this really the path down which you want to go?  It is definitely not
> the path down which I want to see us go, but the platform teams sets their
> own path.
>
> In EMF I have paved the path differently.  In principle, "private" is bad:
> if it's useful, clients will want to use it, derive from it, and specialize
> it.  In principle, "internal" is pointless: if it's available clients, will
> definitely use it, and then when the pure, correct, final API is realized,
> clients will be disrupted by the internal -> API migration.  Of course this
> leaves me in a bind when I change anything, but as a counter example, one
> of my most significant technical accomplishments in my career was to add
> generics to the Ecore model itself in such a way that no one in my company
> noticed, though EMF was used in hundreds of products.  So significant
> change is still possible down this other path, but yes, it's way more
> restricted for me, so I fully understand that others choose a different
> path.  I will not argue that my path is the best path, but it has served
> the majority of my client base well.
>
> I think the middle path is the one taken by JDT, a path that recognizes
> that internals are used because they can be used and because they often
> need to be used.  I would hope that the path moving forward balances all
> such considerations.
>
>
> Thanks
>
> has gone from deprecated to deleted in less than a 5 week period:
>>
>> https://github.com/eclipse/eclipse.platform.text/commits/mas
>> ter/org.eclipse.jface.text/src/org/eclipse/jface/internal/te
>> xt/html/HTMLPrinter.java
>>
>> JDT, EMF, Xtext, and Oomph all use this method.
>>
>> I really don't care to hear the arguments about it being internal because:
>>
>>    1. I don't see that JDT ought to have exclusive special privileges to
>>    use internal things.
>>    2. I don't see any reason why it should be internal.
>>    3. And any client wanting to implement hovers that work like the ones
>>    for JDT, will have the same needs as JDT and will solve the problem the
>>    same way.
>>
>> I'd like to avoid dwelling on the fact that this is simply a pointless
>> change, but I can't help it. Surely one wouldn't change this simply to
>> improve performance in code that has no relevant performance impact!  It
>> seems to me at best a misguided effort that would be better spent on real
>> improvements.
>>
>> Please revert this change before M5.
>>
>>     https://bugs.eclipse.org/bugs/show_bug.cgi?id=530240
>>
>> And in the future, please consider that any internal API that is used by
>> any other project is going to cause problems for many projects just as it
>> did for JDT:
>>
>>     https://bugs.eclipse.org/bugs/show_bug.cgi?id=529118
>>
>>
>> _______________________________________________
>> cross-project-issues-dev mailing list
>> cross-project-issues-dev@eclipse.org
>> To change your delivery options, retrieve your password, or unsubscribe
>> from this list, visit
>> https://dev.eclipse.org/mailman/listinfo/cross-project-issues-dev
>>
>
>
>
> --
> Leo Ufimtsev, Software Engineer, Red Hat
>
>
> _______________________________________________
> cross-project-issues-dev mailing listcross-project-issues-...@eclipse.org
> To change your delivery options, retrieve your password, or unsubscribe from 
> this list, 
> visithttps://dev.eclipse.org/mailman/listinfo/cross-project-issues-dev
>
>
> _______________________________________________
> cross-project-issues-dev mailing list
> cross-project-issues-dev@eclipse.org
> To change your delivery options, retrieve your password, or unsubscribe
> from this list, visit
> https://dev.eclipse.org/mailman/listinfo/cross-project-issues-dev
>
>
>
> _______________________________________________
> cross-project-issues-dev mailing list
> cross-project-issues-dev@eclipse.org
> To change your delivery options, retrieve your password, or unsubscribe
> from this list, visit
> https://dev.eclipse.org/mailman/listinfo/cross-project-issues-dev
>



-- 
Eclipse Platform project co-lead
CEO vogella GmbH

Haindaalwisch 17a, 22395 Hamburg
Amtsgericht Hamburg: HRB 127058
Geschäftsführer: Lars Vogel, Jennifer Nerlich de Vogel
USt-IdNr.: DE284122352
Fax (040) 5247 6322, Email: lars.vo...@vogella.com, Web:
http://www.vogella.com
_______________________________________________
cross-project-issues-dev mailing list
cross-project-issues-dev@eclipse.org
To change your delivery options, retrieve your password, or unsubscribe from 
this list, visit
https://dev.eclipse.org/mailman/listinfo/cross-project-issues-dev

Reply via email to