How would you split nanomsg, then?
1. compatibility library, e.g. apl, libuv
2. coroutine library, e.g. libtask, libmill
3. the core: messaging protocols
It may even make sense to implement individual messaging protocols as separate components.
Thanks for this Martin, always love your writeups!
I ran into this same problem over the years, several times.
I've also spent way too much time on compatibility layers that have largely become obsolete by languages and compilers advancing over the years.
As a consequence I'm working on aggressively downsizing my projects Rapicorn and Beast now and have a few very clear use cases that should be well covered.
Good luck! The more finished software out there the better. Both for using it and as an example for the others.
It would be helpful if you explained why this is such an essential principle. "Finished" as compared to "always working" or "maintained" or "living", which seem much more useful than a simple "finished", which seems to include a suspicious quantity of "abandoned".
Anyhow, finished projects are not rare in the real world. I've done lots of these: Libero, GSL, SFL, SMT, ASL, PAL, OpenAMQ, even Xitami. There's no magic. You make the tool, document it fully, take it through maturity, and then stop changing it.
There are many, many finished projects out there. When they change it's for tiny, or environmental reasons, unless you consider "unmaintained" to be an essential property of finished. Even a carpenter will repair tables and chairs.
Indeed, I'd expect that the bulk of projects running on a typical Linux are "finished", though I hope as user that they are not abandoned.
libzmq is also finished, and it doesn't send email (as you know well). ZeroMQ is a community, not a project, and as such I don't think "finished" can or should apply. The community mostly invests outside the core library, as it should.
ill give you two*. one is a "security" app for taking photos from the isight camera whenever your laptop is woken up. the other is an app for reading twitter feeds from the speaker.
both are cocoa apps that was supposed to help me transition to being an ios developer.
then lion and mountain lion happened and i realized it was impossible for me to keep on supporting the software. so i abandoned it. guess what, instead of becoming an ios dev i became a ruby dev instead.
there really is no point to this story other an just go where the current takes you. :)
http://www.macupdate.com/developers/profile/7341
A software project is 'done' when the last end user is in his grave. I don't agree with the 'grep' example. It may be very stable (last commit on gnu-grep is from september 2014), but there are projects which aim to make a better grep: ack-grep and ag (the silver searcher)