After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 314505 - Release Team process/documentation issues & sugestions
Release Team process/documentation issues & sugestions
Status: RESOLVED OBSOLETE
Product: Release Engineering
Classification: Infrastructure
Component: General
unspecified
Other All
: Normal normal
: ---
Assigned To: Release Engineering People
Release Engineering People
Depends on:
Blocks:
 
 
Reported: 2005-08-25 22:17 UTC by Brian Cameron
Modified: 2015-11-26 10:30 UTC
See Also:
GNOME target: ---
GNOME version: ---



Description Brian Cameron 2005-08-25 22:17:32 UTC
Since GNOME 2.0 the libbonobo library has had version 0.0.0 and the libbonoboui
library has had version 4.0.0.  These numbers need to be bumped because
interfaces have been added and removed from the libraries.  Since functions have
been removed, bumping them to 1.0.0 and 5.0.0 might make the most sense, unless
the removed interfaces have never really been exposed for public use.  Marking
as Urgent since this really should be fixed.  The maintainers of these modules
should be more careful about updating these numbers in the future.

libbonobo
=========

  Functions removed (4):
        bonobo_object_init
        bonobo_running_context_add_object
        bonobo_running_context_remove_object
        bonobo_running_context_trace_objects

  Functions added (87):
        Bonobo_Application_getName
        Bonobo_Application_listMessages
        Bonobo_Application_message
        Bonobo_Application_newInstance
        Bonobo_Application_unimplemented1
        Bonobo_Application_unimplemented2
        Bonobo_Application_unimplemented3
        Bonobo_Application_unimplemented4
        Bonobo_Application_unimplemented5
        Bonobo_Application_unimplemented6
        Bonobo_Application_unimplemented7
        Bonobo_Application_unimplemented8
        Bonobo_Canvas_ComponentProxy_unImplemented5
        Bonobo_Canvas_ComponentProxy_unImplemented6
        Bonobo_Canvas_ComponentProxy_unImplemented7
        Bonobo_Canvas_ComponentProxy_unImplemented8
        Bonobo_Canvas_Component_unImplemented5
        Bonobo_Canvas_Component_unImplemented6
        Bonobo_Canvas_Component_unImplemented7
        Bonobo_Canvas_Component_unImplemented8
        POA_Bonobo_Application__fini
        POA_Bonobo_Application__init
        _ORBIT_skel_small_Bonobo_Application_getName
        _ORBIT_skel_small_Bonobo_Application_listMessages
        _ORBIT_skel_small_Bonobo_Application_message
        _ORBIT_skel_small_Bonobo_Application_newInstance
        _ORBIT_skel_small_Bonobo_Application_unimplemented1
        _ORBIT_skel_small_Bonobo_Application_unimplemented2
        _ORBIT_skel_small_Bonobo_Application_unimplemented3
        _ORBIT_skel_small_Bonobo_Application_unimplemented4
        _ORBIT_skel_small_Bonobo_Application_unimplemented5
        _ORBIT_skel_small_Bonobo_Application_unimplemented6
        _ORBIT_skel_small_Bonobo_Application_unimplemented7
        _ORBIT_skel_small_Bonobo_Application_unimplemented8
        _ORBIT_skel_small_Bonobo_Canvas_ComponentProxy_unImplemented5
        _ORBIT_skel_small_Bonobo_Canvas_ComponentProxy_unImplemented6
        _ORBIT_skel_small_Bonobo_Canvas_ComponentProxy_unImplemented7
        _ORBIT_skel_small_Bonobo_Canvas_ComponentProxy_unImplemented8
        _ORBIT_skel_small_Bonobo_Canvas_Component_unImplemented5
        _ORBIT_skel_small_Bonobo_Canvas_Component_unImplemented6
        _ORBIT_skel_small_Bonobo_Canvas_Component_unImplemented7
        _ORBIT_skel_small_Bonobo_Canvas_Component_unImplemented8
        bonobo_app_client_get_type
        bonobo_app_client_msg_list
        bonobo_app_client_msg_send
        bonobo_app_client_msg_send_argv
        bonobo_app_client_msg_send_valist
        bonobo_app_client_new
        bonobo_app_client_new_instance
        bonobo_application_add_hook
        bonobo_application_create_serverinfo
        bonobo_application_get_type
        bonobo_application_new
        bonobo_application_new_instance
        bonobo_application_register_message
        bonobo_application_register_message_v
        bonobo_application_register_message_va
        bonobo_application_register_unique
        bonobo_application_remove_hook
        bonobo_arg_from_gvalue_alloc
        bonobo_arg_init
        bonobo_arg_register_from_gvalue_converter
        bonobo_arg_register_to_gvalue_converter
        bonobo_arg_to_gvalue_alloc
        bonobo_foreign_object_get_type
        bonobo_foreign_object_new
        bonobo_generic_factory_main_timeout
        bonobo_main_level
        bonobo_marshal_BOXED__STRING_BOXED
        bonobo_marshal_DOUBLE__LONG_DOUBLE
        bonobo_marshal_INT__INT_BOXED
        bonobo_object_bag_add_ref
        bonobo_object_bag_destroy
        bonobo_object_bag_get_ref
        bonobo_object_bag_list_ref
        bonobo_object_bag_new
        bonobo_object_bag_remove
        bonobo_object_get_poa
        bonobo_object_query_remote
        bonobo_object_set_poa
        bonobo_pbclient_set_value_async
        bonobo_poa_get_threaded
        bonobo_poa_get_threadedv
        bonobo_poa_new_from
        bonobo_running_context_add_object_T
        bonobo_running_context_remove_object_T
        bonobo_running_context_trace_objects_T

libbonoboui
===========

Functions changed: (from libbonoboui-2.so.0.0.0 to libbonoboui-2.so.0.0.0)
  Functions removed (6):
        bonobo_dock_band_handle_key_nav
        bonobo_dock_handle_key_nav
        bonobo_ui_toolbar_control_item_set_sensitive
        bonobo_ui_toolbar_separator_item_get_type
        bonobo_ui_toolbar_separator_item_new
        bonobo_widget_clobber_focus

  Functions added (18):
        _bonobo_dock_band_handle_key_nav
        _bonobo_dock_handle_key_nav
        bonobo_canvas_component_factory_get_type
        bonobo_canvas_component_factory_new
        bonobo_control_do_popup_path
        bonobo_control_life_get_count
        bonobo_control_life_instrument
        bonobo_control_life_set_callback
        bonobo_control_life_set_purge
        bonobo_plug_construct_full
        bonobo_plug_new_for_display
        bonobo_ui_component_widget_set
        bonobo_ui_engine_widget_set
        bonobo_ui_internal_toolbar_get_children
        bonobo_ui_internal_toolbar_new
        bonobo_ui_sync_wrap_widget
        bonobo_ui_toolbar_control_item_new_widget
        internal_toolbar_get_type
Comment 1 Brian Cameron 2005-08-25 22:35:57 UTC
Sorry, I meant to say libbonoboui has version 0.0.0 not 4.0.0.  They both should
either be bumped to 1.0.0 or 0.1.0 is what I should have said.
Comment 2 Michael Meeks 2005-08-26 08:45:04 UTC
Dudie - they should never be bumped - we can't change the major .so number -
that'd break everything linking to it, shaft the ABI garentees we made etc. etc.
ie. what are you smoking ? :-)

Furthermore the above list is not that useful to me, can you answer:
    + what is the datum you're comparing from and to what - which versions
      are you using ?
        + is that a meaningful or realistic thing to do ?
        + presumably a more interesting list would come from the last
          version any of us shipped & made garentees about.
    + which of these functions are actually public & defined in the headers
      - rather than just happenning (due to bad symbol exporting discipline)
      to be exported ?
        + [ I'm sorry but if you use random internal symbols that are not 
            declared in headers you have bad things coming to you whatever ]

I'm not sure what you're trying to achieve here really.
Comment 3 Brian Cameron 2005-08-26 20:56:15 UTC
As I said, if the interfaces removed were private interfaces, then only the
minor number should be bumped.  If the interfaces removed were public
interfaces, then there was ABI breakage.  I suspect that they were private
functions since nobody has complained about them, but research will be
necessary.  At the very least since functions were added the minor number should
be bumped.

I was testing version 2.4.3 which was included in GNOME 2.0 with version 2.12.2
included in GNOME 2.10.  You are right that ABI rules only apply since ORBit2
was introduced into the platform.  I can't find any information anywhere about
when modules were introduced into the Platform, so I've been assuming it was
added since GNOME 2.0.  If that's wrong, let me know and I'll rerun the tests.

Looking at the 2.0 source code for bonobo, it seems that bonobo_init is in the
bonobo-shutdown.h header file and the others seem to be in
bonobo-running-context.h.  These are listed as noninst_HEADERS in the
Makefile.am file, so these are private symbols.

Looking at the 2.0 source code for bonoboui, bonobo_dock_band_handle_key_nav and
 bonobo_dock_handle_key_nav is in bonobo-dock-band.h,
bonobo_ui_toolbar_control_item_set_sensitive and bonobo_widget_clobber_focus is
in bonobo-ui-private.h, and bonobo_ui_toolbar_seperator* is in
bonobo-ui-toolbar-separator-item.h.  Looking at Makefile.am, bonobo-ui-private
and bonobo-ui-toolbar-separator-item are in noinst_HEADER.  However,
bonobo-dock-band.h seems to be an exposed header file.  Looking at that header
file, these interfaces are surrounded by #ifdef BONOB_UI_INTERNAL.

Good deal, this means we just need to bump the minor number for these two libraries.
Comment 4 Kjartan Maraas 2006-08-07 10:16:16 UTC
So, we need to bump this one:

LIBBONOBO_LT_VERSION_INFO='-version-info 0:0:0'

to what? 0:0:1?
Comment 5 Michael Meeks 2006-08-07 11:01:14 UTC
no idea - we should read the libtool man page; the versioning is (AFAIR) tangled beyond belief and ugly in the extreme.

As long as we don't bump the major version & break ABI compat, I'm happy with whatever.
Comment 6 Kjartan Maraas 2006-08-08 10:54:16 UTC
From the libtool docs:

   This flag accepts an argument of the form
`CURRENT[:REVISION[:AGE]]'.  So, passing `-version-info 3:12:1' sets
CURRENT to 3, REVISION to 12, and AGE to 1.

...

 5. If any interfaces have been added since the last public release,
     then increment AGE.

I guess 0:0:1 is it then. Brian, you agree that this is what you're after?
Comment 7 Brian Cameron 2006-08-08 18:28:00 UTC
To be honest, I'm not sure what really should be done here - I opened the bug so I should comment. 

Sun's ARC (Architecture Review Committee, responsible for interface stability risk management at Sun) committee reviewed this concern about updating the version numbers and determined that (at least on Solaris), incrementing library version numbers does not add any interface stability value.

I originally reported this bug because the GNOME release team website seems to encourage its use, and the process didn't seem to be followed for these modules.  At first, I assumed that this is supposed to be done for interface stability - but perhaps it is more libtool specific (like make it less likely that your module will have weird libtool problems when you try to build it),

http://live.gnome.org/MaintainersCorner/Releasing

I'm not sure why the release team recommends this, or why the libtool documentation suggests that it is good to do this.  But, assuming that it adds some value, bumping the number so that we follow the libtool and GNOME release team process is probably easier than changing the release team process.  :)

Though perhaps the recommendation should be removed from the GNOME Release Team website if it doesn't really add value - especially if GNOME Platform module maintainers don't see the value in it.
Comment 8 Michael Meeks 2006-08-09 08:03:24 UTC
Brian - glad you don't think breaking ABI compat by changing the major .so version is a great idea any more :-)

Wrt. the other things - sure, you can try to unwind the mind-mangled section that you link to there:

# The string is of the form C:R:A.
# - If interfaces have been changed or added, but binary compatibility has
#   been preserved, change to C+1:0:A+1
# - If binary compatibility has been broken (eg removed or changed interfaces)
#   change to C+1:0:0
# - If the interface is the same as the previous version, change to C:R+1:A

But that scares the living daylights out of me - and (in no way) can be considered easy to use, comprehensible, or even a useful representation of what has happened (surely ?). It seems in the common case: adding interfaces compatibly, you have to (randomly) increment 2 numbers in lock-step - not intuitive, not something memorable; and if you screw it up - all hell breaks loose.

Basically until libtool comes up with a clear and comprehensible way of versioning things, I'd rather just stuck with no .so number change [ in the past it has served us well ]; and let anyone that -really- cares about precise versioning stuff do dlsym tricks with symbols :-)
Comment 9 Kjartan Maraas 2006-08-11 08:23:38 UTC
From my reading of the libtool info page incrementing age should be enough when there's only been additions? Maybe the release team page is wrong somehow?
Comment 10 Brian Cameron 2006-08-11 17:53:20 UTC
Yes, I suspect that this is a bug in the release process.  I'm changing the bug category to "Release Engineering' so perhaps we'll get some ideas from them.  
If they think this rule is important enough to follow, then we probably should 
do something about it.  libbonobo and libbonoboui are just two of many GNOME 
Platform libraries (let alone desktop ones) that is not following this 
recommendation.

Note that there was some email discussion about this topic on
release-team@gnome.org, and it sort of seemed that people didn't see the value 
in this then.

http://mail.gnome.org/archives/release-team/2005-August/msg00252.html

However, I notice that when the release team migrated their "For Maintainers" section to the Wiki, that they kept this information about as the recommendation.
Though I suspect that the release team website just needs some attention.  The
website is missing a number of "Best Practices" that are generally followed by the community.  For example:

+ The For Maintainers page doesn't seem to explain that the release team 
  recently agreed that all Platform module maintainers are responsible for
  making sure the gtk-doc generated documentation is up-to-date, or how
  the Since: and Deprecated: tags should be used.

+ The Release team website doesn't really explain what the ABI Stabiity
  guarantee for GNOME Platform libraries means for end-users, third party
  integrators, etc.  

+ Although the community does seem to manage issues relating to ABI
  compatibility reasonably, there is no information on the website about
  what people are supposed to do when they identify breakage (who to 
  contact, how to file a bug and fill the fields properly to get
  proper attention), and how the community tends to respond to issues
  when raised.

+ Although the release team website does explain what the Platform 
  libraries are fairly well, it doesn't explain what the process is
  for making a module a part of the Platform, or the process we use
  for adding new modules to the GNOME desktop.  Probably should 
  explain some things like what a maintainer should consider 
  before proposing their module (e.g. that their documentation meets
  requirements, etc.) for the Platform, and how to actually go about
  proposing it.  Nor does it explain the process we use for proposing
  new Desktop modules.

+ There doesn't seem to be much information about how FreeDesktop 
  specifications work in the GNOME desktop.  It seems it would be
  useful if somewhere we documented which specs are supported and
  what GNOME version they were introduced into.  There are probably
  other external interfaces (such as Xorg extensions) that would
  also be good to document like this.

I think the GNOME community would benefit if our release process were
better documented.  Most of what we decide is done in public forums,
but because the process isn't well documented it is hard for people
to get involved and understand how things are done.  Also, I think
people often complain that people send mail to the wrong alias, or
send emails that aren't fully thought through.  I think better
process documentation would help in these regards.

Some information is here that might be useful to more integrate with
the release engineering website.  I think it would be better to provide
more detail about interface stability in the GNOME Platform.

http://live.gnome.org/InterfaceSpecification/InterfaceTable?highlight=%28interfacespecification%29
Comment 11 Vincent Untz 2006-08-11 20:32:01 UTC
(In reply to comment #8)
> Wrt. the other things - sure, you can try to unwind the mind-mangled section
> that you link to there:
> 
> # The string is of the form C:R:A.
> # - If interfaces have been changed or added, but binary compatibility has
> #   been preserved, change to C+1:0:A+1
> # - If binary compatibility has been broken (eg removed or changed interfaces)
> #   change to C+1:0:0
> # - If the interface is the same as the previous version, change to C:R+1:A
> 
> But that scares the living daylights out of me - and (in no way) can be
> considered easy to use, comprehensible, or even a useful representation of what
> has happened (surely ?). It seems in the common case: adding interfaces
> compatibly, you have to (randomly) increment 2 numbers in lock-step - not
> intuitive, not something memorable; and if you screw it up - all hell breaks
> loose.

All GNOME libraries I've been working on are using this, and really, after a while, you get used to it. If you get it wrong, don't worry, packagers will slap you :-)

Kjartan's comment is interesting. We need to look at this.
Comment 12 André Klapper 2015-11-26 10:30:37 UTC
I assume this is obsolete nowadays.