Changing private symbols to public (was: Re: CVS Update: xc (branch: trunk))
Mike A. Harris
mharris at redhat.com
Wed Feb 2 16:03:22 PST 2005
On Wed, 2 Feb 2005, Daniel Stone wrote:
>> That is a bogus argument. All of the internal symbols in various
>> libraries were _intended_ to be internal, and wether they are
>> explicitly hidden or not, they should be treated as private,
>> wether or not that is enforced by the compiler currently.
>>
>> Otherwise, with your logic, where does one draw the line?
>
>I invite you to:
> * revert my commits,
> * change _IceGetPeerName to attribute((hidden)),
> * watch the build break,
> * fix the build breakage, either by unhiding this symbol, and
> making it a part of the public API, or removing libSM's
> dependency on it.
>
>By the way, I meant 'using published headers'. Cheating with your own
>prototypes doesn't count.
Daniel, I'd like to make sure that you know that I am not opposed
to the change you made, as you seem quite on the defensive about
that, and I wasn't trying to be on the offensive. I did not have
any opinion as to wether or not the change itself was right or
not, I just wanted to see the discussion that led up to the
change so I could understand the rationale myself, etc.
In hindsight, I've went over the thread from the start again,
and I believe that I could have reworded myself in a better way
so that my intentions were more clear.
I did not mean for this to come off in a personal way, nor for
you to be offended by it, and I apologize if that has happened.
>> My concern, is that random developers are making changes to the
>> intended visibility of internal X library symbols on a personal
>> whim without any pre-discussion on xorg mailing lists, and
>> without any peer review. I consider this practice to be
>> unacceptable by anyone, without discussing the changes on the
>> xorg mailing lists FIRST. If the change truly is safe and sane,
>> and makes total sense, then there isn't likely to be much
>> objection is there? Please ignore the specific change you just
>> made when answering this question, and look at the bigger picture
>> of anyone randomly changing any other symbol in any other
>> library.
>
>While I'm honoured by 'random' and 'whim', I assure you that
>there was a reasonable amount of thought put in to it, and that
>it was done with knowledge of, and in accordance with, proper
>shared library versioning strategies.
The discussion since my original posting, including comments from
keithp and yourself have convinced me now that there was a fair
amount of thought put into this in the modularized tree already,
including rationale.
It was the rationale behind the change which I wanted to know,
and I feel that has now been presented finally, and that the
rationale given seems rather sensible.
However, I do want to point out that until this discussion took
place, the change that occured did come all of a sudden, and with
no prior discussion that I could see, and so it really did seem
to be a random whim. Now that it has been clarified that this
was not the case, I beleive the miscommunication has been
corrected, and we are closer to being on the same page.
>I like the idea of bureaucracy for managing, say, the branch.
>I dislike the idea of this for HEAD.
I dislike bureaucracy completely. I do however like to see open
discussion on all aspects of development, and I encourage people
working on (any) code to discuss their ideas/plans, etc. ahead of
time with others, as that quite often yields new ideas, etc. and
also gives the principle of least surprise.
I do not think that there should be a hardcore strict requirement
that everything be discussed ad infinitum, and voted on by some
bureaucratic panel for 6 months. That would be counterintuitive
to the goals of the project, and would be going backwards rather
than forwards.
The project needs to have more freedom of that, and with freedom
comes responsiblity of everyone to use best judgement with all
decisions they make. Sometimes there will be universal
agreement, and sometimes not. Sometimes there will be reasonable
concensus on things and sometimes not. Sometimes things can be
put into CVS without anyone questioning them, and other times
people will question things that go into CVS, in particular if
they have a concern about it and can't find any previous
discussion anywhere about the item in question.
I definitely hope that all people contributing to the code and
checking things into CVS review other people's commit messages,
file modifications, and review code diffs for errors, crackrock,
and other things. Since we do not have a dictator controlling
what goes into the tree, we _all_ need to watch what goes into
the tree, and I believe voluntary code review by everyone who has
the time to do so, will help detect potentially bad things from
getting into the tree.
When someone sees a change that they disagree with, or have
concerns about, or just don't understand, they should speak up
and bring their concerns, so that it can be discussed and
resolved, and preferably in a friendly polite manner.
Having said that, I believe I could have approached my concerns
from a different angle which perhaps would not have been taken in
as bad a way.
>You might be surprised to know that I did this a while back with
>a heap of patches. A few of them got merged into HEAD after
>ajax got sick of having had them hang around for weeks in
>Bugzilla and merged them; the rest are waiting for me to get
>sick of it also and find the time to integrate them all.
I'm not surprised per se, but it is nice to be made aware that
other work has been done, or will be done in a similar vein as
well.
>The problem with doing this is that if you treat no action as
>implicit consensus, aside from the fact nothing ever gets done,
>when do you accept that you have implicit consensus and move
>ahead? A week? Two? What if someone pops up after that because
>they've been on holidays and cracks the sads because they
>weren't consulted?
Yes, this is a problem, and I have faced it myself many times,
including with X.org CVS commits, and with a previous popular
X11 implementation as well. I personally despise the "assume
your changes are ok if nobody objects" line of thinking because
it makes the assumption that:
no response == acceptance and implicit permission
When in reality, people who might object or have a problem with
the changes might be on vacation, or have missed the email, or
any number of things. Maybe they just didn't have the time to
look at it and even make a judgement.
That is irritating indeed, and I've had various things sit in
different bugzillas for long periods of time, and never get any
feedback good or bad. I too have frequently gotten a feeling of
"I'll just commit it then and if anyone has a problem they can
bring it up then". And I've went ahead and made some CVS commits
having not received any objections, only to have people object
AFTER the fact a day or 2 or 5 later, which was very frustrating
because I had moved on to other stuff, and had to come back to
the issues again.
>It's a nice idea, right, but in practice, let me assure you that
>it falls apart. It would've just been more noise on xorg@, and
>I get the sense that I've been responsible for enough of that
>already.
>
>Would you have opposed this commit if it was raised?
Now that I know the rationale behind the change, and that it had
a fair amount of thought put into it, and that thought has been
expressed in reasonable detail, I would have to say that had this
information been discussed on the list ahead of time, and I had
an opportunity to review it, I would not have any objections.
>> Unless there is a standard process that these type of changes
>> have to go through, then people will end up eventually making
>> changes that break compatibility, or cause other damage that
>> can't easily be fixed in the future.
>
>If people make changes that break API or ABI stability, I'm
>going to go beat them with the soversion stick until they decide
>whether to bump the soversion, or revert the changes and do them
>in such a way that API and ABI stability is retained. I bumped
>the minor revision in the soversion of libICE because full
>backwards compatiility was retained, but an extra symbol was
>added to the public visibility list.
Then we are in violent agreement on that.
>I will be keeping an eye on the commit list as much as I can to see if
>I can't try to keep this sort of practice enforced; I have in theory
>been doing this on the modular tree, except all that's happened there
>has been syncing from the monolithic tree (ironically, the monolithic
>commit I did was synced from the modular tree).
This is also good to hear. The more people who watch commit
messages and/or review diffs of things commited, and voice
any concerns, the better.
>> If other X.Org developers feel the same way as I do about this
>> concept, then I would like to hear them stand up and say so.
>>
>> If other developers think I am wrong, and that it is ok for
>> anyone with CVS commit access to change the visibility of library
>> symbols without discussing them on the mailing lists first, then
>> I would like them to stand up and say so.
>
>I think you're presenting a false dichotomy of either we all go through
>a process involving people with beards and pipes, conference calls, and
>the word 'ISO'; and a land where everyone gets jacked up on speed,
>damages the API in the way that seems least sensible at the time, all
>the while going TEEHEEHEEILOVERANDOMAPICHANGES.
No, that is not what I want to see, but I can see how my
statements might have mislead you to think that's what I meant.
I assure you I dislike confcalls with beards and pipes and the
word ISO. I prefer meetings where people "talk about shit" over
meetings where people "bring a motion to the table", and I
believe you'll probably "<expletive deleted> right!" me on that
before you'd "concur" on that.
>> If other developers are completely indifferent and think everyone
>> can judge for themselves when making a change, then I'd like them
>> to stand up and say so also.
>
>I would certainly hope that anyone entrusted with commit privileges to
>xorg can make decisions like this.
We can all hope that, but we've also seen changes occur that have
had objection by one or more parties in the past, some of which
had to later be modified in some way to become accepted, or which
were reverted or disabled. I don't think this is reason to
remove any of those people's CVS commit priveledges.
I think that with freedom comes responsibility, but also that
everyone must accept the fact that from time to time someone else
will object to their changes, and possibly want the changes
reverted or explained, etc. I do not propose to revoke anyone's
CVS priveledge due to a disagreement arising between people over
a commit, unless the commit is highly controversial or breaks
some major taboo, etc.
>> I wasn't suggesting that you stay out of xorg. What I'm
>> suggesting, is that you discuss these type of changes with other
>> developers in the open public forums ahead of time and see if
>> people have a general concensus that the changes are sensible, or
>> if they have specific concerns about them. This is not about the
>> specific change, but about the idea of someone changing something
>> of this nature without discussing it previously with others.
>
>I honestly don't see the point.
Perhaps because you had already discussed it with keith and
others in the modular tree? I guess it's kindof moot either way
now though, as I think we're more in agreement than anything.
>> Unfortunately, there are no real written CVS policies that detail
>> acceptable versus unacceptable changes, or detail what should be
>> discussed amongst developers first and concensus reached before
>> changes occur. Without having any guidelines or controls in
>> place, every developer is completely free to make whatever random
>> changes they see fit, and hope nobody notices.
>
>I would hope that 'don't be a dick' would suffice as a written policy.
It would be nice to hope for that, but in practice I don't think
implicit policies are good enough. I don't think a 20 page
manual of "do this/dont do that" written as an ISO document is
acceptable either. Something like the DRI project's CVS policy
page is what I have in mind, and it is pretty simple and basic
common sense IMHO.
>As far as those go, we have unwritten, but adhered-to, policies
>on changelogging commits; we presumably follow sanity with our
>shared libraries in terms of soversions; I assume people
>wouldn't commit things with random dodgy licences[0], or which
>they didn't have copyright to; you wouldn't make a change which
>maliciously broke stuff, et al.
Unwritten policies are a bad precedent though, as there will
always be new people coming along who don't know what the
unwritten policy is. I face a lot of that every day. I strongly
believe that balance is needed between explicitly stating things,
and letting things be implicit. In particular, it is a good idea
to formalize some explicit things, when there have been problems
in a given area at some point, or when people frequently seek
clarification about something in particular.
A CVS policy document should be mostly a guideline to avoid
problems, and inform people of some minimum sensibilities to
follow. Focus being on "guideline".
>> caution by discussing certain types of changes with others prior
>> to making them. If you can forget about this particular change
>> for a minute, would you agree that these are in general, good
>> ideas for people to follow?
>
>Sort of. I forsee an xorg@ which is useless because everyone's
>running around trying to get permission for some tiny fix to
>something else, and eventually everyone just abandons the swamp
>that is xorg@, so people just start blindly committing whatever
>they see fit.
That would not be productive.
>I really can't see the need for approval here -- not in this
>specific case, not in general. Shared libraries are fragile,
>and notoriously so, so I would hope that someone who didn't know
>their way around shared libraries would either ask on the list,
>or ask someone they knew to check their patch for them, but in
>the general case, I don't think it's necessary to continually
>babysit developers[1]. We're working in HEAD, no-one will ship
>a pre-compiled Matlab or something built against HEAD.
>
>If anyone came up with any specific concerns, it could've quickly been
>reverted with no damage done.
I wasn't suggesting that your change needed approval. Approval
implies that some official body (the arch board? the BOD?) would
have to vote or some crackrock like that. "Concensus" is much
more informal discussion, which might even end up with nobody
providing any feedback at all. If you decided to post to the
list asking for concensus, and not gotten any feedback at all,
and then decided to make the change, then you could yell at
people for complaining later. ;o) Also, there would have been
something to find with the list search engine. ;)
However, I agree with the prinicple of HEAD being more volatile
by nature of what it is.
>[1]: If we have developers who need babysitting, maybe their
> developership needs to be reviewed.
Overall, I don't think anyone needs babysitting, but that doesn't
mean that nobody will ever object to things that get committed to
CVS either. And that's perfectly ok, as long as any objections
or concerns get resolved via discussion or whatever afterwards,
like this one has now. ;o)
Take care.
--
Mike A. Harris, Systems Engineer - X11 Development team, Red Hat Canada, Ltd.
IT executives rate Red Hat #1 for value: http://www.redhat.com/promo/vendor
More information about the xorg
mailing list