Warning: The content below is technical!

A very long time ago (almost 15 years) I decided that the next version of warftpd should be based on a library that offered the core FTP server implementation. I wrote the first incarnation of this library in year 2000. But I was not satisfied, and never built the next warftpd around it.

This fall, I decided to try again. A lot has happened since year 2000. C++ has evolved. I have evolved. And today there are very powerful C++ libraries that I can lean on. In the past, I ended up writing pretty much everything myself, from scratch. That resulted in a WFDE, along with support-libraries, of more than 100.000 lines of C++ code!

My aim this time was to make it simple, fast and reliable. The 2015 incarnation of WFDE is a far better FTP server than the original War FTP Daemon ever was (from a pure technical perspective). It's feature complete (except for a few extensions, like encryption and IPv4). It's fast (using memory mapped file abstractions). The memory footprint per connection is low. The threading model is optimal (basically - one real thread per core, no matter how many connections and transfers), with few atomic variables and almost no need for thread synchronization (mutexes are slow). I am also using boost asio's spawn feature (C++ coroutines) to make the asynchronous code look like sequential code - dramatically reducing the code-size and improving readability.

So to put it short - I am pleased with the shape of the new incarnation of WFDE.

I started out a few months ago. Other things came up, so I was unable to work as much as I hoped, but I managed my overall goal; a pre-alpha this year (2014). I have logged 177 hours on the project. The code is just above 9000 lines of C++14. And, as part of the test-suite - it contains a feature-complete FTP server, wfded.

In the past, I usually prioritized new features over bugs or performance. That has changed. Today, my goal is to keep the project literally bug-free. The initial alpha-release has 0 known bugs. I spent 32 hours before the release to write a functional test suite in Python, and fixed all the bugs I could find. Due to a problem on my laptop, I was unable to install the Linux 'perf' command. So I failed to optimize it for speed. I fixed that problem yesterday.

I will now have a small X-mas vacation, and then I will implement Encryption, IPv6, and add a HTTP protocol in order to give a better user experience for the Facebook generation. Then, I will start planning the upcoming War FTP Daemon - built with WFDE as it's core building block - but with a very nice user interface, and more features.

For C++ enthusiasts, I recently released an example of modern asynchronous C++ on github: modern_async_cpp_example.

The WFDE library is on Sourceforge/wfde. Please use the facilities there to comment or add suggestions.

Happy X-mas and new year to all.