Dear developers and list lurkers
The Roundcube project will celebrate its 10th anniversary this year and a decade is just right to stop for a while and let your thoughts flow into new directions. Some of you may already have read my random thoughts [1] about the future or Roundcube development and since I wrote this down, the idea of a fresh new successor to Roundcube has settled in my mind and won't go away that easily. The initial responses on that were exclusively positive and this encourages us to take it one step further now. Meanwhile I looked into many other applications, libraries, frameworks, apis and programming languages to find the best set of tools that would form a new top-noch webmail application for the next decade. A loose and admittedly rather limited collection has manifested on a wiki page [2] already.
The primary goal of rethinking Roundcube and webmail in general is certainly to improve the user experience for everyday communication. The second important aspect (at least for me as a developer) is to have a slick, structured and flexible framework to build new features and applications on top of. The current Roundcube codebase comes with a variety of technological and conceptual constraints which rule the ongoing development in a rather negative manner. Therefore thinking of a successor that is completely independent and unrelated to the current software stack is a tempting exercise which I'd like to invite you to.
As already outlined in the blog post [1], the new Roundcube should move most of the application logic from the server to the client. Browsers are way more capable than they've been 10 years ago and times of server-side template rendering are definitely over. Those who are familiar with the Roundcube codebase will immediately understand that such a change in paradigms also means a complete break of compatibility with all existing components of Roundcube, including plugins.
So let's free our mind from what we know about Roundcube and start over. This can even go as far as choosing something else than PHP for the server part which is supposed to be reduced to a simple wrapper for data exchange between the backend storage (IMAP et al) and the client application. Possible candidates are PHP (still), Python, Node.js. At least these are the ones I'm currently familiar with. So let's take a deeper look into these as I'm particularly interested in your opinions, also from a deployment and hosting perspective.
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.
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.
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?
The client part luckily doesn't need such a decision as there's only Javascript for this. But the variety of ways how to build a single-page web application and the number of frameworks helping you to do this is mind-boggling. I have to admit that in this regard, I'm one of the old fashioned web developers from the late 90ies and yet have to learn a lot about the brave new world of web development. I guess we can all agree that nobody wants to build a new web application framework from scratch as we did for Roundcube due to the lack of sophisticated solutions back in 2005. But choosing the right tools might be essential for the timeline and the success of Roundcube Next.
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?
Finally another big challenge we have when aiming to create the perfect webmail application is the way we make the client and the server talk together. We should carefully draft a proper data model and an according protocol for this. For the data model, I already tried to create a first draft in regards of what we already know the application should be capable of. This includes multi-account support, tagging, sharing and the extensibility for calendaring and other groupware-like tasks.
For the client-server communication, there are some interesting concepts out there but none of them actually seems to suit the purpose we're after. They either lack the concept of sharing (i.e. ACL) or do not account for collections such as multiple different address books one account my have access to. The candidates I'm referring to are: Nilas.com (former InboxApp), JMAP (by Fastmail) or the Gmail API (also to be supported by Dovecot). All are good approaches and generally point into the same direction but I couldn't say that one of them would already solve the use-cases we want to cover in Roundcube. And yes, we're seeking for a protocol and not an API [3] :-)
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.
Thank you all for reading and participating in this survey. I'm really excited to move this forward. All free and open source of course!
Best, Thomas
[1] https://roundcubeinbox.wordpress.com/2014/09/12/roundcube-next-if-we-would-s... [2] http://trac.roundcube.net/wiki/Roundcube_Next [3] https://vimeo.com/71278954
On 3/6/15 11:10 AM, Thomas Bruederli wrote:
Dear developers and list lurkers
The Roundcube project will celebrate its 10th anniversary this year and a decade is just right to stop for a while and let your thoughts flow into new directions. Some of you may already have read my random thoughts [1] about the future or Roundcube development and since I wrote this down, the idea of a fresh new successor to Roundcube has settled in my mind and won't go away that easily. The initial responses on that were exclusively positive and this encourages us to take it one step further now. Meanwhile I looked into many other applications, libraries, frameworks, apis and programming languages to find the best set of tools that would form a new top-noch webmail application for the next decade. A loose and admittedly rather limited collection has manifested on a wiki page [2] already.
The primary goal of rethinking Roundcube and webmail in general is certainly to improve the user experience for everyday communication. The second important aspect (at least for me as a developer) is to have a slick, structured and flexible framework to build new features and applications on top of. The current Roundcube codebase comes with a variety of technological and conceptual constraints which rule the ongoing development in a rather negative manner. Therefore thinking of a successor that is completely independent and unrelated to the current software stack is a tempting exercise which I'd like to invite you to.
As already outlined in the blog post [1], the new Roundcube should move most of the application logic from the server to the client. Browsers are way more capable than they've been 10 years ago and times of server-side template rendering are definitely over. Those who are familiar with the Roundcube codebase will immediately understand that such a change in paradigms also means a complete break of compatibility with all existing components of Roundcube, including plugins.
So let's free our mind from what we know about Roundcube and start over. This can even go as far as choosing something else than PHP for the server part which is supposed to be reduced to a simple wrapper for data exchange between the backend storage (IMAP et al) and the client application. Possible candidates are PHP (still), Python, Node.js. At least these are the ones I'm currently familiar with. So let's take a deeper look into these as I'm particularly interested in your opinions, also from a deployment and hosting perspective.
- 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?
The client part luckily doesn't need such a decision as there's only Javascript for this. But the variety of ways how to build a single-page web application and the number of frameworks helping you to do this is mind-boggling. I have to admit that in this regard, I'm one of the old fashioned web developers from the late 90ies and yet have to learn a lot about the brave new world of web development. I guess we can all agree that nobody wants to build a new web application framework from scratch as we did for Roundcube due to the lack of sophisticated solutions back in 2005. But choosing the right tools might be essential for the timeline and the success of Roundcube Next.
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?
Finally another big challenge we have when aiming to create the perfect webmail application is the way we make the client and the server talk together. We should carefully draft a proper data model and an according protocol for this. For the data model, I already tried to create a first draft in regards of what we already know the application should be capable of. This includes multi-account support, tagging, sharing and the extensibility for calendaring and other groupware-like tasks.
For the client-server communication, there are some interesting concepts out there but none of them actually seems to suit the purpose we're after. They either lack the concept of sharing (i.e. ACL) or do not account for collections such as multiple different address books one account my have access to. The candidates I'm referring to are: Nilas.com (former InboxApp), JMAP (by Fastmail) or the Gmail API (also to be supported by Dovecot). All are good approaches and generally point into the same direction but I couldn't say that one of them would already solve the use-cases we want to cover in Roundcube. And yes, we're seeking for a protocol and not an API [3] :-)
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.
Thank you all for reading and participating in this survey. I'm really excited to move this forward. All free and open source of course!
Best, Thomas
[1] https://roundcubeinbox.wordpress.com/2014/09/12/roundcube-next-if-we-would-s... [2] http://trac.roundcube.net/wiki/Roundcube_Next [3] https://vimeo.com/71278954 _______________________________________________ Roundcube Development discussion mailing list dev@lists.roundcube.net http://lists.roundcube.net/mailman/listinfo/dev
#1 : They're all fine, it really boils down to which language best fits
the mold of hosting a thin backend protocol server that you described.
I prefer node.js for all of the most recent web or socket based
applications we've developed due to it's simple concurrency and the
package manager (which is awesome). Using Node you could have plugins
published as packages, which are very simple for developers to build and
deploy. Also IMO a rich plugin architecture would spring more naturally
from Javascript as it's a more ubiquitous language for the people who
are already working with RC. Since Node is also hosting its own
(web/protocol) socket you can drop many dependencies like an http server
which fits in nicely with PaaS architectures for hosting. Though we
have never built anything nearly as complex as a webmail server
framework, Node is very capable and could be molded to do just that.
You might look at the Haraka SMTP server as an example of a plugin based
architecture in Node.
#2 : Not being much of a client side aficionado I can't really comment, but most of the work I have seen is done in backbone which does not impose a structure on the developer which has actually spawned other frameworks on top of backbone (e.g. option to roll your own). Also from what I have read Angular is still evloving so fast that newer versions are breaking backwards compatibility (e.g. version 1.X -> 2.0). Don't discount Ember.js either, it's probably the closest to MVC that server side folks understand.
#3 : Sorry, very busy father.
#X : PLEASE consider incorporating support for more than just SQL backends, and look at a data model on top of a NoSQL backend such as Cassandra or MongoDB. We leverage Cassandra more and more every day for multi-site application deployments (mostly in node.js) and having state persisted between data centers. It would be fantastic to see applications like RC start looking at the future of geo-distributed services and support those of us that host managed services that require 100% uptime across geographies.
Congrats on the 10 year anniversary!
On Fri, 6 Mar 2015 18:10:08 +0100 Thomas Bruederli thomas@roundcube.net wrote:
OK, so question #1: what's your take on the programming language choice?
What about Perl? IMHO Perl is still an option and the available packages on CPAN beats all other languages.
So here's question #2: what are your favorite javascript application
Plain jQuery
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.
Depends on chosen language.
Thanks a lot for all your responses so far! I'll summarize later.
On Fri, Mar 6, 2015 at 9:33 PM, Michael Rasmussen mir@datanom.net wrote:
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.
Depends on chosen language.
One remark to this, though: the goal of creating a proper protocol is to make independent of the technologies used on each side. Of course we have Javascript on one and and thus not relying too much on binary data streams might be a good idea but the designed protocol should primarily fit the purpose of the application and not the language.
Cheers, Thomas
On 15-03-08 10:02 AM, Thomas Bruederli wrote:
Thanks a lot for all your responses so far! I'll summarize later.
One remark to this, though: the goal of creating a proper protocol is to make independent of the technologies used on each side. Of course we have Javascript on one and and thus not relying too much on binary data streams might be a good idea but the designed protocol should primarily fit the purpose of the application and not the language.
one more comment on protocol:
going with some type of standardized protocol would seem better than creating a new one, if possible. and even better if the protocol is implemented in the imap server, so that roundcube doesn't need to deal with all of that (dovecot may be adding support for jmap in the future - https://www.heinlein-support.de/sites/default/files/dovecot_recent_and_futur...)
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
On 07 Mar 2015, at 09:43, Cor Bosman cor@xs4all.nl wrote:
12345678901234567890123456789012345678901234567890123456789012345678901234567890
Oops , sorry about that, that was a copy/paste artifact.
Cor
Hi,
Am 07.03.2015 um 14:50 schrieb Cor Bosman:
On 07 Mar 2015, at 09:43, Cor Bosman cor@xs4all.nl wrote:
12345678901234567890123456789012345678901234567890123456789012345678901234567890
Oops , sorry about that, that was a copy/paste artifact.
Funny to see. I do exactly the same in roundcube quite often in order to keep the maximum width of my messages below 76 chars. I guess that this is was the purpose of the numbers for you as well?
It would be awesome to have an easy way for automated linebreaks after e.g. 76 chars.
cheers, jonas
Dear Thomas and RC-Dev team.
First of all thank you for all your time and leisure for that cool tool.
I have take a look into claws-mail to use it for the desktop instead of a browser based solution. Mainly because the gpg/smime handling is much harder then in a native client. I have also take a look into the project which ports claws-mail to qt5, but your mail opens new options ;-)
I write this to ask the question:
What are the target peoples for the new RC? [ ] Desktop User [ ] Mobile User [ ] "Enterprise" User
I also think that php with JS or JS only is the current way for browser solutions.
I like your suggestion on [1]
...
one suggested by Inbox. ...
I would like to see in the new RC a proper "privacy" handling (gpg,smime,...), which is of course not easy.
jm2c
BR Aleks
Am 06-03-2015 18:10, schrieb Thomas Bruederli:
Dear developers and list lurkers
The Roundcube project will celebrate its 10th anniversary this year and a decade is just right to stop for a while and let your thoughts flow into new directions. Some of you may already have read my random thoughts [1] about the future or Roundcube development and since I wrote this down, the idea of a fresh new successor to Roundcube has settled in my mind and won't go away that easily. The initial responses on that were exclusively positive and this encourages us to take it one step further now. Meanwhile I looked into many other applications, libraries, frameworks, apis and programming languages to find the best set of tools that would form a new top-noch webmail application for the next decade. A loose and admittedly rather limited collection has manifested on a wiki page [2] already.
The primary goal of rethinking Roundcube and webmail in general is certainly to improve the user experience for everyday communication. The second important aspect (at least for me as a developer) is to have a slick, structured and flexible framework to build new features and applications on top of. The current Roundcube codebase comes with a variety of technological and conceptual constraints which rule the ongoing development in a rather negative manner. Therefore thinking of a successor that is completely independent and unrelated to the current software stack is a tempting exercise which I'd like to invite you to.
As already outlined in the blog post [1], the new Roundcube should move most of the application logic from the server to the client. Browsers are way more capable than they've been 10 years ago and times of server-side template rendering are definitely over. Those who are familiar with the Roundcube codebase will immediately understand that such a change in paradigms also means a complete break of compatibility with all existing components of Roundcube, including plugins.
So let's free our mind from what we know about Roundcube and start over. This can even go as far as choosing something else than PHP for the server part which is supposed to be reduced to a simple wrapper for data exchange between the backend storage (IMAP et al) and the client application. Possible candidates are PHP (still), Python, Node.js. At least these are the ones I'm currently familiar with. So let's take a deeper look into these as I'm particularly interested in your opinions, also from a deployment and hosting perspective.
- 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?
The client part luckily doesn't need such a decision as there's only Javascript for this. But the variety of ways how to build a single-page web application and the number of frameworks helping you to do this is mind-boggling. I have to admit that in this regard, I'm one of the old fashioned web developers from the late 90ies and yet have to learn a lot about the brave new world of web development. I guess we can all agree that nobody wants to build a new web application framework from scratch as we did for Roundcube due to the lack of sophisticated solutions back in 2005. But choosing the right tools might be essential for the timeline and the success of Roundcube Next.
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?
Finally another big challenge we have when aiming to create the perfect webmail application is the way we make the client and the server talk together. We should carefully draft a proper data model and an according protocol for this. For the data model, I already tried to create a first draft in regards of what we already know the application should be capable of. This includes multi-account support, tagging, sharing and the extensibility for calendaring and other groupware-like tasks.
For the client-server communication, there are some interesting concepts out there but none of them actually seems to suit the purpose we're after. They either lack the concept of sharing (i.e. ACL) or do not account for collections such as multiple different address books one account my have access to. The candidates I'm referring to are: Nilas.com (former InboxApp), JMAP (by Fastmail) or the Gmail API (also to be supported by Dovecot). All are good approaches and generally point into the same direction but I couldn't say that one of them would already solve the use-cases we want to cover in Roundcube. And yes, we're seeking for a protocol and not an API [3] :-)
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.
Thank you all for reading and participating in this survey. I'm really excited to move this forward. All free and open source of course!
Best, Thomas
[1] https://roundcubeinbox.wordpress.com/2014/09/12/roundcube-next-if-we-would-s... [2] http://trac.roundcube.net/wiki/Roundcube_Next [3] https://vimeo.com/71278954 _______________________________________________ Roundcube Development discussion mailing list dev@lists.roundcube.net http://lists.roundcube.net/mailman/listinfo/dev
I know I'm a bit late to the conversation but I still wanted to add my two cents. While I think a fresh start for Roundcube is a good idea I think its still a bit premature to be talking about what should be used to develop the new system when there isn't a clear set of goals for what Roundcube Next should include. So far the only goals I've seen laid out are:
Those are all good development goals but in my mind that isn't necessarily enough to validate re-coding the whole system. While its been touched on we don't have any written goals like adding multi-account support, GPG/PGP encryption support, or any of the other long outstanding feature requests[1] that aren't possible with the current system. Now seems like the perfect time to define what functionality we want out of a new system so we can make better decisions about what frameworks and languages to use.
Now on to the questions at hand.
#1.
I think the question that needs to be asked is: Who is the target audience of Roundcube Next going to be? That in my mind has a profound effect on what language is used since it will limit who can simply setup and install Roundcube without advanced knowledge. Because Roundcube currently uses PHP it has allowed almost anyone to grab a copy of Roundcube and set it up on any shared host, bundle it with another system that has PHP like cPanel or to go all out and do a custom install that supports hundreds of thousands of users. That flexibility has allowed Roundcube to become ubiquitous as a webmail option. With that in mind I'll layout my opinions on each language.
PHP - While PHP is very flexible and could allow the majority of the current Roundcube users to continue using Roundcube with the next version it handles persistent connections badly. While it is improving I don't know that I'd want to bet a rebuild on it. To make matters worse all of the approaches to handling persistent connections that I've seen require a server to be setup in a special way which could make it even harder for people to be able to setup a Roundcube system that would run along side other applications.
Python - I know the least about Python out of the three language choices so I can't really comment on its capabilities. I think its fair to say that using Python would limit Roundcube to users with advanced server knowledge to be able to setup the correct Python environment.
Node.js - Unlike PHP Node is very good at handling persistent connections and would allow Roundcube a lot of flexibility since the web server could be written for the exact needs of the new system. One of my concerns with using Node is performance, while Node performs well it requires a lot of resources to do it. Some of the Node applications I've seen remind me of the early days of Roundcube where Apache would max out or hang on IMAP connections causing performance bottlenecks. While Node.js isn't as common as PHP I'm seeing it showing up in more places and I could see it becoming more ubiquitous in the coming years. In my mind Node.js is the best candidate if Roundcube Next is to have any form of persistent connection support.
#2
If Roundcube Next is going to have the overhead of persistent connections with a server side data model I would like the ability to install just the server side of Roundcube and use the data model as an API to build mail support into other applications without having to use any of the Roundcube frontend code. The data model IMO needs to sit on top of standard IMAP without any special mail server requirements, but it would be neat if parts of the data model could be switched out for special mail server components when available for better performance. As for frontend libraries I haven't had a chance to be able to play with enough of them to have any useful insight to what is best.
#3
I would love to help however possible! Although I'm not sure what the best way to collaborate on something like a data model would be, I think the first step is to defined the features that we want to include in the new system.
[1] http://trac.roundcube.net/report/10?sort=created&asc=1&page=1
Thanks, -Scott Kidder
On Mar 6, 2015, at 10:10 AM, Thomas Bruederli wrote:
Dear developers and list lurkers
The Roundcube project will celebrate its 10th anniversary this year and a decade is just right to stop for a while and let your thoughts flow into new directions. Some of you may already have read my random thoughts [1] about the future or Roundcube development and since I wrote this down, the idea of a fresh new successor to Roundcube has settled in my mind and won't go away that easily. The initial responses on that were exclusively positive and this encourages us to take it one step further now. Meanwhile I looked into many other applications, libraries, frameworks, apis and programming languages to find the best set of tools that would form a new top-noch webmail application for the next decade. A loose and admittedly rather limited collection has manifested on a wiki page [2] already.
The primary goal of rethinking Roundcube and webmail in general is certainly to improve the user experience for everyday communication. The second important aspect (at least for me as a developer) is to have a slick, structured and flexible framework to build new features and applications on top of. The current Roundcube codebase comes with a variety of technological and conceptual constraints which rule the ongoing development in a rather negative manner. Therefore thinking of a successor that is completely independent and unrelated to the current software stack is a tempting exercise which I'd like to invite you to.
As already outlined in the blog post [1], the new Roundcube should move most of the application logic from the server to the client. Browsers are way more capable than they've been 10 years ago and times of server-side template rendering are definitely over. Those who are familiar with the Roundcube codebase will immediately understand that such a change in paradigms also means a complete break of compatibility with all existing components of Roundcube, including plugins.
So let's free our mind from what we know about Roundcube and start over. This can even go as far as choosing something else than PHP for the server part which is supposed to be reduced to a simple wrapper for data exchange between the backend storage (IMAP et al) and the client application. Possible candidates are PHP (still), Python, Node.js. At least these are the ones I'm currently familiar with. So let's take a deeper look into these as I'm particularly interested in your opinions, also from a deployment and hosting perspective.
- 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?
The client part luckily doesn't need such a decision as there's only Javascript for this. But the variety of ways how to build a single-page web application and the number of frameworks helping you to do this is mind-boggling. I have to admit that in this regard, I'm one of the old fashioned web developers from the late 90ies and yet have to learn a lot about the brave new world of web development. I guess we can all agree that nobody wants to build a new web application framework from scratch as we did for Roundcube due to the lack of sophisticated solutions back in 2005. But choosing the right tools might be essential for the timeline and the success of Roundcube Next.
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?
Finally another big challenge we have when aiming to create the perfect webmail application is the way we make the client and the server talk together. We should carefully draft a proper data model and an according protocol for this. For the data model, I already tried to create a first draft in regards of what we already know the application should be capable of. This includes multi-account support, tagging, sharing and the extensibility for calendaring and other groupware-like tasks.
For the client-server communication, there are some interesting concepts out there but none of them actually seems to suit the purpose we're after. They either lack the concept of sharing (i.e. ACL) or do not account for collections such as multiple different address books one account my have access to. The candidates I'm referring to are: Nilas.com (former InboxApp), JMAP (by Fastmail) or the Gmail API (also to be supported by Dovecot). All are good approaches and generally point into the same direction but I couldn't say that one of them would already solve the use-cases we want to cover in Roundcube. And yes, we're seeking for a protocol and not an API [3] :-)
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.
Thank you all for reading and participating in this survey. I'm really excited to move this forward. All free and open source of course!
Best, Thomas
[1] https://roundcubeinbox.wordpress.com/2014/09/12/roundcube-next-if-we-would-s... [2] http://trac.roundcube.net/wiki/Roundcube_Next [3] https://vimeo.com/71278954 _______________________________________________ Roundcube Development discussion mailing list dev@lists.roundcube.net http://lists.roundcube.net/mailman/listinfo/dev
On Thu, Mar 12, 2015 at 11:48 AM, Scott Kidder skaero@gmail.com wrote:
I know I'm a bit late to the conversation but I still wanted to add my two cents. While I think a fresh start for Roundcube is a good idea I think its still a bit premature to be talking about what should be used to develop the new system when there isn't a clear set of goals for what Roundcube Next should include. So far the only goals I've seen laid out are:
- Move to a flexible framework to reduce Roundcube specific framework code
- Move more code like templates to the client side
- Move to a persistent based data connection
Those are all good development goals but in my mind that isn't necessarily enough to validate re-coding the whole system. While its been touched on we don't have any written goals like adding multi-account support, GPG/PGP encryption support, or any of the other long outstanding feature requests[1] that aren't possible with the current system. Now seems like the perfect time to define what functionality we want out of a new system so we can make better decisions about what frameworks and languages to use.
Hello Scott
Thanks for pointing this out. I admit that the "requirements" part of the story has been neglected a bit so let's try to look at this a little bit closer. The primary goals are still to improve the user experience and to facilitate the development environment. Looking at the list of feature requests, there are a few that are frequently requested but are difficult to be implemented with the current architecture:
Most of them (conversation view, tabbed interface, browser history, chat integration) require fundamental change in how the client is built and interacts with the server. Current Roundcube renders most screens on the server and loads the individual parts into iframes. Same for submitting data to the client (e.g. when composing messages). This mostly goes through regular form submissions to (hidden) iframes. You can imagine all sorts of problems that come with this. For example it makes it hard (or at least very inefficient) to add another message to a conversation view or properly handle browser history when iframes are involved. With complete page reloads as we have them in current Roundcube, the maintenance of application state, like for a chat widget, becomes very challenging and again inefficient. This is where the suggestion for widget-based and client-side rendering of the UI mostly comes from.
Further features like multi-account support or tags call for a proper application-wide data model that can be used for widget-based rendering and synchronization between client and server. Moving the application logic to the client and reducing the client-server interaction to a synchronization-based approach also helps to make the application more reactive. Our current application logic is spread over both parts often requiring the client to "lock" the UI and wait for the server to process a request and return with new commands the client shall execute after. That's not how web applications are supposed to work in 2015.
And finally there's the increasing demand for encryption support. As a matter of the fact that servers and connections cannot be trusted, the common agreement is that encryption should be done on the client. Yet another example how our current server-side rendering jeopardizes a proper and efficient implementation of encryption features and one more argument for letting the client convert a given data model (coming either from the server or from an encryption component) into a view.
While this still isn't a complete list of goals, I hope it illustrates the challenges we're facing with the current architectural constraints and perfectly justifies the call for a major refactoring of the application design. Almost every consideration how to approach the most frequent feature requests comes down to the requirement of changing the client-server interaction in a fundamental way. And this IMO comes very close to a complete restart which gives us maximum freedom to make the right decisions.
We'll try to collect a more concrete list of features we want to build into a possible Roundcube Next product. This can then be divided into a more tangible roadmap and eventually find its way into a crowd-funding campaign. But let's take one step at a time.
Kind regards, Thomas
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512
Hello,
Thanks for making such awesome project available to the rest of the world ;)
I love the idea and agree on the server-client architecture part, but building such complex software one should also think about scalability. I currently have no idea, who are the main users of RC, but we should assume that the new solution should work flawlessly with thousands of mailboxes accessed simultaneously.
NB: Since I'm a sysadmin for a hosting company I'm writing everything from the hosting provider view.
NBB: I might sometimes use a bit of imperious/authoritarian phraseology (should, must etc), so please don't be offended, it's just like I write
NBBB: Also, I have ended a some sentences with question mark, I don't want answers for those "questions", these are more like parts "what if" style things ergo my brain going into cosmos of ideas.
### Back-end
To be honest, connection caching isn't really an issue for me, there are utils specifically designed for that (local imapproxy), so are there good ways to fasten the authentication process (local Nginx IMAP proxy with HTTP authentication to Nginx http server with custom auth script, makes it also possible to load balance). Yes of course it would be better, if back-end could do those things, but the question is, that can we do it better and with less performance and development time cost than existing software? Or instead it we could use this time to make a documentation how create a good performance RC setup using the existing technologies?
Creating such complex back-end one also should take in mind that it should be possible to load balance it - run multiple back-end servers which communicate with each other. Keep in mind, that in the future the backend could be directly used by mobile apps, desktop clients, user made scripts, or even by your refrigerator - that's one of the point of making separate back-end server.
Back end should be extendable by plug-ins and this raises a lot of questions. Someone just don't want the back-end with by default calendar support. Some even don't use address-books. Maybe someone wants to make a plug-in to create friends list, how will actions and data described for the protocol for that plug-in? How strict will be? How to avoid protocol conflicts?
Also, as for data caching (eg Redis) one should think about the stored data. Is it mostly key-value based or does it require complex relations 1? What data will be cached?
### Back-end language
OK, so question #1: what's your take on the programming language choice?
The eternal question of which language is the best.
PHP has good enough performance, sorry to disappoint You, but "good enough" just don't do on large systems. You have to have best performance You can get. Also, my personal opinion is (as a long time developer), that if I'd had a time machine the programming language which I would make disappear is PHP (next one will be of course Javascript :).
I'd go with Python. Easy to write (and IMHO more supported than Node.js) and in my experience it runs long-term processes spotless unless You write it bad. Most *nix systems have it on by default as dependencies for providing any web services at all (same with Perl). Plug-ins could easily be installed as Python Packages using pip. Lots of well documented and stable libraries for network communication with protocol definitions. I have been PHP dev longer than Python dev and I'd prefer Python any time. Some say Python is hard to learn (yes, we have many PHP devs out there, more than Python's). IMHO a good dev can write any language and also, we can always make a good documentation.
Node.js - sorry, it might be good but first, it's javascript - who even uses javascript for back-end and second, it seems too hipster for old me. Usually needs a separate installation unless you are providing as part of hosting service.
Large number of hosting providers do not allow long lasting scripts for their clients (in virtual/shared hosting). Max execution times are usually about 5 minutes (10 mins max). Therefore running any server applications in virtual/shared hosting is not possible (most of common clients use shared hosting). So taking this in consideration the "PHP is everywhere" is quite useless in my opinion, since You probably need VPS for client-server application anyway and there You can install anything You want.
On the other hand, most of clients use the webmail provided by hosting provider (who has capabilities for complex set-ups).
### Front-end
For frameworks I would recommend Backbone.js for structure and data modeling and Twitter Bootstrap as UI toolkit.
Does keeping back-end and front-end separate would also mean that every plug-in developer must release the back-end and front-end version of their plug-in or will the protocol support UI data transportation (eg client will request UI data from back-end and then caches it)?
### Data model
Creating the data model should we take in consideration that maybe there are people, who only would like to use the company's global calendar and address-book without any e-mail? Just log in to see company's contacts. Maybe they want to add personal mailbox later? The model should be abstract as possible, but extendable by various plug-ins. Even authentication methods (IMAP, HTTP, Kerberos, government issued ID-card etc) should be provided as plug-ins.
The only thing that is certain, is that we have some abstract "client" (not a physical entity) what will have all the provided services (mailboxes, calendars, contacts, identities?, chat messaging system etc).
Every client can have one or more users (company "clients" can have more than one for example). Users with authentication and authorization methods defined by specific plug-ins designated to those actions and handled via strictly defined User API. We also should keep in mind that the required data should be as little as possible, since many auth protocols don't support mother maiden name or even address. Strictly data required for authentication and authorization.
### Protocol
For the sake of simplicity, I think that using HTTP protocol would be the easies way to go. Yes, it's overhead, but on the other side it's easy to handle and develop on. And for the architecture REST is a good way to go. Well documented, easy to use.
Best regards, Günter Kits
Am 17.03.2015 um 19:40 schrieb Günter Kits:
Hello,
Thanks for making such awesome project available to the rest of the world ;)
I love the idea and agree on the server-client architecture part, but building such complex software one should also think about scalability. I currently have no idea, who are the main users of RC, but we should assume that the new solution should work flawlessly with thousands of mailboxes accessed simultaneously
well, it should also work on small setups just wanting a lightwight webmail with at less as possible dependencies and out-of-the-box also on cheap shared hosting webspaces
even if a lot of people pretend everybody is using his browser as mail client it's fact that for a lot of users webmail is just a way to access their mails if they are away from home and the smartphone battery is empty
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512
Hello,
On 17.03.2015 20:45, Reindl Harald wrote:
well, it should also work on small setups just wanting a lightwight webmail with at less as possible dependencies and out-of-the-box also on cheap shared hosting webspaces
even if a lot of people pretend everybody is using his browser as mail client it's fact that for a lot of users webmail is just a way to access their mails if they are away from home and the smartphone battery is empty
Yes, agreed, that's why I also stated this:
Large number of hosting providers do not allow long lasting scripts for their clients (in virtual/shared hosting). Max execution times are usually about 5 minutes (10 mins max). Therefore running any server applications in virtual/shared hosting is not possible (most of common clients use shared hosting). So taking this in consideration the "PHP is everywhere" is quite useless in my opinion, since You probably need VPS for client-server application anyway and there You can install anything You want.
Best regards, Günter Kits
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512
Hello,
It really goes to offtoppic, but there are many (thousands) clients using webmail for daily basis for their work. Mostly older persons. Some of them even use SquirrelMail since they are used to it.
I'm saying this that for most of daily users webmail isn't just a temporary solution, they use it to work.
Best regards, Günter Kits
Am 17.03.2015 um 20:04 schrieb Günter Kits:
It really goes to offtoppic, but there are many (thousands) clients using webmail for daily basis for their work. Mostly older persons. Some of them even use SquirrelMail since they are used to it.
I'm saying this that for most of daily users webmail isn't just a temporary solution, they use it to work
replace "daily users" with home / private usage and many of them setup their roundcube on a cheap to free, small webspace at their own and would switch to whatever other solution if this is no longer possible or just stay at a unsupported, outdated version if roundcube written in PHP would be abondened
for business users Outlook, Apple Mail, iPhone and Android with a native client is the typical usecase and webmail the exception
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512
Hello,
Reindl, I'm not tying to say that "small installations" are bad or useless etc. I'm trying to make a point that if we go with server-client solution, then it might be impossible for a lot of shared hosting users to use RC. Which is IMHO bad.
Best regards, Günter Kits
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512
Hello,
For some weird reason, some parts of the PHP section went missing from my paste. I'll post em here:
Yes, PHP is quite known and there are many devs, but IMHO it really doesn't fit for the back-end (server) side of the software. Yes, it's easy to develop, but also easy to waste countless hours of cursing :)
I agree that usually PHP has good enough performance for small systems, but there are a lot of blog posts about sorry to disappoint You, but "good enough" just don't do on large systems. You have to have best performance You can get. Also, my personal opinion is (as a long time developer), that if I'd had a time machine the programming language which I would make disappear is PHP (next one will be of course Javascript :).
Best regards, Günter Kits
Am 17.03.2015 um 19:50 schrieb Günter Kits:
For some weird reason, some parts of the PHP section went missing from my paste. I'll post em here:
Yes, PHP is quite known and there are many devs, but IMHO it really doesn't fit for the back-end (server) side of the software. Yes, it's easy to develop, but also easy to waste countless hours of cursing :)
I agree that usually PHP has good enough performance for small systems, but there are a lot of blog posts about sorry to disappoint You, but "good enough" just don't do on large systems. You have to have best performance You can get. Also, my personal opinion is (as a long time developer), that if I'd had a time machine the programming language which I would make disappear is PHP (next one will be of course Javascript :)
well, that's all fine
on the other hand if i have a reasonable PHP setup and know how to configure and secure a PHP server i would not want a webmail written with node.js, python or whatever nor setup a dedicated server just for webmail
in other words: a roundcube generation not written in PHP would be replaced as fast as Horde a few years ago was replaced after the switch to pear and making RPM packaging way too expensive
Hello Devs,
in other words: a roundcube generation not written in PHP would be replaced
as fast as Horde a few years ago was replaced after the switch to pear and making RPM packaging way too expensive
As an IT admin of some hosting companies, I agree with this. The most widely used setup is with PHP. This is why scripts like Joomla, Wordpress and phpMyAdmin are so popular.
-- Victor Benincasa
On Tue, Mar 17, 2015 at 3:54 PM, Reindl Harald h.reindl@thelounge.net wrote:
Am 17.03.2015 um 19:50 schrieb Günter Kits:
For some weird reason, some parts of the PHP section went missing from my paste. I'll post em here:
Yes, PHP is quite known and there are many devs, but IMHO it really doesn't fit for the back-end (server) side of the software. Yes, it's easy to develop, but also easy to waste countless hours of cursing :)
I agree that usually PHP has good enough performance for small systems, but there are a lot of blog posts about sorry to disappoint You, but "good enough" just don't do on large systems. You have to have best performance You can get. Also, my personal opinion is (as a long time developer), that if I'd had a time machine the programming language which I would make disappear is PHP (next one will be of course Javascript :)
well, that's all fine
on the other hand if i have a reasonable PHP setup and know how to configure and secure a PHP server i would not want a webmail written with node.js, python or whatever nor setup a dedicated server just for webmail
in other words: a roundcube generation not written in PHP would be replaced as fast as Horde a few years ago was replaced after the switch to pear and making RPM packaging way too expensive
Roundcube Development discussion mailing list dev@lists.roundcube.net http://lists.roundcube.net/mailman/listinfo/dev
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512
Hello,
I don't know, if I have understood Thomas' idea correctly, but IMHO client-server application means that server part (back-end) listens on the server ergo is a daemon which means You no longer have to initiate IMAP connection, login etc on every refresh You make in browser. And the client is the client (browser, desktop client, mobile app, your something script somewhere etc) which speaks to the server using the defined protocol.
Thomas, could You please clarify that part?
Yes, you could achieve this with PHP on some shared hosting servers, but that would mean that at some time the limits will be hit and Your daemon script will be killed (even during some important operation). This can happen at the moment too (eg searching too big mailbox and limits hit). But then the whole client-server architecture would be pointless. It's also a good and fast way to fill the limit of maximum allowed processes.
If we'd go with PHP that would mean we use PHP just as library (not as server) and IMAP client part of the software, like now. Just move more stuff (eg whole templating, sorting and filtering operations maybe etc) to the front-end side and use AJAX (via JS front-end libs) to communicate and that's it. Basically same architecture as current RC but more todayish (we'd use awesome front-end thingies).
Yes, You could run PHP application as a daemon but: 1) the language is not designed for that 2) most of shared hosting providers will kill your scripts after 5 to 10 mins (when max execution time hits). After that You rerun the PHP part on the first request, which means that all the connections to data layer servers (database, redis etc), IMAP servers and other third party servers (authentication & authorization) must be reconnected.
Best regards, Günter Kits
On 17.03.2015 21:29, Victor Benincasa wrote:
Hello Devs,
in other words: a roundcube generation not written in PHP would be replaced
as fast as Horde a few years ago was replaced after the switch to pear and making RPM packaging way too expensive
As an IT admin of some hosting companies, I agree with this. The most widely used setup is with PHP. This is why scripts like Joomla, Wordpress and phpMyAdmin are so popular.
-- Victor Benincasa
I don't know, if I have understood Thomas' idea correctly, but IMHO client-server application means that server part (back-end) listens on the server ergo is a daemon which means You no longer have to initiate IMAP connection, login etc on every refresh You make in browser. And the client is the client (browser, desktop client, mobile app, your something script somewhere etc) which speaks to the server using the defined protocol.
i'm pretty sure thomas didn't mean that and instead meant a stateless JSON protocol with most of the logic in the client application and the server doing less work overall.
apart from the mail interactions, a basic webmail server wouldn't have to do too much apart from getting and saving user preferences. a more advanced setup might require proxying/converting requests to/from CalDAV and CardDAV servers. For a CalDAV proxy, PHP would be a very good language choice as the sabre/dav library handles a lot of the really heinous bits of the ICS format for you.
the mail interactions could be offloaded to a completely different project. Dovecot has announced gmail-api support, and has also floated the idea of supporting JMAP. If the rouncube client can just call a standard JSON API to get mail from the imap server, then roundcube doesn't need to worry about that portion at all (which would be a very good thing - indexing/caching/etc would all be handled by the imap server)
even if dovecot/courier/etc don't directly support any JSON APIs, a separate daemon could be produced to do the proxying/conversion. it need not be part of the roundcube project (there's already an IMAP->JMAP gateway/proxy https://github.com/jmapio/jmap-perl/blob/master/bin/server.pl). for hosting situations where only php is allowed, a non-daemonized version proxy layer could be written in php.
plugins would not neccessarily need to conform to any protocol standard, they'd just need to come with some client js code and some type of server code that could get/set JSON data as the plugin needed.
ie, you have a javascript client calling:
https://mydomain/api/mail # mail API https://mydomain/api/settings # roundcube user settings https://mydomain/api/calendar # CalDAV proxy https://mydomain/api/contacts # CardDAV proxy https://mydomain/api/plugin/myplugin # myplugin
it's easy to reverse proxy content in a webserver or load balancer, so any large hosting company could proxy the different API services as needed. a smaller host might only need to proxy api/mail (ie, if dovecot were providing the mail api services)
the more the backend components are separated, the easier is it for everyone to find optimal ways to run it in their environment.
Am 17.03.2015 um 22:10 schrieb Brendan:
the mail interactions could be offloaded to a completely different project. Dovecot has announced gmail-api support, and has also floated the idea of supporting JMAP. If the rouncube client can just call a standard JSON API to get mail from the imap server, then roundcube doesn't need to worry about that portion at all (which would be a very good thing - indexing/caching/etc would all be handled by the imap server)
but then you have to support different servers which means a ton of combinations to test and debug - IMAP is a standard protocol
even if dovecot/courier/etc don't directly support any JSON APIs, a separate daemon could be produced to do the proxying/conversion. it need not be part of the roundcube project (there's already an IMAP->JMAP gateway/proxy https://github.com/jmapio/jmap-perl/blob/master/bin/server.pl). for hosting situations where only php is allowed, a non-daemonized version proxy layer could be written in php.
again: you would have a dozen of different roundcubes
the more the backend components are separated, the easier is it for everyone to find optimal ways to run it in their environment
flexible != easy
what most people expect is "unpack a tarball in a webhost, enter username and password, done" - you can say that you don't care for that expectation and that these users are no longer you target, that may be fine from your sie but at the sam emoment would mean lose a large part of the userbase
if roundcube goes that way: bye
the mail interactions could be offloaded to a completely different project. Dovecot has announced gmail-api support, and has also floated the idea of supporting JMAP. If the rouncube client can just call a standard JSON API to get mail from the imap server, then roundcube doesn't need to worry about that portion at all (which would be a very good thing - indexing/caching/etc would all be handled by the imap server)
but then you have to support different servers which means a ton of combinations to test and debug - IMAP is a standard protocol
as it the goal for JMAP (http://jmap.io/). and the Gmail-API is a semi-standard protocol as well. dovecot supporting one or both will help them become more standardized.
and despite being a standard, there is quite a bit of variability among IMAP servers. i see new IMAP servers (mostly on the windows side) that are broken in different ways every week.
even if dovecot/courier/etc don't directly support any JSON APIs, a separate daemon could be produced to do the proxying/conversion. it need not be part of the roundcube project (there's already an IMAP->JMAP gateway/proxy https://github.com/jmapio/jmap-perl/blob/master/bin/server.pl). for hosting situations where only php is allowed, a non-daemonized version proxy layer could be written in php.
again: you would have a dozen of different roundcubes
no, you'd have one roundcube, with a dependency on a new standardized JSON mail access protocol.
both JMAP and gmail-API aim to eliminate some of the pain involved in using IMAP for webmail. roundcube *could* try and create a new standard, or go with a proprietary protocol, but why reinvent the wheel? part of the idea being redoing roundcube is to take advantage of developments that have come up since the project was started - these two new access protocols are two such recent developments.
the more the backend components are separated, the easier is it for everyone to find optimal ways to run it in their environment
flexible != easy what most people expect is "unpack a tarball in a webhost, enter username and password, done" - you can say that you don't care for that expectation and that these users are no longer you target, that may be fine from your sie but at the sam emoment would mean lose a large part of the userbase
it's completely possible to distribute a version of roundcube that just works if you untar it, while still allowing people to choose to do more advanced things with it (by disabling/replacing/overriding stock components/config). such a thing would not be a unique concept in the software world.
On 3/17/15 4:16 PM, Reindl Harald wrote:
Am 17.03.2015 um 22:10 schrieb Brendan:
the mail interactions could be offloaded to a completely different project. Dovecot has announced gmail-api support, and has also floated the idea of supporting JMAP. If the rouncube client can just call a standard JSON API to get mail from the imap server, then roundcube doesn't need to worry about that portion at all (which would be a very good thing - indexing/caching/etc would all be handled by the imap server)
but then you have to support different servers which means a ton of combinations to test and debug - IMAP is a standard protocol
even if dovecot/courier/etc don't directly support any JSON APIs, a separate daemon could be produced to do the proxying/conversion. it need not be part of the roundcube project (there's already an IMAP->JMAP gateway/proxy https://github.com/jmapio/jmap-perl/blob/master/bin/server.pl). for hosting situations where only php is allowed, a non-daemonized version proxy layer could be written in php.
again: you would have a dozen of different roundcubes
the more the backend components are separated, the easier is it for everyone to find optimal ways to run it in their environment
flexible != easy
what most people expect is "unpack a tarball in a webhost, enter username and password, done" - you can say that you don't care for that expectation and that these users are no longer you target, that may be fine from your sie but at the sam emoment would mean lose a large part of the userbase
if roundcube goes that way: bye
Roundcube Development discussion mailing list dev@lists.roundcube.net http://lists.roundcube.net/mailman/listinfo/dev
I'm not sure you understand what is being proposed. The type of
software that is being discussed would be a package that would be as
simple as you're describing to install and configure, probably easier.
The abstraction and protocol in this discussion would be between the
client and the roundcube server, not between the roundcube server and
something else. A basic "Roundcube Next" server would be a basic system
like the current roundcube with connectivity to IMAP, and SQL backend.
The newness of the system would be based around how the client and
server communicate, which would implement a client side Javascript
framework to render HTML and a server side that provides some sort of
API or protocol that the client could communicate with. The possibility
of the server component interacting with multiple types of protocols
such as JMAP and Gmail API is just like old Roundcube supporting POP3
and IMAP, which is exciting as they really are the future of messages so
I am not sure why there is so much fear over this concept. The entire
point of this project is to simplify development of this amazing
software platform, not hinder someone from easily installing the
software. As a Systems Engineer and Developer for an ISP I welcome all
the proposed ideas, and hope for a platform that can scale by separating
components, deliver performance, high availability, various data storage
backends, and a dynamic framework for simple and powerful integration of
external components.
If 'bye' is your answer to progress then good riddance.
Am 18.03.2015 um 02:57 schrieb List:
I'm not sure you understand what is being proposed
surely
something completly different and incompatible as what we know now as "roundcube" which means for me if it requires additional server side technology besides PHP, MySQL and a IMAP server and don't run just in a mod_php environment or brings a complete different UI it would be no longer used here
i had in the past user support calls because renaming a button from "save images" to "upload images" and hence not really like major changes at all as well as the attitude "now that we are ready we start from scratch"
On 15-03-18 02:28 AM, Reindl Harald wrote:
something completly different and incompatible as what we know now as "roundcube" which means for me if it requires additional server side technology besides PHP, MySQL and a IMAP server and don't run just in a mod_php environment or brings a complete different UI it would be no longer used here
i had in the past user support calls because renaming a button from "save images" to "upload images" and hence not really like major changes at all as well as the attitude "now that we are ready we start from scratch"
i would assume that the old roundcube-1.1 source would continue to exist and be available for patches/bugfixes. it would just be that the new version of roundcube would be where most of the development time and new features would shift to.
On Tue, 17 Mar 2015 14:10:10 -0700 Brendan brendan@tucows.com wrote:
i'm pretty sure thomas didn't mean that and instead meant a stateless JSON protocol with most of the logic in the client application and the server doing less work overall.
IMHO the decision narrows down to deside whether to have a thick or thin client.
If a thick client architecture is chosen you could stay with PHP. On the other hand if a thin client architecture is chosen then PHP is ruled out as PHP is not geared towards an 'always on' architecture. A thin client implies a think backend which requires an independently runtime environment better suited for a stand-alone runtime. By stand-alone runtime I mean a runtime which is capable of being self sufficient.
IMHO the decision narrows down to deside whether to have a thick or thin client.
You would probably also take into account from which devices RC will be accessed. A thick-client approach might be too thick for smartphones, tablets and televisions.
The question here might be: Who are the intended end-users and what will they use most? The problem with that is that we can't take a look at the usage of the current RC version, because most installations work poorly with mobile devices.
Martijn Thie
-----Original Message----- From: dev-bounces@lists.roundcube.net [mailto:dev-bounces@lists.roundcube.net] On Behalf Of Michael Rasmussen Sent: dinsdag 17 maart 2015 22:41 To: dev@lists.roundcube.net Subject: Re: [RCD] Roundcube Next - a survey
On Tue, 17 Mar 2015 14:10:10 -0700 Brendan brendan@tucows.com wrote:
i'm pretty sure thomas didn't mean that and instead meant a stateless JSON protocol with most of the logic in the client application and the server doing less work overall.
IMHO the decision narrows down to deside whether to have a thick or thin client.
If a thick client architecture is chosen you could stay with PHP. On the other hand if a thin client architecture is chosen then PHP is ruled out as PHP is not geared towards an 'always on' architecture. A thin client implies a think backend which requires an independently runtime environment better suited for a stand-alone runtime. By stand-alone runtime I mean a runtime which is capable of being self sufficient.
-- Hilsen/Regards Michael Rasmussen
Get my public GnuPG keys: michael <at> rasmussen <dot> cc http://pgp.mit.edu:11371/pks/lookup?op=get&search=0xD3C9A00E mir <at> datanom <dot> net http://pgp.mit.edu:11371/pks/lookup?op=get&search=0xE501F51C mir <at> miras <dot> org http://pgp.mit.edu:11371/pks/lookup?op=get&search=0xE3E80917
/usr/games/fortune -es says: <Knghtbrd> xtifr - beware of james when he's off his medication =>
Thank you all for this vital discussion! We're clearly scratching some more aspects that also can have some influence on the architectural decisions. Let my try to give some answers to the recently posed questions and remarks in one go.
@Günter: maybe you're right and persistent connections are not that much of an issue as there are some tools available to work around that. And the fact that long running scripts are not allowed by some hosters is another argument. Although when using node.js, that is by its architecture a long running process and I don't think we might find this kind of limitations here.
@Harald: the question about the target audience is actually very good and we haven't clearly wrapped our heads around that yet. While the initial goal of Roundcube was to be an easy untar+upload type of software I think that the focus meanwhile changed a bit and we should not make this a blocker criteria. Over the past years, Roundcube has grown into a serious option for enterprise-level installations and many ISPs offer it as part of their software collection. Furthermore, there are many package repositories offering Roundcube for installation with all the necessary configuration for database and webserver included. And we clearly see the differing requirements for enterprise installations vs. private hosting setups. For example one does not want the config files to be in the document root.
@martijn: to summarize the long answer to Harald and answer your question: I think we should more focus on professional hosting solutions rather than copy & past installations for everybody who has some webspace. New deployment tools like Docker will cover a slightly more complex installation and configuration process for you. But that doesn't mean we shall not try to make it work for both scenarios.
@Günter: by a client-server application I don't mean that we need persistent connections through sockets and daemon-like server processes for Roundcube. In fact, Roundcube already IS a client-server application and using single short-lived HTTP requests to exchange data between the two sides is perfectly fine.
@Michael: I think we're clearly moving towards a thick client approach for Roundcube Next. Because browsers (which is our client environment) became very powerful, we want to move more application logic to the client which certainly will have a "thickening" effect. How mobile clients can scale is yet to be figured out. But with a smart module-based architecture and a strict synchronization protocol we can maybe tailor individual less-featured clients for mobile devices.
@Brendan: both JMAP and the Gmail-API are valid models for what Roundcube Next might use for its client-server communication and we might save us some time and gain some more sales argument for building a client that is compatible with either one of them. Unfortunately, I found both not being complete to synchronize the data model we want for Roundcube.
And yes, Roundcube 1.x will still be around for a while. The entire Roundcube Next topic is currently a solely hypothetical collection of thoughts and will take a significant amount of time to become functional and an actual replacement for the current versions. So you all have plenty of time to prepare both your systems and your users for this eventual big update.
Kind regards, Thomas
On Mar 6, 2015, at 12:10 PM, Thomas Bruederli thomas@roundcube.net wrote:
- PHP
While I generally don’t like PHP for development, if you use something else, you’ll end up losing 50% of your users. Many web hosting sites provide PHP support and not much else. If they do, it’s often has many restrictions. PHP works on pretty much every web server on every platform.
I’d fear that writing it in another language would end up in RC not making quick progress since it’s such a big job. I’ve been there. RC has a lot of code under the covers.
- Python
Personally I can run whatever I want on my server, and python is pretty popular. From what I’ve read and experienced, Python is sometimes faster, but usually not all that much. Maybe 2x tops (on average.) Is that really worth all the extra work? Having done stuff on the Raspberry Pi, Python is too slow there to be useful for anything I’ve tried.
- Node.js
Rather cutting edge and less support on web hosting sites. Maybe embedding node.js with the new RC protocol into a IMAP++ server would allow for speedy development and easy deployment for server owners, at least. Apache (or whatever) can server the HTML / CSS / JS parts. node.js would run on an alternate port. It complicates firewalls and the like, obviously.
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 haven’t really played around with them all that much. Everyone uses JQuery, of course. Ember gets good press and is more full-featured.
For the client-server communication, there are some interesting concepts out there but none of them actually seems to suit the purpose we're after. They either lack the concept of sharing (i.e. ACL) or do not account for collections such as multiple different address books one account my have access to. The candidates I'm referring to are: Nilas.com (former InboxApp), JMAP (by Fastmail) or the Gmail API (also to be supported by Dovecot). All are good approaches and generally point into the same direction but I couldn't say that one of them would already solve the use-cases we want to cover in Roundcube. And yes, we're seeking for a protocol and not an API [3] :-)
These are neat ideas and I was thinking something like that would be cool. However, not sure if it isn't more cool than practical. JMAP is stateless and that seems “modern", but it places a burden on performance.
Maybe more of an MVC where the model is on the server, the view and controller are javascript on the client. That’s more an API than a protocol, though. Making an API is much harder, IMHO. It would allow other people to implement clients (if done well), which is interesting. But it seems everyone is writing their own API anyway, so not sure how practical that is.
There is also things like: http://emailjs.org and i think whiteout.io has one, too.
Anyway, just some mostly random thoughts.
-Norman
It's kind of a late reply, but still...
Some of you asked the question: Who is the intended user of Roundcube? Who is going to install it on his server, or who is going to provide it as an installable on his webhosting platform?
To find out which programming language suits best, there are probably several ways to find out what your intended users want/need. One of them might simply be to look at what is supported most. http://w3techs.com/technologies/overview/programming_language/all
The link above will tell you the same thing as any other similar websites will tell you: "PHP is used everywhere, the rest of the languages don't seem to matter". What might also be of interest, is that most of the websites use PHP 5.x
Moving away from PHP might result in that the new RC will no longer be the number 1 choice. Demand for the "old" (the current) version might even stay higher. Is it already decided how (and if) the "old" version will remain supported? and for how long?
Furthermore, there is already a lot of good and reusable and thoroughly tested code in the current version. It would be a waste to recode it all.
I really like Node.JS, but I think it would be a poor choice.
Martijn Thie