Question

I have a closed-source project (processing texts in various languages) that I want to open-source, probably by uploading it to bitbucket. But I am not sure how/if I should split it into subprojects.

Currently the whole project is in svn as one big structure:

  • the main system (a set of tools in java)
  • ant plugins (requires a particular version of the system; ant is a build system, we use it to load a language resource, build and test it)
  • documentation (how to run, develop resources, ..)
  • language resource 1
  • :
  • language resource n

The language resources might have different licences and possibly be contributed by third parties.

I am wondering: should I keep this project together (only removing language resources with a more restrictive license) or should I split it into individual project. The latter seems more like the thing to do, but how do I keep the versions in sync? Just manually, using readme files?

(More details based on answer below:) Usually, the user would download the system, the ant plugins and one language resources. They would need to be mutually compatible. But sometimes he would download it without the scripts (if he does not do any experimenting but integrate it into a production system). Sometimes, on the other hand they might want to download multiple or even all resources with it.

Thanks for any suggestions

Was it helpful?

Solution

Put yourself in the place of a user of your program:

  • Do I need to download all parts of the project to be able to run it?
  • In case of update, should I update all of the parts for it to work?
  • Is it impossible to use only a certain part of the project by itself?

If the answer to any of the above questions is "yes", then keep all of the parts in a single project. Basically, if you need all parts together for it work, it doesn't make sense to make separate projects, because in the end the user has to get/update all of them anyway.

If the answer to all of them is "no", then the parts of the project have some logical independence where it would make sense to just get and use parts of it without having to bother with the rest. In that case, make them multiple projects. Again, each project would contain parts that are very dependent (either all should be got or nothing).

Regardless of all of that, do keep the documentation with the source. You don't want version mismatch with that. I don't know what "ant" stuff is, but if they are also very dependent on the version, keep them in the same project as the main system.


Based on your update, I would suggest putting the main system with the ants and the docs in one project and put the scripts in another project. Since your refer to "language resource X" as script, I assume they are quite small. That makes it ok for all of them to be in one project even if the user only wants one of them.

However, if "language resource X" is a big project on its own, then it would make sense to keep them in separate projects.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top