It's rare, but there are situations, when you can't install 3rd party libraries, or even if it would be comfortable/effective. I think, it's a good design issue to isolate the part of the project, where libs can't be used.
We're developing a home aut. system, where the back-end is running on small Linux machines. In this environment we can't use the usual Linux goodies, as Apache, MySQL, PHP, or smart libraries. Our home aut. server uses only stdlib, pthreads and optionally Alsa. We have to compile to ARM, PPC, AVR, MIPS and other non-X86 systems, which are sometimes extremly restricted.
So, we've made the following design decisions:
- The functionality of the server should be minimal. The most complex function of it is a simple webserver, which can provide files and 2 type of AJAX request. The server is modular, the components are very small. We use dataflow architecture, which makes it possible.
- The developing environment for the server is complex. We have 2 extra layers - a configurationa and a dataflow layer - before the GNU toolchain. Using buzzwords, I should say that we moved the complexity from run-time to compile-time. We have no limits when we prepare and compile stuff, e.g. our dataflow compiler is written in PHP - it's not optimal, but we don't care, it produces the appropiate result. Also, configuration tools are written in JS-AJAX/PHP, earlier we used Excel(!) to quickly set up a configuration.
- The UI is an AJAX-based WebApp, where we have no limits again. The UI sends only atomic requests to the server, all heavy stuff is done by JavaScript. Also, we use a JS framework (DomAssistant).
So, from the 3 subsystem (server, toolchain, UI) only the server is where we can't enjoy the richness of libraries and platforms.