İşletim Sistemi 101 – #1 (Tanımlar)

Uyarı: İşletim sistemleri hakkında temel düzeyde bilgi edinmek isteyenlere, konunun güzelliğini fark ettirmek amacıyla bir yazı hazırladım. Teknik detaydan fazlasıyla uzak olduğunu düşünüyorum. Bu nedenle tekniğe dokunan noktalarda bariz eksiklikler olacaktır. Fakat yine de, lütfen eksik ve/veya yanlış gördüğünüz noktaları belirtin ve gerekli düzenlemeleri yapalım. Hayat boyu OS öğreneceğiz!

This article is also available in English: Operating System 101 – #1 (Definitions)

İnsan Bilgisayar (Human Computer)

Alan Turing - 1928 (16 yaşında)
Alan Turing – 1928 (16 yaşında)

Bilgisayar Bilimi’nin kurucusu Alan Mathison TURING, 1 Ekim 1950 tarihinde yayımlanan “Computing Machinery and Intelligence” (Hesaplama Makineleri ve Zeka) makalesinde, “Makineler düşünebilir mi? Bu konu, ‘makine’ ve ‘düşünme’ kavramlarının tanımıyla başlamalı.” ifadesine yer veriyor.^1 Makalesinde “The Imitation Game”e (Taklit Oyunu) yer veren Turing, bizlere “Turing Testi”ni anlatıyor. Yeri gelmişken 2014 yapımı “The Imitation Game” filmini de analım.^2 Bilgisayar Bilimi’ni öğrenmek, Alan Turing’i anlamak ve tanımak için film izlemekten daha fazlasına ihtiyacımız olduğunu hatırlatmama gerek yoktur sanırım.

Turing bu makalesinde, dijital bilgisayarların çıkış noktası olarak insan bilgisayarların görevlerini yerini getirme amacına işaret ediyor. İnsan bilgisayarı ise; “belirli kuralları takip eden, hiçbir ayrıntıdan sapma yetkisi olmayan kişiler” olarak tanımlıyor. (Burada yaptığım çeviriyi hiç beğenmedim. Olmadı burası.)

NACA (NASA) Yüksek Hızlı Uçuş İstasyonu "Computer" Odası (1949)
NACA (NASA) Yüksek Hızlı Uçuş İstasyonu “Computer” Odası (1949)

17. yy.’de “Computer” kelimesi, tam olarak buydu. “Hesaplama (compute) yapan kişi.”^3 Uzun soluklu hesaplama işlerinde kullanılan bir insan grubu düşünün. “Apollo” filmlerinde görmüştük sanki benzer sahneleri. Hata yapma ihtimalleri olduğu için, aynı hesabı yapan birden fazla grup var. Hatta hesaplamalar, aynı grup içerisindeki kişiler arasında paylaştırılıyor ve sonuçlar bir araya getirilerek nihai sonuca ulaşılıyor.^4 Multithreding? Bu konuya geleceğiz. Küçük bir not daha. Bu işlerde 1800’lü yıllar ve sonrasında ciddi miktarda kadının çalıştığı biliniyor. Ada Lovelace’ten beri – hatta belki daha önceden de – kadınlar bilgisayar dünyasında varlar. Olmaya da devam edecekler. Aksini iddia eden varsa şuradan Alt+F4 çekip gidebilir.

Dijital Bilgisayar

Şimdi gelelim günümüze. Hesaplama işleri artık birtakım aygıtlara devredilmiş durumda. Günümüzdeki karşılığıyla bilgisayar için şöyle bir tanım yapabiliriz: “Birtakım aritmetiksel ve mantıksal işlemi yürüterek veriyi işleyen, saklayan, gösteren aygıt.” Bildiğiniz gibi donanım ve yazılım olarak iki farklı birime ayrılabilir. Bu yazıda klişelere girip “oda kadar büyük, 1 MB hayaldi, 5 ton çekiyordu, Pascaline, ENIAC…” şeklinde devam etmeyeceğim. Bilgisayarın gelişim sürecini, tarihçesini mutlaka okuyup incelemelisiniz. Ayrıca adı anılması gereken onlarca bilim insanı var. Ve bu adı duyulmamış kahramanların, sosyal medyada şaklabanlık yapan tiplerden daha az tanınması beni inanılmaz yoruyor. O yüzden buralara hiç girmeyeceğim. Kendi okumalarımda yakaladığım ve saygı duyduğum insanlara değineceğim ayrı bir yazıyı, önümüzdeki 42 yıl içerisinde hazırlayabilirim.

“Compute (hesap)” kökünden gelen “computer (hesaplayıcı)” için muazzam bir öneri getiren ve “bilgisayar” kelimesini dilimize kazandıran kıymetli hocamız Prof. Dr. Aydın KÖKSAL’ı da anmadan geçmeyelim.^5 Bilgisayarın Türkiye’deki serüvenini anlamak için Aydın Hoca’yı mutlaka okumalısınız.

KKK Master Planı Projesi'nin başarıyla sonuçlanmasını kutlamak üzere Bilişim Ltd ve Aydın Köksal onuruna komutanlar yemek veriyor. - 1992 (Aydın Köksal hocanın web sitesinden alınmıştır.)
KKK Master Planı Projesi’nin başarıyla sonuçlanmasını kutlamak üzere Bilişim Ltd ve Aydın Köksal onuruna komutanlar yemek veriyor. – 1992 (Aydın Köksal hocanın web sitesinden alınmıştır.)

Peki bu tanıma göre düşünecek olursak, “Evinizde kaç tane bilgisayar var?” sorusunu yöneltmek isterim. 1? 3? 24? Sandığınızdan çok daha fazla olabilir. Örnekleyelim:

  • Masaüstü bilgisayar, dizüstü bilgisayar, tablet bilgisayar dediğimiz şeyler zaten bilgisayar.
  • Akıllı telefonunuz bir bilgisayar. Düşünsenize, ona da uygulamalar kuruyorsunuz. Birtakım verileri saklıyor, size bunları sunabiliyor.
  • Peki akıllı olmayan telefonlar? En azından bir hesap makinesi, bir takvimi var. Hatırlatıcıları, alarmları var. Hepsini kenara koyalım, bunlar nispeten basit kalır bu cihazlar için. Sesinizi alıp, dijitalleştirip, başka bir noktaya gönderebiliyor. Önemli bir iş bence. Kendi kendine bunu yapabilen var mı aramızda?
  • SIM kartlarınızın her biri kendi başına bir bilgisayar. Ciddiyim.
  • “Bilgisayar” olarak nitelendirdiğiniz makinelerin içinde birden fazla bilgisayar var. Grafik işlemciniz, merkezi işlemciniz, bunların çekirdekleri, Wi-Fi kartınız… Bu parçaların her biri de hesaplama yeteneğine sahip, veri işleyen cihazlar. Her birini ayrı bir bilgisayar olarak kabul edebiliriz.
  • Çamaşır makinesi, bulaşık makinesi, buzdolabı gibi eşyalar? Belirli durumları takip edip ona göre karar vermiyorlar mı? Ne zaman ısıtacak, ne zaman soğutacak, kaç dereceye kadar ısıtıp soğutacak, ne kadar süre iş yapacak, hangi temizlik maddesini sürece ne zaman dahil edecek? Bunlar önemli sorular ve bunların hepsine yanıt verebiliyorlar. Çoğunun üzerinde hazır programlar da geliyor. Hatta bu programları isteğinize göre düzenleme şansına da sahipsiniz.

Özetle, çok bilgisayar var.

Neyi, Nasıl Programlayalım?

Düşünün. İnsanların yaptığı birtakım hesaplama işlerini, aygıtlara devredeceksiniz. Onlara yeni bir dünyayı öğretmelisiniz. Sayı sistemlerini, veriyi saklamayı, verileri ilişkilendirmeyi, girdi almayı, çıktı vermeyi… Hayli uğraştırıcı bir süreç. Velev ki öğrettik. Süper. Şimdi ne olacak?

“Yoda mimarisine sahip, Death Star anakartlarla uyumlu, Jedi RAM’lere sahip bir bilgisayarı” programladık. Günümüz dünyası böyle mi? Amaca yönelik onlarca farklı parça, bu parçaların yüzlerce farklı modeli var. Fakat biz sadece belirli parçaların bir araya gelmesiyle oluşmuş bilgisayar ile konuşmayı öğrenmiştik ve işimiz daha yeni bitmişti. “CPU yeterli gelmiyor, yenisini ekleyelim ya da var olanı değiştirelim.” dediğinizde başınıza neler geleceğini kestirebiliyor musunuz? O artık apayrı bir cihaz oldu ve ne yapacağına dair en ufak bir fikri yok.

Daha bariz bir örnek verelim. Mobil uygulamalar. Gerçekten piyasadaki tüm telefonlar için oturup tek tek bir uygulama yazmamız gerekiyor aslında. Yoksa nasıl çalışabilirler ki? Neyse ki böyle bir derdimiz yok. Merak etmeyin, işletim sistemine geçiyoruz yavaş yavaş.

Hardware Abstraction (Donanım Soyutlaması?)

Hardware abstraction; programların, donanım kaynaklarına, programlama arabirimleri üzerinden erişebilmesini sağlayan rutinler kümesidir. Emin olun ben de hiçbir şey anlamadım.^6

Şöyle düşünelim. Bir donanıma iş yaptırmak istiyoruz. Ona birtakım komutlar (instruction) veriyoruz. Çalışıyor. Fakat birçok farklı mimaride birçok farklı modelde donanımlar çıkıyor ortaya. Bu durumda bir arabirimi, bir yardımcıyı kullanmak istiyoruz. “Tercüman”ları kullanıyoruz. Hardware abstraction donanımı biliyor ve bizim ilettiğimiz komutları, donanımın anlayacağı hâle getiriyor. Böylelikle her donanım için ayrı ayrı komut setleri bilmek ve yazmak durumunda kalmıyoruz.

Wikipedia’daki makalede joystick örneği verilmiş. Aklıma yattı. Neredeyse bütün kontrolörler birbirinden farklı ama neredeyse hepsi aynı. Birtakım düğmelere basıyoruz ve bir şeyleri kontrol etmek istiyoruz. Geliştiriciler, farklı joystick’ler için farklı girdiler beklemiyorlar. Ya da cihazın teknik detaylarında boğulmak zorunda kalmıyorlar.

Yine Wikipedia’dan farklı bir metafor var. Bisiklet kullanmak da araba kullanmak da bir ulaşım yöntemi. İkisinde de benzer şeyler var. Tekerlek, direksiyon, koltuk gibi. Hardware abstraction sayesinde “sürüş” odağının etrafında kendi uygulamalarımızı geliştirebiliyoruz.

Eminim sadece hardware abstraction için bir dönem ders verilir. Belki daha da fazla. O yüzden burayı havada bırakıp işletim sistemine geçiş yapıyorum.

Geçmeden önce, şu iki makaleyi okumanızı öneririm:

İşletim Sistemi Nedir?

İşletim sistemi (Operating System, OS) için, bir bilgisayarın kaynaklarının programlar arasında paylaştırılmasından ve bu programların çalıştırılmasından sorumlu “maestro” olarak bahsedebiliriz. Hatta dilerseniz sensei, Usta Splinter ya da Excal1bur_1337 bile diyebiliriz.

Bilgisayarınızda var olan çalıştırılabilir kod setleri birer programdır. Gerekli etkileşimleri sağlarsanız – çift tıklama, komut satırı arayüzü (CLI) üzerinden girdiler ya da zamanlanmış görevler gibi – bu programları çalıştırırsınız. Programlar çalıştırdıklarında birer “işlem”e (süreç, process) dönüşürler. Hemen bir özgür yazılım olan VLC Media Player’ı ele alalım. Programı kurdunuz. Diskinizde bir yer tutuyor. Sonrasında çalıştırdınız, bir process oldu. Bu process şunları yapabilir:

  • Diskinizden veri okuyabilir. Bunu yapmazsa zaten ne videoları ekranınızda gösterebilir, ne de sesleri çalabilir.
  • Kendi bileşenlerinin ve okuduğu verinin bir kısmını ya da tamamını RAM’e yazabilir. Bunu yapamazsa zaten çalışamaz. İsmini John von Neumann’dan alan “von Neumann” mimarisini inceleyiniz.^7
  • Veriyi işlemek için CPU’nuzu kullanabilir.
  • Görüntüyü ekrana verebilmek için GPU’nuzu kullanabilir.
  • Medya bilgilerini Internet üzerinden çekmek ya da kendi güncellemelerini denetlemek için ağ kartlarınızı kullanabilir.
  • Sesi dışarıya vermek için ses kartınızı kullanabilir.

Örnekleri artırabiliriz. Bu sadece bir video izlemek için yaşadığımız süreç. Günümüz bilgisayarlarında bir video klibi izlerken oyun oynamak, bu sırada oyunun görüntüsünü ve seslerini kaydetmek, aynı zamanda Internet üzerinden hem oyun görüntüsü hem de web cam’den alınan görüntüyü yayınlamak, tüm bunlar olurken de arkaplanda bazı uygulamaları güncellemek ya da bazı dokümanları indirmek sıradan bir etkinlik olarak görülüyor.

Hatırlarsanız, işletim sisteminin görevi olarak “kaynakların programlar arasında paylaştırılması” demiştik. Sanırım şimdi daha anlamlı olmuştur.

Şimdi kullandığınız herhangi bir yazılımı düşünün. Bir dosyayı hazırladınız ve kaydetmek istediniz. Kaydetme başarısız oldu. Çünkü diskiniz dolu. Ne kadar hoş bir yaklaşım. Bunu yapmak yerine rastgele bazı dosyaları silip kendine yer açabilirdi değil mi? Meh.

Ya da herhangi bir program, kendi hâlinde çok iyi çalışıyorken yanında farklı programlar çalıştırıldığında biraz zorlanmaya başlayabilir. “Kasıyor” değil mi? Halbuki madem bu kaynakları kullanabiliyor, neden hepsini kendine ayırmıyor?

Günümüzde geliştirilen programların donanıma doğrudan müdahale etmesi söz konusu değildir. Sistem yazılımlarını, sürücüleri vs. ayrı tutuyorum tabii ki. Sıradan bir kullanıcı olarak açıp çalıştırdığımız, “uygulama yazılımı” olarak anılan programlardan bahsediyorum. Eğer doğrudan müdahale edebiliyor olsaydık da, hardware abstraction’da değindiğimiz her donanıma ayrı yazılım mantığına girişmek zorunda kalacaktık. İşte işletim sistemi burada devreye giriyor.

İşletim sistemi, donanım ile yazılımlar arasında bir katman olarak düşünülebilir. Bilgisayarınızda koşan yazılımlar, donanım ile etkileşime geçmek istediklerinde bunu işletim sisteminden talep ederler. Ve eğer talep karşılanabilir bir durumdaysa, yerine getirilebilir. Hani bazen aynı anda 1-2 işi yürütmeye çalışırken izlediğiniz videonun sesi bir titrer, sonra toparlanır. Ya da ne bileyim, bir programı çalıştırırken bazen her zamankinden daha yavaş açılır ya. Alakası var mı dersiniz?

İşletim sisteminin katmanlı yapısı (https://en.wikipedia.org/wiki/File:Operating_system_placement.svg)
İşletim sisteminin katmanlı yapısı (https://en.wikipedia.org/wiki/File:Operating_system_placement.svg)

Eğlenceli Bilgi

Eskiden Dünya falan yoktu. Toz ve gaz bulutuydu vs. Sonrasında delikli kartlar hayatımıza girdi. Bir bilgisayara instruction’lar delikli kartlar sayesinde yükleniyordu. Bilgisayarlar bu delikleri ya da delik olmayan yerleri okuyup gerekli işlemleri yapıyordu. “Ya bilgisayar dediğin şey var ya 1’ler ve 0’lar işte.” mantığımız bir zamanlar da buydu: Delik ya da değil.^8 Tabii herhangi bir instruction’ı yanlış verdiyseniz, bütün sistem duruyordu. Çünkü programınız hatalı. Bazı hatalar için bütün kartı baştan oluşturmanız (delmeniz) gerekebilirdi. Bazen bir deliği unuttuğunuz fark eder, hemen delerdiniz. Bazen de “eyvah burayı yanlışlıkla delmişiz” durumuna düşer ve o deliğe “yama (patch)” yapardınız. Günümüzde kullanılan “yazılım yaması” kavramı, buradan geliyor.^9 Üzgünüm ama yamaların ilk olayı, hataları gidermekti. O yüzden bugün gördüğüm “Türkçe spiker yaması” ya da “GTA Kurtlar Vadisi yaması” bana komik geliyor. Madem fun fact paragrafına döndük, 9 Eylül 1947 15:45’te Harvard Mark II Aiken Relay Calculator cihazının F panelinin 70. rölesinde görülen bir “böcek (bug)”, programın çalışmasını durduğu gerekçesiyle kayıt altına alındı. Yani ilk bug, gerçekten de bir böcekti.^10 Edison’un bu kavramı daha önceden kullandığı biliniyor ama Edison’u sevmiyorum. Nikola TESLA!!!

Almanya'da öğrenciler delikli kartları kullanarak programlama yapıyor (1970) (Bundesarchiv, B 145 Bild-F031434-0006 / Gathmann, Jens / CC-BY-SA 3.0)
Almanya’da öğrenciler delikli kartları kullanarak programlama yapıyor. – 1970 (Bundesarchiv, B 145 Bild-F031434-0006 / Gathmann, Jens / CC-BY-SA 3.0)
Harvard Mark I makinesinde çalıştırılan kodlar. Yamalara dikkat edin. - 1944 (https://commons.wikimedia.org/wiki/File:Harvard_Mark_I_program_tape.agr.jpg)
Harvard Mark I makinesinde çalıştırılan kodlar. Yamalara dikkat edin. – 1944 (https://commons.wikimedia.org/wiki/File:Harvard_Mark_I_program_tape.agr.jpg)

Multiprogramming vs. Multitasking

İlerleyen zamanlarda bu bilgisayarlara birden fazla delikli kart seti yükleyebilir hâle geldik. Bu da bizi “batch system” dönemine getirdi. Bu dönemdeki bilgisayarlar “multiprogramming” çalışıyordu. Yani bir program çalışıyor, bitiyor. Sonrasında sıradaki program çalışıyordu. Günümüzde ise “multitasking (timesharing)” sistemler kullanıyoruz. Tüm kaynaklar, tüm işlemler arasında paylaştırılıyor – en azından deneniyor – ve her işlem, saniyenin belirli bir oranı kadar çalıştırılıp sonrasında bir sonraki işleme geçiliyor. Bu sayede aynı anda birden fazla işi yapabiliyoruz. Müzik dinlerken e-posta gönderebilmek, bunu yaparken arkaplanda bir şeyler indirmek, bir dosyayı başka bir yere kopyalamak, yazıcıdan çıktı almak gibi işleri düşünebilirsiniz. Tüm bu işler aynı anda yapılıyor gibi görünse de aslında birbirlerini bekleyerek ilerliyorlar. Sadece bunu fark etmiyoruz. Tüm bu süreci bize fark ettirmeden yöneten yazılım grubu ise işletim sistemidir.

Yazılım grubu diyorum, çünkü tipik bir işletim sistemi tek bir yazılım değildir. Çekirdeği (kernel), girdi/çıktı modülleri, bellek yönetim modülleri gibi farklı programları vardır. Daha kolay örnekler verelim. Kurduğunuz işletim sisteminin içerisinde notlarınızı yazabileceğiniz yazılımlar, medya oynatıcı, hesap makinesi, takvim, e-posta istemcisi, çeşitli ayarları yapabileceğiniz araçlar da geliyor. Bunların bütünü, işletim sistemini oluşturur. Bu nedenle bazı kaynaklarda işletim sistemi tanımı olarak “üreticinin size gönderdiği yazılım paketi” gibi ifadeler de görebilirsiniz.

İşletim Sistemini Özel Kılan Nedir?

İşletim sistemini diğer yazılımlardan ayıran bazı özellikleri şu şekilde sıralayabiliriz. Burada yazacağım özellikler, işletim sisteminin yalnızca bazı parçalarına ait olsa da, genele baktığımızda işletim sisteminin özelliği diyebiliriz:

  • Donanıma müdahale eder.
  • Bilgisayarın açılışından itibaren çalışmaya başlar. Bilgisayar kapanıncaya kadar çalışmaya devam eder (Bu tehlikeli bir cümle, bir bilgisayarın nasıl açıldığı ve kapandığı apayrı bir konu. Yeri ve zamanı geldiğinde çalışmaya başlar desek daha doğru olur.). Eğer çalışmaya devam edemezse, bilgisayarınızı kullanamaz hâle gelirsiniz. Sayın Windows kullanıcıları, mavi ekranı hatırladınız mı?
  • Donanımın büyük çoğunluğunu, kendini korumak için kullanır. Bilgisayarınızı kullanırken, şayet işletim sisteminin öncelikli bir işi varsa, önce bunu yapar. Size yanıt vermez. Başka bir deyişle, sistem kalp krizi geçiriyorken kolunu kaşımakla vakit harcamaz.
  • Kullanıcıdan ve diğer programlardan gelen istekleri alır ve uygun gördüğü takdirde işler. Yani aslında siz sadece işletim sistemini kullanıyorsunuz. Kalan bütün uygulamaları işletim sistemi kendisi kullanıyor.
  • İçerdiği – ya da sonradan eklenebilen – sürücüler sayesinde donanımınızı tanır ve kullanılabilir hâle getirir. Örneğin standart bir Android işletim sistemini alıp kişisel bilgisayarınıza kuramazsınız. Ya da kişisel bilgisayarınıza kurabildiğiniz Windows’u, Nokia 3310’a kuramazsınız. “Standart” kelimesini tekrar vurgulamak istiyorum.

Kamu spotu: Windows kullanmayın.

Cenevre Havalimanı'ndaki bir Windows cihazda görülen "Blue Screen of Death (BSoD)" - 1999 (https://en.wikipedia.org/wiki/File:Windows_NT_BSOD_at_GVA_baggage_claim,_1999-10-03.jpg)
Cenevre Havalimanı’ndaki bir Windows cihazda görülen “Blue Screen of Death (BSoD)” – 1999 (https://en.wikipedia.org/wiki/File:Windows_NT_BSOD_at_GVA_baggage_claim,_1999-10-03.jpg)

Bir Linux sistemden "Kernel Panic" mesajı. (https://commons.wikimedia.org/wiki/File:Kernel-panic.jpg)
Bir Linux sistemden “Kernel Panic” mesajı. (https://commons.wikimedia.org/wiki/File:Kernel-panic.jpg)

İşletim sisteminin görevleri konusunda da şu örnekleri verebiliriz:

  • Kullanıcı yazılımlarının çalıştırılması.
  • Yazılımlar arasında CPU, RAM gibi kaynakların paylaştırılması.
  • Yazılımların önceliklerinin ve çalıştırılma sıralarının belirlenmesi.
  • Hard disk, SSD gibi ortamlarda saklanan verinin yönetilmesi.
  • Çok çekirdekli, çok thread’li sistemlerde iş paylaşımının yapılması.
  • Klavye, fare, mikrofon, hoparlör, ekran gibi donanımlar üzerinden gelen girdilerin ya da bu donanımlar sayesinde verilen çıktıların yönetilmesi.

Sonuç Olarak

İşletim sistemleri apayrı bir uzmanlık alanı. Bu yazıda yer alan içerik aşırı büyük ölçüde eksik. Teknik detaydan da oldukça uzak. Sizlere tavsiyem, üniversitelerin İşletim Sistemi derslerinin kaynaklarını incelemeniz. Mümkünse bu konuda ders almanız. Sonrasında bir bilgisayarı kullanırken ona gerçekten daha farklı bakmaya başlayacağınızı düşünüyorum. Her ne kadar çok yüzeysel bilgiler olsa da, umarım birilerine faydalı olur.

Elimden geldiğince, bu konudaki alt başlıkları da inceleyen yazılar hazırlayacağım.

Bağlantılar

1 – A. M. TURING, I.—COMPUTING MACHINERY AND INTELLIGENCE, Mind, Volume LIX, Sayı 236, October 1950, Sayfa 433–460, https://doi.org/10.1093/mind/LIX.236.433

2 – The Imitation Game (2014) – https://www.imdb.com/title/tt2084970/

3 – Michael R. Swaine, Computer, https://www.britannica.com/technology/computer

4 – Computer (job description) https://en.wikipedia.org/wiki/Computer_(job_description)

5 – Prof. Dr. Aydın KÖKSAL, Yaşamöyküm, https://aydinkoksal.gen.tr/ozgecmis.html , https://aydinkoksal.gen.tr/gorseller/is-38.html

6 – Hardware Abstraction, https://en.wikipedia.org/wiki/Hardware_abstraction

7 – Von Neumann Architecture, https://en.wikipedia.org/wiki/Von_Neumann_architecture

8 – Computer Programming in the Punched Card Era, https://en.wikipedia.org/wiki/Computer_programming_in_the_punched_card_era

9 – Patch (Computing) https://en.wikipedia.org/wiki/Patch_(computing)#History

10 – The Origin of the Term Computer Bug, https://interestingengineering.com/the-origin-of-the-term-computer-bug