Is there a way to handle software updates easily with so many modifications?
Qualquer VCS com bons recursos de mesclagem de ramificação. Qual selecionar - depende de muitos fatores e hábitos
How to keep my modifications upon next software release?
No mundo SVN, ele é chamado de "Filiais de fornecedores" - suas alterações em uma ramificação, upstream em outra, você atualiza a ramificação de fornecedor e mescla-se com o seu (leia SVN-book ou Google sobre detalhes)
No DVCS-world você pode usar técnicas diferentes
- ramificações, como no SVN
- patch & patch-management
A maneira mais fácil ( para mim , após alguns testes) é mercurial + MQ:
- minhas alterações são configuradas com patches MQ na fila do MQ, o repo é um clone puro do upstream
- para cada sincronização com upstream eu removo patches aplicados do repositório, puxo fontes, reaplico patches (com resolução de conflito de mesclagem, se necessário, e salvando patches editados), exporto dica para o conjunto não-versionado e copia para o destino final