| 37 | |
| 38 | Community-driven development model excels in developing software incrementally in small steps. Most community developers are driven by healthy self-interest and concentrate on ''features'' that are of interest to them. Fixing parts of the architecture may or may not have value for them. An example of an architectural change that developers would probably be interested in is making OpenVPN multithreaded. That said, there are certainly some community developers who may be interested in less concrete work such as rewriting parts of the codebase to allow easier development in the future. Also, if the architecture is made more modular, people will be able to contribute to the project more easily in the future. |
| 39 | |
| 40 | == Start from scratch vs. incremental approach == |
| 41 | |
| 42 | Starting from scratch has the benefit that we can focus on fixing the current architectural problems. Also, we would not really need to start from scratch, as many parts of the old codebase can be utilized in the new codebase with minor modifications. However, as the codebase as whole would be new, it would almost certainly have unknown problems. |
| 43 | |
| 44 | There is also the problem that the new codebase will be competing for users and developers against the old codebase. Non-developers are unlikely to use the new codebase until it provides something the old codebase does not. This means the new codebase will be relatively untested for a long time even after it's somewhat functional. Attracting developers to work on the new codebase may also be difficult unless somebody (e.g. at the company) bootstraps and leads the development effort. |
| 45 | |
| 46 | Incremental approach solves the problem with competing codebases. However, as software architecture is difficult to change afterwards, incremental approach works only on a limited subset of the code. Some of the problematic code may be too integrated to be fixable without significant changes. |
| 47 | |
| 48 | == Generic network stack vs. focus on VPN functionality = |
| 49 | |