Hi Manuel and others
> What do you think? Is it time to perform a major architectural
> overhaul on m0n0wall? Or would you rather continue with m0n0wall's
> current architecture, perhaps making small adjustments where
> necessary, and on the other hand spend more time rewriting code to
> get new features integrated?
These are my thoughts to your questions. I try to be as clear as possible,
but if there remain some questions, please drop me a note and I will try
to be more verbose.
First of all: I think the decisions you made when starting with the
current m0n0wall architecture were quite perfect. XML based configs, sleak
PHP based system. Nice.
Just to think about what the current requirements are: Everybody wants to
have feature x or y implemented. OpenVPN was something much discussed,
there were other features as well. So m0n0wall should be able to cope with
new requirements/requests. It runs on many different systems (normal PC,
soekris board, etc) which requires everything to run at the slowest and
To look into the future: IMHO m0n0wall could go into this direction:
- Modular sleak core system
- Management interface
- Extension framework
I'd base the whole thing on OpenBSD. Then plug some C or Java based core
management engine onto the core system. Using PHP as the web interface and
having the extensions and the possible "third party" extensions use the
same interfaces as the built in PHP UI.
Now let me explain why these decisions:
- OpenBSD is a project which lately seems to put quite an effort into
networking. I base this on the observation of pf, altq, OpenBGPD and other
nice features which OpenBSD lately (or earlier) introduced. There are some
- like djb - which state that the network implementation of OpenBSD is
either unstable or slow. I have neither seen facts nor figures proving
this. Like that m0n0wall could profit from the OpenBSD's current focus on
save networking (ICMP DoS attacks, sequence guessing, etc) and having a
redundancy enabled firewall with bgp would be cool as well.
- Using either C or Java for the core system: C would be interesting speed
and portability wise. Java would be interesting for its speed of
development and security (overflows...), there are of course questions of
licencing with Java. And it is not true that Java is slow. Especially not
when not using Swing or another UI. But Java is a memory hog, which could
be bad for Soekris based systems.
- Having a management interface would allow the system to be either
managed locally via http or from an external source tunnelled via ssh with
whatever tool there is. The idea would be - as Manuel described earlier on
- that there is some kind of interface between the core system and the
management consoles/applications. Like that one could even think about
having SNMP support added via the same interfaces, as an idea.
- Starting with an extension framework right at the beginning of the
planning and architecture could allow us to add more features easily as
pluggable pieces. Ideal would be that I can decide to add bandwith shaping
or I can just deactivate or remove it. Cool would be something like on the
fly flash image creation where I can define my image on the m0n0wall
webpage and when I am ready I can download the personalised flash image
with only the plugins I want.
Thats a heap of ideas and would result in another heap of work. This is
meant as a bunch of ideas to have m0n0wall become something even better
than it is today and not as musts.
> Finally, something needs to be done about the development style as
> well. So far, I've coordinated all changes to m0n0wall and analyzed
> and tested most contributed patches. While I think this has resulted
> in a relatively high code quality, I'd like other talented people to
> get more involvement. Volunteers, step forward! One of the ways to
> enable this will be a common version control system for the code -
> either CVS or SVN.
CVS or SVN is definitely something which you should take into calculation.
But there will always be somebody at the end of the development chain
deciding to accepting code or to having it either refused or rewritten.