Main image of article SourceForge Q&A: Syncing Files Across Platforms
SourceForge’s December “Staff Pick” Project of the Month is FreeFileSync, which allows users to synchronize files and folders for Windows, Linux and Mac OS X. The FreeFileSync admin, Zenju, shared his thoughts about the project’s history, purpose, and direction. Click here to find open-source developer jobs. Tell me about the FreeFileSync project, please. FreeFileSync is a graphical file synchronization and folder comparison tool. This means its main purpose is to speed up backup operations by examining the differences between source and target folders and then copy only what is needed rather than copying everything each time, similar to what a disk cloning/imaging tool does. Since synchronization is usually very fast and can be automated by creating batch jobs, it is easy to back up your important files to a second location—without using any cloud services. The second core feature is folder comparison. FreeFileSync lets you binary-compare entire folders to see exactly where differences are. This is similar to what a file diff tool does but at a folder level. And file diff tools can be integrated into FreeFileSync. What made you start this? When I started the project I was looking for a file synchronization tool because I was traveling back and forth between two locations and needed my multi-gigabyte data to sync on simultaneous PCs. Conceptually, my requirement was simple but I was unhappy with the tools I found. They were overly complex, often slow, and lacked good error handling. After seeing one “unknown error” message too many, I decided this problem should be solved beginning with “first principles”. So I set forth a number of goals that FreeFileSync should strive for: No needless user interface complexity: A good number of options are avoided by finding a different, smaller set that better suits the task at hand. Another big fraction are avoided by having the software make smart decisions itself whenever it can do so without risk. Having an academic background in mathematics, I like to think that good software design means finding the base vectors of the problem domain. If you have too few “vectors” (= program capability) your software won’t satisfy your user’s needs, but if you have too many you’ll bloat the software with redundancy. Ideally, just like a good set of base vectors for a vector space, software features should be orthogonal, which means you have minimal dependencies while maximally expanding into the problem domain. Optimal performance. Having worked professionally, mainly in the area of software performance optimization, I decided if I found a faster file synchronization tool than FreeFileSync, I would take it as a challenge and make FreeFileSync equally fast. Since file synchronization is inherently I/O bound, optimal performance can be defined as the time needed to complete the minimum number of I/O operations for a task, while CPU time should be so short it is negligible. Good error handling. Every operation should be pedantically checked for errors and, when errors are detected, it should return the maximum amount of useful information to the user. Reliability is key for a file sync tool and, before FreeFileSync; I found popular tools lacked consistent error checking and an acceptable level of reasonable error messages. With FreeFileSync, when errors are not reported you can rest assured all went well.

Upload Your ResumeEmployers want candidates like you. Upload your resume. Show them you're awesome.

Has the original vision been achieved? Deciding which features to support is a tough battle. Not every feature that is essential for a single user justifies its exposure to the full FreeFileSync user base. On the other hand, making a number of small changes to the software without increasing the total complexity can support highly specific scenarios. Using the vector-space metaphor, it’s like changing the direction of some base vectors. New requirements can be handled without the proverbial adding of another “check box.” Understanding the problem is the hard part and takes time and openness to user feedback. Years after its initial conception, I’m proud to say FreeFileSync has not compromised on its software design ideals. There is no legacy of historic features that could impede future software development. For example, I have not yet seen faster synchronization software. The results of performance measurements for FreeFileSync show that except for the essential I/O the fraction of additional time consumed is low. Additionally, FreeFileSync tries to keep the machine busy by doing as much work in parallel as possible. For example, all folders are scanned at the same time, so if you are scanning, say 10 slow hard disks in a single job, you only have to wait the time that it takes to scan one of them. FreeFileSync’s error messages significantly reduce the overall support effort because they enable most users to help themselves. Error messages are structured into multiple levels, first providing a high-level overview on what went wrong, followed by more detailed context information, and are even going further down to operating system error codes for maximum detail. All of the information can be copy-pasted and is formatted in a way that gives good results when entered into a search engine. This takes a lot of pressure from FreeFileSync support forums on SourceForge because users can more quickly find a solution to a specific problem. Who can benefit the most from your project? FreeFileSync is suited for everyone who wants to back up important files regularly. The idea is to set up a sync configuration once and use it from there on. This reduces the mental overhead required to do a backup to a single mouse button click (on a FreeFileSync batch file). If you want even more automation, you can schedule FreeFileSync to run in a task planner or synchronize a folder in real time on each detected change with RealtimeSync, an application bundled with FreeFileSync. Backup is needed when disaster strikes and when you need an earlier version of a particular file or document. In a non-technical sense, FreeFileSync helps you sleep better knowing that recent versions of your files are safe. I sure know it helped me. FreeFileSync requires no special knowledge. Both the casual PC user and IT administrator will find their way with FreeFileSync. I firmly believe that expert users want nice and easy-to-use software too and that’s in not complicated with “easy” and “advanced” modes? Have you found that more frequent releases helps build up your community of users? FreeFileSync releases updates about once every month and has been doing so since its first release. From a software development perspective, this provides all the benefits that are expected from short release cycles nowadays. Bug fixes reach end users very quickly, solving problems before they may have a negative impact. This naturally increases the confidence that the program is stable and well maintained. Severe bugs are less likely to occur because changes between versions are not as pervasive as software created following traditional methodologies like waterfall or those that release each year. Frequent releases force you to rigidly streamline the development process, including packaging, testing, and localization. This takes considerable initial effort, but pays off if a severe bug is found. In FreeFileSync, it’s possible to ship an out-of-order bug-fix release on the same day, where users are notified by a built-in auto-updater. This is an essential property for software that needs to scale up for those who depend on its functionality. Considering all the years that FreeFileSync has been releasing regularly, this consistency has helped to build a community of users who are confident about the quality of the backup software they are using. What is the next big thing for FreeFileSync? The most-requested feature currently is synchronization with smart phones. This is top priority and will be in one of the future versions of FreeFileSync. However. I can’t make any promises as to when it will be available. What is the software development philosophy for FreeFileSync? FreeFileSync takes a drastic approach concerning software development. If something is not right, be it software design or source code, it is fixed, no matter how small or insignificant the problem seems. This seems like a lot of work for tiny problems but it pays off significantly when applied consistently. The complete code base, not only of FreeFileSync but all of my software projects, always matches the current level of my expertise. When I learn something new, I apply and update everything. As my understanding of both technical and human interface problems deepens, the number of things to fix decreases over time and my time investment shrinks. Strategically, this is an advantage because working on the FreeFileSync code base is always fun without this historic baggage. The advantages of constant code refactoring are well known. For example, the C++11 standard had a profound impact on the code base. As soon as the common set of feature supported by compilers on Windows, OS X, and Linux allowed it, I migrated the FreeFileSync code gradually to using the most recent and improved ways of programming. For me, software development is taken literally and whenever there is something that should be done differently, I believe is never too late to do it now. Is there anything else we should know? I like to thank everyone who has contributed to this project! Thanks in particular to my group of dedicated translators who have supported me reliably over all the years. Also thanks to all the users reporting feature requests and bug reports that help to improve FreeFileSync even further. And thanks to SourceForge for offering a great site for open source project management.

Related Articles

Image: FreeFileSync