Commonly this is referred to as the source, where you can distribute the solution to a different CRM organization, but with the added flexibility of having the ability to further making changes to what has been installed. For example if there was a new entity, which a screen you didn't like the look of, then you have the ability to make changes to that screen.
Commonly referred to as the compiled or build version. The main reason to use this, is to protect your solution. For example if you are a software vender which has built a great add-on solution, you want to sell this solution but do not want others being able to further customize or copy your hard work. There is an exception to the rule, where you do have the flexibility to mark specific components as customizable, a good workaround if there was a scenario where you did want to give the option to change a specific part of your solution.
- Less dependency issues
- Everything in one place, single install
- All components have one version
- Solution can become large
- Releasing a change to a single component will require releasing all components in the solution. Developers who have incomplete items can become a bottleneck
- Incomplete customization's can accidentally be exported and included in the solution
- Cannot use different versions for different components.
- Smaller solutions
- Categorize components into relevant solutions
- Developers can work on components in different solutions in parallel with less concern of exporting incomplete customization's, or becoming a block point for a solution export
- Don't have to release everything, only the solution that has a change
- Better Granularity with solution versioning, as each solution can have its own version number
- Installation will fail if dependent components do not exist, dependent solutions must be installed prior. Thus the order by which the solutions are installed becomes very important.
- More than one solution is required to fully install your entire solution, as the various components are split between several solutions
- Rollback requires you to uninstall each solution
Hopefully this won't confuse you further, but a mixed mode of the two could also be utilized Whereby you use a multi solution approach during development and then merge and produce a single solution for production release.