Jawaban Doc Brown paling dekat dengan akurat, jawaban lain menggambarkan kesalahpahaman dari Prinsip Tertutup Terbuka.
Secara eksplisit mengartikulasikan kesalahpahaman, tampaknya ada keyakinan bahwa OCP berarti bahwa Anda tidak harus membuat perubahan mundur kompatibel (atau bahkan setiap perubahan atau sesuatu sepanjang garis-garis ini.) The OCP adalah tentang merancang komponen sehingga Anda tidak perlu untuk buat perubahan pada mereka untuk memperluas fungsionalitasnya, terlepas dari apakah perubahan itu kompatibel atau tidak. Ada banyak alasan lain selain menambahkan fungsionalitas yang Anda dapat membuat perubahan pada komponen apakah mereka kompatibel ke belakang (mis. Refactoring atau optimasi) atau mundur tidak kompatibel (mis. Deprecating dan menghapus fungsionalitas). Anda dapat melakukan perubahan ini tidak berarti bahwa komponen Anda melanggar OCP (dan jelas bukan berarti Anda melanggar OCP).
Sungguh, ini bukan tentang kode sumber sama sekali. Pernyataan yang lebih abstrak dan relevan dari OCP adalah: "komponen harus memungkinkan untuk perpanjangan tanpa perlu melanggar batas abstraksi". Saya akan melangkah lebih jauh dan mengatakan rendisi yang lebih modern adalah: "komponen harus menegakkan batas abstraksinya tetapi memungkinkan untuk perpanjangan". Bahkan dalam artikel tentang OCP oleh Bob Martin ketika ia "menggambarkan" "tertutup untuk modifikasi" sebagai "kode sumber tidak dapat diganggu gugat", ia kemudian mulai berbicara tentang enkapsulasi yang tidak ada hubungannya dengan memodifikasi kode sumber dan segala sesuatu yang berkaitan dengan abstraksi batas-batas.
Jadi, premis yang salah dalam pertanyaan adalah bahwa OCP (dimaksudkan sebagai) pedoman tentang evolusi basis kode. OCP biasanya di-slogan sebagai "sebuah komponen harus terbuka untuk ekstensi dan tertutup untuk modifikasi oleh konsumen". Pada dasarnya, jika seorang konsumen komponen ingin menambahkan fungsionalitas ke komponen mereka harus dapat memperluas komponen lama ke yang baru dengan fungsi tambahan, tetapi mereka tidak dapat mengubah komponen yang lama.
OCP tidak mengatakan apa pun tentang pembuat komponen yang mengubah atau menghapus fungsionalitas. OCP tidak menganjurkan menjaga kompatibilitas bug selamanya. Anda, sebagai pembuat, tidak melanggar OCP dengan mengubah atau bahkan menghapus komponen. Anda, atau lebih tepatnya komponen yang Anda tulis, melanggar OCP jika satu-satunya cara konsumen dapat menambahkan fungsionalitas ke komponen Anda adalah dengan memutasikannya misalnya dengan menambal monyetatau memiliki akses ke kode sumber dan kompilasi ulang. Dalam banyak kasus, tak satu pun dari ini adalah pilihan bagi konsumen yang berarti jika komponen Anda tidak "terbuka untuk perpanjangan" mereka tidak beruntung. Mereka tidak bisa menggunakan komponen Anda untuk kebutuhan mereka. OCP berpendapat untuk tidak menempatkan konsumen perpustakaan Anda ke posisi ini, setidaknya sehubungan dengan beberapa kelas "ekstensi" yang dapat diidentifikasi. Bahkan ketika modifikasi dapat dilakukan pada kode sumber atau bahkan salinan utama dari kode sumber, yang terbaik adalah "berpura-pura" bahwa Anda tidak dapat memodifikasinya karena ada banyak konsekuensi negatif potensial untuk melakukannya.
Jadi untuk menjawab pertanyaan Anda: Tidak, ini bukan pelanggaran OCP. Tidak ada perubahan yang dibuat oleh penulis dapat menjadi pelanggaran terhadap OCP karena OCP tidak sebanding dengan perubahan. Perubahan, bagaimanapun, dapat membuat pelanggaran OCP, dan mereka dapat dimotivasi oleh kegagalan OCP di versi sebelumnya dari basis kode. OCP adalah properti dari sepotong kode tertentu, bukan sejarah evolusi basis kode.
Sebaliknya, kompatibilitas mundur adalah properti dari perubahan kode. Tidak masuk akal untuk mengatakan sebagian kode kompatibel atau tidak kompatibel. Masuk akal untuk berbicara tentang kompatibilitas mundur beberapa kode sehubungan dengan beberapa kode lama. Oleh karena itu, tidak pernah masuk akal untuk berbicara tentang potongan pertama dari beberapa kode yang kompatibel atau tidak. Potongan kode pertama dapat memuaskan atau gagal untuk memenuhi OCP, dan secara umum kita dapat menentukan apakah beberapa kode memenuhi OCP tanpa merujuk ke versi historis dari kode.
Adapun pertanyaan terakhir Anda, ini bisa dibilang off-topic untuk StackExchange secara umum sebagai terutama berdasarkan pendapat, tetapi singkatnya adalah selamat datang di teknologi dan khususnya JavaScript di mana dalam beberapa tahun terakhir fenomena yang Anda gambarkan telah disebut kelelahan JavaScript . (Jangan ragu-ragu ke google untuk menemukan berbagai artikel lain, beberapa menyindir, membicarakan hal ini dari berbagai perspektif.)