Thanks, David. I think this discussion is raising some interesting issues.

David W. Van Couvering wrote:



2) Bug fixing policy.

I think that the Exceptions section should say explicitly that "It is OK for minor releases to fix bugs in our implementation of the standards, even if those fixes break existing applications." Bugfixes can and do break applications and so violate the cardinal rule. Here are some more examples:

2a) Wrong query results. The correct results may break applications which are either unaware of the problem or which have already written compensatory logic to patch over our error. Correct results may slow down the query's performance and the customer may consider this degradation intolerable.


Ooh. I can tell you speak from experience. I would actually argue that this is not acceptable. You can't just break applications without warning. What I have seen in the past is you provide the user to enable the old or new behavior through some kind of flag, e.g. derby.use.old.broken.behavior or derby.use.new.fixed.behavior


I am glad that we are bothering to make these rules explicit. In a previous life at Sybase, we solved this problem by adding special tracepoints for big, important customers who relied on old, incorrect behavior. As I recall, we didn't know up front who would object to a correction. The tracepoints went into patch releases based on customer dissatisfaction with the last minor release.

Do you think the Sybase model will work for us? Or do we need to add tracepoints to the minor release as we fix the incorrect behavior? Maybe it is not good enough to add a master tracepoint with the semantics "Simulate all incorrect implementations of the standards fixed in this release, X.y." Customers may want something more granular, say, a tracepoint per obnoxious correction. Over time, these tracepoints will pile up and the code will become a more exciting pinball machine. What are your thoughts?


2b) Our DRDA implementation may incorrectly transport datatypes not recognized by DRDA. Conforming to the DRDA spec may mean removing this transport capability and breaking applications which select the unsupported datatypes.


I think it would be unacceptable to remove unsupported datatypes, even if they are not spec compliant. Again, you use versioning and capabilities negotiation to change in a compatible way. For example, if someone has an itch to support a network client that can only handle the types specified in DRDA, and the network client today supports non-standard types, then we should provide an option to run in "standard-DRDA" mode and disable those types.

If we want to add new, non-standard types, then we should only support these types if the client explicitly says it can handle them.

I'm happy with this approach. I would like to see the wiki state these rules explicitly.




3) Client/server compatibility.

I would expect to find these rules spelled out on the wiki page. It is not clear to me that you can deduce client/server compatibility from the cardinal rule. Are these the rules?


I did add a note based on Kathey's comments. I think you *can* achieve this by declaring the right interfaces as Stable or Private Stable, but I agree it's good to call it out.

Thanks.



3a) A major release number defines a family of compatible Derby clients and servers. Derby clients and servers can interoperate provided that they share the same major release number. Say that an application currently runs using a client and server from the same family. The application will continue to run if the client upgrades to the next minor release. The application will also run if the server upgrades to the next minor release.

3b) We strive to minimize incompatiblities across release families. However, we do not guarantee that a client will interoperate with a server having a different major release number. If an application upgrades its client to a new major release, the server may have to upgrade to the new release family too. Similarly, if an application upgrades its server to a new major release, the client may need to upgrade too.


I think this is implied in the definition of Stable and Private Stable interfaces, and by ensuring that all interfaces that the network client depends upon are marked as either Stable or Private Stable.

I can imagine us providing this kind of wording in our documentation, but I am not sure if it is required here, I think it's already covered.

I think your wording does add some clarity about when changes may occur, and I may add that to the note about this that I copied from Kathey's email onto the Wiki page.

Thanks.

Reply via email to