The project will consist of three parts, which are:
The core library. All protocol related functions are kept here. Also, all connection related functions are in here.
SySeEn stands for Sync Server Engine. This is the server module. It should be very small and basically an adaptor for the library to an SQL back-end. It also handles conflict resolving.
Instead of writing a new client, an existing one is used: Gnomecard. vCardSync will be the adaptor from Gnomecard to libsyncml.
The last major decision is the choice of a programming language. For extensibility and reusability an object oriented approach seems reasonable. Counting only the currently most widespread languages this leaves a choice between C++, Java and Python. Java and Python are more portable, but when it comes to speed they fall far behind. Also, Java is known to be a huge memory hog. So the decision was for C++.