Bug Crypt


Hari ini adalah tahun 2018, dan pesan kesalahan mengirimi kami salam dari tahun 1974. Batasan ini, yang ditemukan dalam versi terbaru Windows 10, kembali ke masa ketika tidak ada satu episode Star Wars yang ditembak. Bug ini setua Watergate . Ketika ditulis, tidak ada satu produk pun yang memiliki barcode UPC karena baru saja ditemukan. Pada masa itu, hanya ada satu Perusahaan Telepon , yang tidak dibagi. Ted Bundy bebas. Rekor Beiba Ruta untuk home run hanya disiapkan untuk jatuh . The Wheel of Fortune belum ditampilkan, dan belum ada yang melihat Rocky Horror Horror Show . Steven Spielberg saat itu adalah sutradara yang kurang dikenal, "Saturday Night Live" tidak muncul di layar. "Edmund Fitzgerald" sambil membawa bijih besi. Itu adalah tahun pemutaran perdana Bagian 2 dari The Godfather !

Saat itu, Unix, yang baru berusia 5 tahun , memiliki ide keren bahwa "semuanya adalah file." Ini berarti Anda dapat melakukan berbagai hal seperti menulis ke soket, pipa, konsol, dll. Menggunakan perintah dan instruksi yang sama. Konsep ini dipindahkan oleh Gary Kildall ke CP / M pada tahun 1974. Anda dapat menyalin data dari port serial ke file teks atau mencetak file teks langsung dari baris perintah! Pada Unix, ini dilakukan dengan menggunakan file khusus yang terletak di direktori khusus, misalnya, / dev / tty untuk konsol atau / dev / lp0 untuk printer pertama. Anda bisa mendapatkan nol tanpa akhir dari / dev / nol, byte acak dari / dev / random, dll.

Tetapi ada masalah: CP / M dirancang untuk komputer 8-bit dengan jumlah memori yang sangat kecil dan tanpa hard drive. Dalam kasus terbaik, mereka memiliki 8 "floppy disk. Dan direktori? Anda tidak membutuhkannya. Alih-alih direktori, Anda hanya menggunakan disk yang berbeda. Tetapi tanpa direktori Anda tidak dapat memasukkan semua file khusus Anda ke / dev /. Oleh karena itu, sebenarnya mereka ada" di mana-mana ". Yaitu, jika Anda memiliki FOO.TXT dan perlu mencetaknya, Anda dapat melakukan PIP LST: = FOO.TXT untuk menyalin FOO.TXT ke file LST, yang merupakan printer, dan hanya berfungsi di mana saja, karena direktori itu tidak ada.

Bagaimana dengan ekstensi? Semuanya juga tidak mudah: program lebih suka menambahkan ekstensi yang benar ke file mereka. Artinya, jika Anda menjalankan program dan mengatakan "Masukkan nama file untuk menyimpan daftar", Anda dapat memasukkan LST untuk mencetaknya atau PTP untuk menulisnya ke tape (karena Anda berada di tahun 1974, ingat?). Tetapi program dapat mencoba menambahkan .TXT di akhir file! Tapi LST.TXT bukan lagi printer, kan? Bagaimanapun caranya. Ini dia. Nama perangkat dikenali terlepas dari ekstensi. Yaitu, jika "CON" ditugaskan ke keyboard, maka baik CON.TXT dan CON.BUG juga. Hm Ini adalah retasan, tetapi berhasil. Apalagi di setiap sampah dengan RAM 4KB, tidak peduli?

Nah, CP / M menjadi luas di akhir 70-an - awal 80-an. Dia menjadi salah satu OS utama untuk bisnis, mendefinisikan antarmuka standar. Ini berarti Anda dapat menulis kode CP / M di NorthStar Horizon dan menjalankannya di Seequa Chameleon . Kurangnya standar grafis untuk sebagian besar tidak memungkinkannya untuk memasuki pasar game (walaupun ada rilis Infocom ), berfokus terutama pada pengguna bisnis. Tapi tetap saja, itu penting, sehingga keinginan IBM untuk menggunakannya dalam proyek PC-nya di awal 80-an menjadi wajar. Kemudian IBM akan meluncurkan PC IBM dengan beberapa sistem operasi, mengharapkan CP / M menjadi salah satu yang utama. Tetapi CP / M untuk x86 tidak keluar enam bulan setelah peluncuran IBM PC, dan harganya $ 240 versus $ 40 untuk DOS.

Akibatnya, sebagian besar pengguna mulai menggunakan PC-DOS dari Microsoft, yang menjadi evolusi OS baru yang dikembangkan oleh Seattle Computer Products . Microsoft membeli proyek Tim Paterson dan menciptakan PC-DOS berdasarkan itu, yang kemudian menjadi MS-DOS. Sistem operasi Tim Paterson disebut "QDOS," yang berarti "Sistem Operasi Cepat dan Kotor". Itu didasarkan pada CP / M, yang tidak memiliki versi x86, dan mencoba menyelesaikan beberapa keterbatasan CP / M. Dalam banyak hal, ini adalah sistem yang sangat mirip. Salah satu fitur umum adalah ide untuk menggunakan file khusus dan kurangnya direktori. Oleh karena itu, QDOS dan PC-DOS 1.0 memiliki semua AUX, PRN, CON, LPT ini, dll.

Dengan rilis PC-DOS 2.0 pada tahun 1983, Microsoft secara signifikan mendesain ulang PC-DOS untuk IBM XT yang baru. Anda jelas hanya membutuhkan direktori untuk menjaga disk 10 megabyte Anda yang besar, yang kemudian muncul di pasaran. Dan lagi, nasib buruk: pengguna telah bekerja dengan file khusus mereka selama beberapa tahun sejak rilis versi sebelumnya PC DOS 1.0. Program dan skrip ditulis untuk menggunakan file-file ini. Dengan dukungan direktori, Microsoft akhirnya dapat menghapus semua yang ada di C: \ DEV ... tetapi tidak. Seperti yang akan terjadi lebih dari sekali, Microsoft membawa akal sehat ke altar kompatibilitas mundur: file khusus tetap di setiap direktori dengan ekstensi apa pun. Warisan ini telah dijalankan melalui semua versi hingga Windows 95. Tapi, hei, sekarang kita tidak menggunakan Windows 95, karena cabang OS modern didasarkan pada Windows NT. Tetapi dia juga membutuhkan kompatibilitas dengan program DOS / Windows. Oleh karena itu, file-file khusus ini masih berfungsi, setelah empat puluh empat tahun sialan! Coba sendiri: buka explorer, buat file teks baru dan beri nama con.txt. aux.txt atau prn.txt. Itu dia.



Yaitu, terima kasih kepada Gary Kildall, yang berkata, β€œFile khusus mewakili peralatan! Ide bagus, Unix. Saya meminjamnya dan mencoba menerapkannya di OS mainan saya "sejak dulu bahwa orang yang lahir mungkin sudah memiliki anak yang diperbolehkan minum alkohol ... kita masih belum dapat menamai file con.txt. Microsoft bahkan memiliki daftar khusus: CON, PRN, AUX, NUL, COM1, COM2, COM3, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, dan LPT9. Untuk membuat hal-hal menyenangkan, ingat bahwa mencoba mengakses C: \ con \ con (atau C: \ aux \ aux) segera melemparkan Windows 95 ke dalam BSOD. Itu lucu pada tahun 1995, karena saat itu bug ini sudah berusia 21 tahun!



Latar belakang
Saya menemukan ini ketika saya menyadari bahwa saya memiliki file yang tidak dapat disalin. Nama file khusus ini diimplementasikan pada level OS, dan bukan pada level sistem file. Dengan demikian, mereka adalah nama file yang valid di NTFS. Dan saya menggunakan disk NTFS di linux. Dan ternyata, OS / 2 tidak mendukung sistem nama khusus ini, akibatnya di antara file-file pembuka adalah AUX.H pada salah satu drive untuk Devcon.



Dan hari ini saya mencoba untuk membuat cadangan disk NTFS ini di komputer utama saya, dan "oops, saya tidak bisa menyalin semua file karena bug, lebih tua daripada kebanyakan orang yang membaca ini."

Penjelasan
Di CP / M, bekerja dengan nama khusus sebenarnya tidak sesederhana seperti yang saya jelaskan. Misalnya, untuk mengakses perangkat, Anda memerlukan titik dua dalam nama: PRN: adalah printer, tetapi PRN tidak. Selain itu, dalam CP / M, bekerja dengan file perangkat tidak diterapkan pada level OS, seperti pada DOS. Ini hanya bagian dari perintah PIP untuk menyalin file. Artinya, Anda tidak akan dapat engkol, seperti dalam DOS, trik yang memerintahkan program untuk menyimpan PRN.TXT untuk mencetaknya.

Dan untuk berjaga-jaga, saya akan mengklarifikasi: Saya tidak bermaksud seperti "Windows sucks". Kompatibilitas mundur biasanya merupakan hal yang hebat. Bahkan, saya ingin kompatibilitas LEBIH mundur, tidak kurang. Saya baru saja menjadi gila, setelah menemukan bug 44 tahun menjalankan Windows 10 ketika mencoba untuk menyalin dari satu drive USB 3.0 SSD ke SSD lain. Itu seperti tinggal di stasiun ruang angkasa dan diinjak-injak oleh seekor kuda.

Source: https://habr.com/ru/post/id428706/


All Articles