I'll just run this as a scenario -
Let's say I currently have a site based on Drupal 4.0. What steps would I need to take to upgrade to Drupal 6.0?
I run a one-man shop and currently have about 20 clients. In order to build my business, the majority of my time and my core focus should remain on developing new sites for new clients, not revamping old sites.
My understanding is that Drupal is "out with the old, in with the new", with little to no regard for backwards compatibility or transitional processes to newer versions.
I'm hoping that I'm wrong about that - because obviously, if that assumption is true, Drupal would be a very bad choice for me.
It just seems like (possibly based on my ignorance) there's a double-standard here. Everyone says "Don't hack the core - that's bad programming, because you'll have to continue hacking the core..."
But if the development team is essentially "hacking the core" with each new revision, then what's the difference?
Again, I hope to be called out as a complete ignoramus here -
Is there reliable, healthy support for upgrade paths and transitions to newer versions - or is it just "every coder for himself"?
I'm not a coder. I'm a designer.
If I built out a site, I would most likely start with Drupal 5.0 (as advised), using PHPTemplate for theming, and build out the client's contents using as few "modules" as possible (as continued development on those could drop at any moment, no fault of the Drupal team).
So essentially, what would the process for future-proofing a Drupal-based website, and how much time is normally required to complete a transition?
Also, if PHPTemplate were to be completely revised, would an upgrade or transitional path for themes built on the older engine be provided?
Again, if Drupal is all about remaining on the "cutting edge", that's cool and I'm sure that approach is suitable for some developers.
But in my case, I'd require the help of the Drupal team to provide the tools to transition between versions. If that's not available, or even if it's not a HIGH priority for the development team, I suppose I should look elsewhere.
Thanks for any info/advice.
Comments
=-=
The users previous thread: http://drupal.org/node/228670#comment-753957
The difference between users hacking core and Drupal dev's moving core forward is simple:
Major versions take on API changes and an upgrade path is created.
minor versions do not offer new features and as such the APIs don't change, because only security holes are patched and bug fixes added.
Thus a user who hacks version 5.2 will overwrite all changes when a security release of 5.3 is out. This is why hacking core is a bad idea. Besides, hacking core is unnecessary with the way drupal is wriitten, you can use hooks and create your own modules to plug into core where you want.
Modules for verison 5.x would always work for 5.x. Modules need not be updated until the next major release except under very rare occasions.
This node: http://drupal.org/node/65922 that I've given you before answers most of your questions with regards to upgrade paths, time between releases and the like. Your comments from that handbook page have been removed as they added nothing to fold into the handbook page and were only biasely based on your own opinions and epectations about how Drupal should work for you.
_____________________________________________________________________
My posts & comments are usually dripping with sarcasm.
If you ask nicely I'll give you a towel : )
Backward Incompatibility
Note: My comment here is the same as tbcreeks other 2 threads. I don’t like spamming my views into multiple threads, but since the original question has ended up in 3 threads I don’t seem to have an alternative.
The concerns of tbcreek are concerns of mine and probably should be concerns of any potential Drupal user. There is an appearance with Drupal development in regards to backward incompatibility issues that it is badly managed or not managed at all.
There doesn’t appear to be an appropriate evaluation of the worth of changes versus the pain they cause. There doesn’t appear to be appropriate comparison and evaluation of alternative methods that don’t force backward incompatibility.
There is an appearance that the designers consider backward incompatibility of zero consequence. The appearance is that there is a couldn’t care less attitude towards creating backward incompatibility. The appearance that backward incompatibility is done for the most trivial reasons and in many cases of such debatable worth that other people may actual consider the original to be better.
Things like changing the name of interface parameters because someone thinks (and arguably at that) that another name is better, and then using the original name for something else. Doing that to interface parameters when those changes create backward incompatibility to possibly many users is just crazy. It is far too trivial for the pain.
This appearance is giving Drupal a bad name. It reduces the number of people that use Drupal and a consequence of the lower user base is that Drupal will not advance as much as would with a bigger user base.
Having appropriate management of these issues, both in reality and in a way that is obvious to users, will actually help Drupal be the leading CMS, not hinder it. It needs to be seen to be being done as well as being done.
Some suggestions to help are as follows:
1) Some major revisions, at least each alternate major revision, should be specified as a revision that is 100 per cent backward compatible. Note: It is a lot easier to make 2 changes at once than it is to make 1 change at one time and then within a short period later to have to make another.
2) I presume that there are already special rules relating to development for any development that will result in backward incompatibility. Special rules such as that each such change requires a written justification and evaluation etc along with a comment period, polls etc. If not, there needs to be. Further, this control/management of backward incompatibility needs to be seen to be being done. I would suggest that the current area in the forum on drupal.org for discussion of Development (working groups) split the Drupal.core section into two parts. One part for discussion of proposed changes that could create backward incompatibility and one for the remainder of Drupal.core development.
Please note: I am not suggesting that there is to be no backward incompatibility. Sometimes this is needed. Sometimes you need to throw out old interfaces in order to stay bleeding edge. I am simply stating that this special area needs a proper evaluation methodology and proper management and users and potential users need to be able to see that this is occurring.
=-=
I can't think of a single occurance where this has actually ever happened.
I find this comment interesting considering the drupal community, drupal sites being deployed and drupal activity in general continues to grow by leaps and bounds.
There is and they are. Expect that your theme and your custom and contrib modules will be broken between major versions. If you don't want to wait for contrib developers to update the modules wait to update your site until such time that the modules are updated. Same with themes. Documents are worked on and released during development on exactly where changes are taking place adn what theme builders and module developers need to do to port their theme to the next version. These docs are always found in the documentation section. There is also a CHANGELOG.txt file in every drupal minor and major version update explaining things that change as well. Then of course reading the discussions that take place in the next versions - issue query helps as well as these are indeed public.
Now if users don't do any leg work to help themselves understand the changes that are taking place that's a different issue.
_____________________________________________________________________
My posts & comments are usually dripping with sarcasm.
If you ask nicely I'll give you a towel : )
I agree with this policy, but...
The other extreme is AutoCAD. If they put in something wrong in 1982, they've left it alone in order to be backwards compatible. Exceptions are few. Instead of fixing problems, they've been rewriting the documentation and calling them features.
So it's refreshing to see the opposite approach. My personal opinion is to go ahead and innovate, but not disturb things unnecessarily. One could point at the histories of the Volkswagen and the ISA computer for examples of reasonable pursuit of innovation.
However, it would be nice to have a bridge layer that could run old modules. With a performance hit, most likely. So D5 modules would run on this module which runs on D6. If you needed to run a D4 module, then just string together the two bridge modules.
I don't know what the technical challenges to this would be, and assume that they would be formidable, but this would greatly speed up adoption of newer versions, and I think it would be worth it. The performance penalty would encourage porting of existing modules.
Just imagine if Microsoft threw away all their accumulated garbage & wrote an efficient OS, and then added a layer that allowed old stuff to run, but at a cost.
Just one person's fantasy.
Running old modules
davidlark wrote:
>However, it would be nice to have a bridge layer that could run old modules.
That seems a good idea. For example, you know, there is something similar to run old programs (from the Windows 95 days, etc.) in a posterior Windows version, called compatibility mode. Something like this in Drupal for old modules (while waiting -often a long time- for a possible new version of the module) would be great, of course.
For now, there is the following, just to update the code in modules:
"Please note that from Drupal 5.x on, the Code Review module has a mode that attempts to automate the process of checking modules for things that need to be updated between versions. While not perfect, it can greatly assist the process of updating modules."
(Updating your modules)
"For an automated module conversion solution, visit the Deadwood project. Deadwood will automatically make many of the changes listed in the conversion roadmap below and the related roadmaps for the menu, schema, and form APIs."
(Converting 5.x modules to 6.x)
"Bridge Layers" have been
"Bridge Layers" have been discussed many times before. Yes, at first glance they seem like a good solution. The problem is-- who is going to create and maintain them? They can be a huge amount of work complicated by the constant state of flux. And even if you could convince module maintainers it was worth it (and i don't think you ever could), I'd much rather they be perfecting and innovating their modules then wasting their precious spare time on maintaining backward compatibility.
===
"Give a man a fish and you feed him for a day.
Teach a man to fish and you feed him for a lifetime." -- Lao Tzu
"God helps those who help themselves." -- Benjamin Franklin
"Search is your best friend." -- Worldfallz
Well, I didn't say it would be easy...
... or even practical. I think the bridge would be part of core, and remap function calls and table references so that the old modules don't notice anything different. For situations where the API changes, the new modules produce their output first, then the API's get redefined to conform with the old versions, then the old modules are called. Compatibility mode is shut off by the admin when all old modules are upgraded.
You can probably guess that I'm not a real programmer and you're rotfl. I'm OK with that; I think this is worth considering, and I'm aware of some of the difficulties.
"...Teach a man to fish and he'll sit in a boat and drink beer all day."
I'm not rotfl-- i'm no
I'm not rotfl-- i'm no professional developer either so i'm hardly one to be judgmental, lol. I just don't see this happening. And part of core? No way-- never. It's Dries' vision that's encapsulated in the "drop is always moving" philosophy, I find it impossible to think he would even consider this for core.
IMO it's truly a waste of time (though it took me a while to come to agree with this philosophy). I think that time would be far much better spent improving and streamlining the upgrade process for users. That doesn't help developers much, but i've noticed it's the users that object to this philosophy more than developers.
In the end though it really doesn't matter what we think- it's just not likely to happen. I had come across some really good threads on the topic, but I didn't bookmark them and I can't seem to find them again now, lol.
===
"Give a man a fish and you feed him for a day.
Teach a man to fish and you feed him for a lifetime." -- Lao Tzu
"God helps those who help themselves." -- Benjamin Franklin
"Search is your best friend." -- Worldfallz
It's above me, anyway...
... and I don't know what good it does to keep bumping a six-month old topic. But here goes:
One reason that users object to the moving drop is because they are inconvenienced by the lack of modules. So on this level the bridge layer makes sense. Perhaps this does not need to be part of core, but could be a module.
It's probably easier to recode one module than to write this bridge, but it's probably easier to write the bridge than to recode all the modules. Perhaps each module developer could submit whatever code is needed for their module to run, and it's all assembled into an amalgamated module.
Of course, then some modules would never get upgraded, and the whole project is weakened. So a short-term gain is offset by a long-term loss. So it may turn out to be worse than just a waste of time.
I agree that this is not likely to happen, and we'll have to keep living with the gradual adoption of new releases. I just wanted to make sure that this concept is out there for discussion, and it appears that it is.
Hook adapter
Probably you mean a possible new module to run old modules with a different version of Drupal, acting as some kind of hook adapter between versions. Maybe a compatibility mode would be possible in this way. See:
Drupal API: Hooks
http://api.drupal.org/api/group/hooks/
But perhaps that wouldn't be enough for compatibility. I don't know, I'm not a Drupal developer.