Migration hurdles (and some possible coping strategies)
Joseph Grace <[email protected]> Mon, 3 Feb 2003 13:21:54 -0800
| Newsgroups | gmane.comp.web.zope.zope2-migration |
|---|---|
| Message-ID | <[email protected]> |
In "[Zope2-migration] New mailing list" message, Paul Everitt hits a large number of migration nails directly candidly on their heads: Paul is revealing some very important catch-22's and gotchas which make the migration difficult and/or risky. I'll elaborate where I think I have something to expand on or some suggestions. Overall, I agree wholeheartedly with the message and issues, including Like you, I'll caveat all this with a disclaimer: things aren't this gloomy, this is a hard problem and I also don't have silver bullets, etc. However, this doesn't excuse us from the responsibility of managing this transition and the risks involved. There's more to the transition than writing new code letting the chips fall where they may. So, with that important caveat in mind, I'll expand where I can and offer a few possible insights. I do not have any silver bullets but just some ideas. >Because they want "Zope in general" to succeed? I think the crucial issue to most outsiders is survival of their career, job, and project. Zope2 is enough to keep people's hands full... learning, upgrading, grokking. Zope3 is periphery (or worse threatening) until it's easy to use, test, migrate to. IOW, I very much agree with Paul when he candidly theorizes: the maturity level of Zope 2 + CMF. Some people won't change just for a new CA, if it doesn't do something they deem important. I believe that's absolutely true and will go further. Zope's best and smartest (not necessarily brightest in the sense of leading edge, but smartest in the sense of responsibly managing risks for their projects) will absolutely *not* migrate until the benefits clearly outweigh the risks and downsides. Next-generation Zope needs to overcome those risks, or reduce the barriers to entry as thoroughly as possible. >However, Zope 2 >is a mature project that is beginning to appeal to people in the >mainstream. I think a poor transition could have a negative effect in >this part of Zopeland. Agreed. That leads to perhaps the most annoying (but natural and inevitable) issue. The issue of migrating to Zope2004(Z3) can have a negative impact on the uptake of Zope2. So dealing with the problem successfully in advance will help both Zope2 maintain its growth pattern and ultimately Zope2004(Z3) achieve its potential. FYI, I think Apple did a pretty good job migrating from OS 9 to Mac OS X. On OS 9, they provided a forward compatibility box (libraries) to ease migration off OS 9 toward OS X while still running OS 9. In fact some applications deploy to either OS 9 or OS X using the compatibility box. Then, on OS X, they provided a backward compatibility box to ease the transition onto OS X from OS 9 once running OS X but before fully adopting its new API's, etc.. Even then, some (e.g., the high provile Quark) struggled, but the bulk migrated smoothly even though the two OS's are radically different. A similar forward push (forward compatibility box from Z2 to Z2004/Z3) and backward pull (backward compatibility to Z2 from Z2004/Z3) would provide two major ways to ease migration from old to new. > "List the top 5 factors in Zope that help you sell it. List the top >5 that make it hard." > >The challenge, though, is what happens if we find out: > > Top 5 Needs of Deployers != Top 5 Interests of CA Developers (Stupid question: What is "CA"? Content...Application?) I do not have any silver bullets, but I do have two (err, make that: three) ideas (feel free to take with grain(s) of salt as desired). Briefly, 1. Provide an explicit staged approach to the transition. This entails a coarse grained list of features as they relate to Zope2004/Z3 releases. The first Z2004 release would have to provide baseline functionality, e.g., folders, url mapping to html pages, etc.. The next release may include TAL (I'm making this up but that's the idea), incrementally increasing functionality with each successive minor release. Each Z2004 release could incorporate new Z3 features as well as some backward compatible Z2 features. So, TAL support could be accompanied by DTML support (grafted on). The stages would (presumably) add simpler features early on, and more complex, esoteric features toward the end. With a project map of stages, prospective upgraders could look at the map and see where they fit into it. Less advanced users would get a working Z2004 earlier since their features are likely supported earlier on. Advanced features would support advanced users later on, but with the project map, anyone could experiment with certain known-to-work features in the earlier part of the lifecycle and get a taste for what's coming. Each stage would have a date, Z2 compatibility milestones, Z2004/Z3 technology milestones, and a stability rating (since that's important as well). The project map provides a taste of what's coming, when, and where it's likely worth experimenting with. The map also serves as a vehicle to check progress with the outside world, and get their feedback on how the compatibility strategy is working. (Perhaps volunteer effort could help tune the backwards compatibility efforts?) Each functional release could be accompanied by a request for compatibility testing and conversion testing by community. With each release, this would be an early invitation to get feet wet with Z2004/Z3 by testing the familiar (Z2) in the context of the new (Z2004/Z3). With luck, this process would provide a succession of slippery slopes until the community was adding considerable value to the conversion process and, possibly, informing the final Z2004/Z3 design as well. I think this projectmap could help provide a bird's eye view for those of us who are not attuned to Zope's advanced development. This roadmap idea will be visited more visually in a follow-on post. 2. Offer features in Z2004/Z3 which are so desirable that the upgrade is not just comforting, evolutionary, but a genuine no-brainer/wish-list sort of home-run (foreshadow of grain of salt goes here). See below for radical example (appended rather than core). Such a radical upgrade could also generate new interest in Zope on its own, depending on its nature. 3. [On the fly addition as corollary to 2, above.] Beg, borrow, cheat and steal from other projects and open standards to a. adopt familiar preexisting (open standard) solutions, and b. save work by not having to reinvent preexisting wheels. IOW, offer less special stuff and more open standards stuff in Z2004/Z3 than in Z2. That's a nice carrot everyone can understand and which would actually provide Z2004/Z3 as a reduction in risk compared to Z2. (Downside is less lock-in to Zope, but somehow I do not believe the Zope steering committee is purposely aspiring to proprietary lock-in; upsides include less perceived risk, less maintenance (since outside teams maintain open stuff), and a higher profile for Zope since it becomes a prominent contributor/maintainer to best-of-breed open source technology. Apple seems to be succeeding on this front as well with adoption and support of BSD, X11 (intro'd last month), Rendezvous (discovery networking), etc..) Open standards prevailing over Zope proprietary standards could balance the risks of adopting a "new" Zope. One great value in this open standards strategy is also that scarce resources (developer time) can be spent on what really matters: adding unique Zope value rather than reinventing fairly standard wheels. I do not know how this relates specifically to Z2, Z2004/3 feature lists, but I'm hoping someone with a bird's eye view may find value in this approach. That's about it, except for my radical aside example of strategy #2 which I've appended, below. = Joe = Example of Feature offering Radical No-Brainer Appeal: [Yes, I know Zope-on-Java(Jython) has been rejected in the past by Zope inner circle as Java has been cast as a competitor to Zope, though I disagree with that notion utterly. Nevertheless, that's the current situation as I understand it. I know others feel the way I do about Zope-on-Java, as I know of two attempts to migrate Zope to Java; unfortunately, both projects died prematurely. To me, Zope-on-Java is so obvious, it seems almost inevitable. So, that's why I've chosen to present it. However, due to the controversial and radical nature of the proposal, I've chosen to keep it as an aside. Presumably, some other ideas may exist involving XML or other web technologies which could satisfy this strategy (to some degree). Others are better equipped to fill in the blanks as appropriate. However, my chosen no-brainer upgrade would be the Zope-on-Java, so that's what I'll go with here as an example.] Even given the Java as competitor hurdle above, there are additional hurdles to this strategy (as I see it): Python and Jython upgrade dependencies. These could probably be staged out to minimize or avoid them, but the ideal (and simplest) version involves them, so I'll go with that. -=- Caveats to the brute-force, idealistic approach of Zope-on-Java: 1. Python would need to upgrade to Python3000 (?) where numbers are not necessarily objects. This version would need to remain JVM (Java VM) compatible so that it could be cleanly, efficiently implemented on the JVM, e.g., integers would be implmented as java integers, and longs would need special handling (hopefully still reasonably efficient, just not pure jvm type efficient). This provides a huge speed increase to Jython, and presumably Zope/Jython would be much faster than Zope/CPython (whereas now Zope is CPython "slow", and Zope/Jython (were it to exist) would be even slower due to low-level C code --> Java). Bad news/good news: Bad news: I see no reference to Python3000 on the python.org site or FAQ, so I'm not really clear what happened to the next generation python project or whether it even exists anymore. Good news: Zope3 is rumored to reduce/minimize C code dependencies compared to Zope2, thereby easing the migration of Zope onto Java (i.e., less C code to recreate in Java code; more pure python). This notion was even expressed by a ZopeCorp insider. I hope that means (fingers crossed) the Zope us/them attitude toward Java may finally be shifting; however, I'm still chalking that up to wishful thinking until I hear ZopeCorp express a java friendly view explicitly. 2. Jython needs support. Python is on 2.3, while Jython is only on 2.1. Jython is amazing, but not heavily supported (yet?). For clean support of a pure python Z3, Jython needs to be current with Python. Pragmatically, these issues can be sidestepped with enough elbow grease and perseverance (and maintenance). Python3000 could be circumvented by creating a Zope-on-Java specific jython which takes the efficiency path to new levels (mostly for speedups in jython implementation). However, this approach is a bit unsavory due to branching to non-standard implementation (or playing maverick); it's probably not that bad but would require extra effort and maintenance. Unfortunately, it's probably necessary even with the Python3000 approach since P3000 would have its own (slow) schedule, so anything useful would be a require using a prototype implementation before becoming Python standard. For Jython issues, the pragmatic issue would be to backport Zope to Python2.2 (assuming that's most up-to-date Jython support at the time). That would work but requires extra effort and presumably has a few hurdles as well if certain Python2.3 features are key to Z3. -=- Ok, given those caveats, where's the win? First of all, Java is a huge beast with an inordinate number of powerful libraries and open source technologies, not to mention attractive corporate deployments and dollars. Zope could adopt some of java technologies even to the replacement of some of its own (DTML comes to mind). This would involve Zope depending on and contributing back to other open source projects (a la Apple with BSD, X11, and Rendezvous technologies). That would be yet another shift in the ZopeCorp/Zope business model. Zope technologies may even become more widely used in this scenario (by exporting Zope technology in java). In any case, Zope would definitely pick up more mind share from its contributions and participation on other open source projects, and with luck could ride new technologies supported by a wider (than strictly Zope) community. Also, I know that ZopeCorp (really, board of directors, I believe) is at least sensitive to the notion that Java is a comfort zone for many enterprises, whereas Zope is not (nor really python to much degree). Zope-on-Java provides a valuable perceptual signature that Zope is based on a current, standard, and familiar platform (since it uses Java). I agree it's perception, but that's market reality. In this case, however, it's nice that market reality dovetails with lots of powerful code, e.g., JSP compatibility would be real nice for people to try Zope but keep their existing JSP sites up and running. With Java compatibility, Zope could run pure (as desired) or in hybrid mode where it communicates nicely with existing Java based technologies from preexisting sites. IOW, java compatibility would provide both backward (JSP) and forward (future java technologies) compatibility for Zope. I suspect this would only be a good thing for growth to the Zope community. Wow, there's a long aside! Back to point: If you want Z2004/Z3 to gain the upper hand in the risk/reward tradeoff calculation for existing (and prospective) zope users, provide a no-brainer upgrade feature which is virtually irresistable. Zope-on-Java is the most compelling one with which I am familiar, however, there could well be some rabbits up your sleeves which you could dovetail onto Z2004/Z3 to provide such no-brainer irresistability. I would suggest brainstorming for such hidden gold (XML tech?) and enticements as an incentive to migrate.