A resposta do Doc Brown é a mais exata possível, as outras respostas ilustram mal-entendidos do Princípio Aberto Fechado.
Articular explicitamente o mal-entendido, parece haver uma crença de que o OCP significa que você não deve fazer alterações para trás incompatíveis (ou mesmo quaisquer alterações ou algo nesse sentido.) O OCP é sobre a criação de componentes de modo que você não precisa de faça alterações para estender sua funcionalidade, independentemente de essas alterações serem compatíveis com versões anteriores ou não. Há muitas outras razões além da adição de funcionalidades, que você pode fazer alterações em um componente, seja elas compatíveis com versões anteriores (por exemplo, refatoração ou otimização) ou incompatíveis com versões anteriores (por exemplo, descontinuando e removendo a funcionalidade). O fato de você poder fazer essas alterações não significa que seu componente violou o OCP (e definitivamente não significa que você estão violando o OCP).
Realmente, não se trata de código fonte. Uma declaração mais abstrata e relevante do OCP é: "um componente deve permitir a extensão sem a necessidade de violar seus limites de abstração". Eu iria além e diria que uma versão mais moderna é: "um componente deve impor seus limites de abstração, mas permitir a extensão". Mesmo no artigo sobre OCP de Bob Martin, enquanto ele "descreve" "fechado para modificação" como "o código-fonte é inviolável", mais tarde ele começa a falar sobre encapsulamento que nada tem a ver com a modificação do código-fonte e tudo a ver com abstração limites.
Portanto, a premissa defeituosa na pergunta é que o OCP é (pretendido como) uma diretriz sobre evoluções de uma base de código. O OCP é tipicamente slogan como "um componente deve ser aberto a extensões e fechado a modificações pelos consumidores". Basicamente, se um consumidor de um componente desejar adicionar funcionalidade ao componente, ele poderá estender o componente antigo para um novo com a funcionalidade adicional, mas não poderá alterar o componente antigo.
O OCP não diz nada sobre o criador de um componente alterando ou removendo a funcionalidade. O OCP não está defendendo a manutenção da compatibilidade de bugs para sempre. Você, como criador, não está violando o OCP alterando ou mesmo removendo um componente. Você, ou melhor, os componentes que você escreveu, está violando o OCP se a única maneira de os consumidores adicionarem funcionalidade aos seus componentes é alterando-a, por exemplo, através de patches de macacosou ter acesso ao código fonte e recompilar. Em muitos casos, nenhuma dessas opções é para o consumidor, o que significa que, se seu componente não estiver "aberto para extensão", eles terão azar. Eles simplesmente não podem usar seu componente para as necessidades deles. O OCP argumenta para não colocar os consumidores da sua biblioteca nessa posição, pelo menos no que diz respeito a alguma classe identificável de "extensões". Mesmo quando modificações podem ser feitas no código-fonte ou até mesmo na cópia principal do código-fonte, é melhor "fingir" que você não pode modificá-lo, pois há muitas conseqüências negativas em potencial.
Portanto, para responder às suas perguntas: Não, essas não são violações do OCP. Nenhuma mudança feita por um autor pode ser uma violação do OCP, porque o OCP não é uma série de mudanças. As alterações, no entanto, podem criar violações do OCP e podem ser motivadas por falhas do OCP em versões anteriores da base de código. O OCP é uma propriedade de um pedaço de código específico, não a história evolutiva de uma base de código.
Por outro lado, a compatibilidade com versões anteriores é uma propriedade de uma alteração de código. Não faz sentido dizer que algum código é ou não é compatível com versões anteriores. Só faz sentido falar sobre a compatibilidade com versões anteriores de algum código com relação a algum código mais antigo. Portanto, nunca faz sentido falar sobre o primeiro corte de algum código ser compatível com versões anteriores ou não. O primeiro corte de código pode satisfazer ou deixar de satisfazer o OCP e, em geral, podemos determinar se algum código satisfaz o OCP sem se referir a nenhuma versão histórica do código.
Quanto à sua última pergunta, é indiscutivelmente fora de tópico para o StackExchange, em geral, ser principalmente baseado em opiniões, mas a falta dela é bem-vinda à tecnologia e, principalmente, ao JavaScript, onde nos últimos anos o fenômeno que você descreve foi chamado fadiga do JavaScript . (Fique à vontade no Google para encontrar uma variedade de outros artigos, alguns satíricos, falando sobre isso de várias perspectivas.)