12345678901234567890123456789012345678901234567890123456789012345678901234567890
Hi Thomas, great to see such an effort. Although roundcube works well, I would agree with you from what you've said in an earlier blog post that the rc codebase could use modernisation. Like you, Ive often though.. 'if only…'.
Some comments.
- PHP
The major disadvantage of PHP that has become evident in Roundcube is its short process lifetime requiring a full startup, database and IMAP connection+authentication and closing all connections again for every single HTTP request. Even FPM and persistent socket connections (which IMO are still unreliable and should be avoided) don't really help to overcome this.
The advantage of sticking with PHP certainly is that we can re-use some of the existing parts from the Roundcube codebase, such as the IMAP library, the plugin infrastructure etc. And in terms of deployment: PHP is everywhere and lots of sysadmins are familiar with deploying and maintaing and tweaking PHP applications.
- Python
Although Python isn't perfect for running as long-term processes either, there are some well developed frameworks out there (e.g. Twisted or Flask) which could be used to manage persistent connections between the client (think websockets) and storage backends. In addition to that, its easier to implement reactive applications with an asynchronous architecture.
Regarding deployment: the Python universe has some well established package repositories which make installation and deployment pretty easy. From a sysadmin point of view, I have no idea how easy or painful the maintenance of Python applications is. But the number of hosting providers offering Python is certainly lower that for PHP.
- Node.js
The new star on the web app sky. Its architecture seems to make node.js perfect for long-living server processes and maximum throughput. Although we could use Javascript, which we're all familiar with, the number of pitfalls to use that for server applications is quite high. The learning curve here shouldn't be underestimated.
And opinions certainly go into two distinct directions when in comes to deploying and scaling node applications. Installation should come easy as there's basically only npm for all the package management and everybody doing node is familiar with that.
OK, so question #1: what's your take on the programming language choice?
I would not switch from PHP to any other similar (scripting) language like Python, Ruby or Perl. PHP can hold its own, you just have to embrace modern PHP.
You can debate the pros and cons of each for ever, and never even agree, but in the end, it really doesnt matter that much in the context of roundcube. Id say the benefit of already being a PHP project outweighs most arguments
Now, node.js is a different story. I can see the benefits in theory. Or even Go, although thats probably a really big step to take. Im not sure if the benefits outweigh switching, I havent used node or go myself.
So here's question #2: what are your favorite javascript application libraries and frameworks? What experience did you make let's say with Angular or Backbone? What are the pitfalls?
I havent used any JS frameworks, but what i read doesnt really inspire confidence that they'll be a decade long stable platform. Which i think should be the primary goal, above anything else. Look at the Angular 1->2 debacle. Can you imagine having to rewrite all of the RC UI, which will be the bulk of the code in RCN every time some framework decides to break backwards compatibility. Or worse, you end up in an unsupported EOL version of said platform. Maybe backbone is different, and id love to hear what people think about the longevity of these frameworks.
And this is question #3: who's willing to help us draft the perfect protocol for this? I guess this should be a highly collaborative and iterative process and I'm keen on any input from people who are experienced with this type of task.
For most people I think this depends on what route RCN decides to take. Although it certainly is possible to contribute if you arent proficient in a specific language or framework, it sure helps.
Cor