Linux ve Özgürlük Metaforu: Özgür Yazılım Gerçekte Neyin Özgürlüğüdür?

Linux denince çoğu kişinin zihninde terminal ekranları, penguen maskotları ve “bedava işletim sistemi” fikri belirir. Richard Stallman’ın savunduğu özgür yazılım ise bunlardan daha büyük, hatta politik bir iddiadır: Yazılımı kullanan insan, onu üreten kurumun pasif müşterisi olmamalıdır. Buradaki özgürlük, fiyat etiketiyle değil; bireyin teknoloji karşısındaki iradesiyle ilgilidir.

Devamı...

Linux Sunucularda Görünmez Emek: İnternetin Sessiz Omurgası

Bir web sitesine girdiğimizde gördüğümüz şey genellikle tasarım, içerik ve birkaç saniyelik kullanıcı deneyimidir. Oysa bu kısa anın arkasında; paketleri güncelleyen, disk doluluklarını takip eden, sertifikaları yenileyen, gecenin üçünde alarm mesajına uyanan insanlar ve çoğunlukla Linux çalışan makineler vardır. İnternetin büyük bölümü, kullanıcı için görünmez kalması hedeflenen bu altyapı sayesinde ayaktadır. İlginç paradoks da tam burada başlar: Bir sistem ne kadar iyi yönetilirse, onu yöneten emeğin fark edilme ihtimali o kadar azalır.

linux-sunucularda-gorunmez-28

Devamı...

Linux Forumlarındaki RTFM Kültürü: Yardımseverlik ile Kabalık Arasındaki İnce Çizgi

Linux forumlarında yeni bir kullanıcının ilk hata mesajıyla karşılaşması, çoğu zaman yalnızca teknik değil, kültürel bir eşiktir. “RTFM” — Read The Fine Manual ya da daha sert tarihsel yorumuyla Read The Fucking Manual — bilgiye erişimin kolay olduğu bir dünyada emeğe saygı çağrısıdır. Fakat bu kısa cevap, bağlama göre öğretici bir yönlendirme de olabilir, kapıyı suratına kapatan bir topluluk ritüeli de.

Devamı...

Linux Çekirdeğinin Demokrasisi: Binlerce Gönüllü Bir Sistemi Nasıl Yönetiyor?

Linux çekirdeği, tek bir merkezî otoritenin yazdığı dev bir program değildir; şirket çalışanları, bağımsız geliştiriciler, akademisyenler ve donanım üreticilerinden oluşan küresel bir ağın ortak ürünüdür. Bu ağın başarısı, “herkes eşit oy kullanır” türünden saf bir demokrasiye değil; teknik uzmanlık, itibar, şeffaf müzakere ve yetki devrine dayanan karma bir yönetişim modeline dayanır. Dolayısıyla Linux’u anlamak, yalnızca C kodu okumak değil, dijital çağda katılımın nasıl örgütlenebileceğini incelemektir.

Devamı...

Konteyner Devrimi: Docker Linux'u Nasıl Yeniden İcat Etti?

Docker, Linux’a yeni bir çekirdek eklemedi; daha ilginç bir şey yaptı: Çekirdeğin yıllardır sunduğu izolasyon mekanizmalarını geliştiricinin günlük iş akışına taşıdı. Böylece “benim makinemde çalışıyor” cümlesi, yazılım dünyasının en meşhur mazeretlerinden biri olmaktan çıkmaya başladı. Konteynerler, uygulamayı kodu, bağımlılıkları, çalışma zamanı ve yapılandırmasıyla birlikte paketleyerek işletim sistemi tasarımına daha modüler bir bakış getirdi.

Devamı...

Kernel Panic Anının Fenomenolojisi: Bir Sistemin Çökmesini İzlemek Neden Rahatsız Eder?

Bir kernel panic ekranı teknik olarak yalnızca işletim sisteminin devam etmenin güvenli olmadığına karar verdiği andır. Fakat ekrana düşen anlaşılmaz adresler, donmuş imleç ve tepki vermeyen klavye; kullanıcıda basit bir hata mesajından çok daha güçlü bir his uyandırır: Kontrol kaybı. Bu deneyim, dijital araçlarla kurduğumuz ilişkinin ne kadar duygusal ve bedensel olabildiğini gösterir.

Devamı...

Kendi Sanal Makinen: Bayt Kodundan Montaj Dili Yorumlayıcısına

Bir sanal makine (VM) tasarlamak, bilgisayarların sihirli görünen çalışma biçimini küçük ve yönetilebilir parçalara ayırmanın harika yoludur. Bu projede gerçek bir işlemciyi taklit etmeye çalışmayacağız; bunun yerine kendi komut kümesine, kayıtçılarına ve belleğine sahip minik bir işlemci oluşturacağız. Ardından bu işlemcinin anlayacağı bayt kodunu tanımlayıp, insanlar için daha okunabilir bir montaj dili yorumlayıcısı yazacağız. Sonuç: LOAD, ADD ve JMP gibi komutlarla program çalıştıran oyuncak ama öğretici bir bilgisayar.

Devamı...

Kelebek Etkisini Kodlamak: Deterministik Lorenz Çekici Simülasyonu

kelebek-etkisini-kodlamak-31

Bir kelebeğin kanat çırpışı gerçekten fırtına yaratır mı? Meteorolojik anlamda bu cümle biraz şiirseldir; fakat Lorenz çekicisi, çok daha ilginç bir gerçeği gösterir: Sistem tamamen deterministik kurallarla çalışsa bile başlangıçtaki ufacık farklar zamanla devasa sonuçlara dönüşebilir. Bu projede aynı denklemleri iki neredeyse özdeş başlangıç noktasıyla çözecek, ardından yollarının nasıl ayrıldığını izleyeceğiz.

Devamı...

Ham Baytlardan Görüntüye: BMP Ayrıştırarak JPEG ve PNG Sıkıştırmasının Matematiğini Anlamak

Bir görüntü dosyası, ekranda gördüğümüz renkli karelerden çok daha fazlasıdır: başlıklar, piksel dizileri, satır hizalama kuralları ve bazen karmaşık sıkıştırma akışları içerir. JPEG ya da PNG kod çözücüsünü çağırmadan bir dosyayı ham baytlarına ayırıp yeniden kurmak, bu katmanları görünür hâle getirir. Başlangıç için BMP idealdir; çoğu BMP dosyası pikselleri neredeyse doğrudan saklar. Ardından aynı bakış açısını PNG filtreleri ve JPEG dönüşümlerine taşıyabiliriz.

Devamı...

Görüntüleri Renkli ASCII Terminal Tablolarına Dönüştürme

goruntuleri-renkli-ascii-50

Bir fotoğrafı terminalde yalnızca karakterler ve renklerle yeniden üretmek, nostaljik görünen ama oldukça öğretici bir görüntü işleme projesidir. Temel fikir basittir: Görüntüdeki her küçük piksel bölgesini, parlaklığı temsil eden bir ASCII karakterine ve o bölgenin rengini taşıyan ANSI kaçış koduna dönüştürürüz. Sonuç, terminal penceresinde çalışan mini bir renkli mozaiktir.

Devamı...

Genetik Algoritma ile Yürümeyi Öğrenen Robot Motoru

genetik-algoritma-ile-55

Bir robotun yürümeyi öğrenmesi, ona tek tek “sol bacağını kaldır, şimdi sağa bas” komutları vermekten çok daha eğlenceli bir problemdir. Bunun yerine robotun hareket kontrolcülerini bir DNA dizisi gibi düşünebilir, yüzlerce farklı davranışı sanal ortamda yarıştırabiliriz. Başarılı hareket edenler hayatta kalır, başarılı özellikler çaprazlanır ve küçük rastlantısal mutasyonlar yeni çözümler üretir. İşte genetik algoritma motorunun temel fikri budur.

Devamı...

Eşzamanlılık ve İş Parçacıkları: Çok Çekirdeği Akıllıca Kullanmak

eszamanlilik-ve-is-56

Modern işlemciler artık saat hızını sınırsız artırmak yerine birden fazla çekirdekle güçleniyor. Bir uygulamanın bu gücü kullanabilmesi için işleri bağımsız parçalara bölmesi, bu parçaları iş parçacıklarında (thread) çalıştırması ve ortak belleğe erişimi dikkatle düzenlemesi gerekir. Ancak multithreading, uygulamayı otomatik olarak hızlandıran sihirli bir değnek değildir; doğru tasarlanmadığında yarış koşulları, kilitlenmeler ve zor tekrarlanan hatalar üretir.

Devamı...

Dotfiles Kültürü: .bashrc Dosyanız Dijital Kişiliğinizi Ele Verir mi?

Bir geliştiricinin bilgisayarına kısa süreliğine oturduğunuzda, terminal açılır açılmaz karakteri hakkında ipuçları toplamaya başlarsınız: rengârenk bir prompt, dikkatle seçilmiş takma adlar, sessizce çalışan araçlar ve belki de yıllardır taşınan bir ASCII sanat eseri. Dotfiles — .bashrc, .zshrc, .gitconfig, vimrc ve benzerleri — yalnızca ayar deposu değildir; çalışma alışkanlıklarının, estetik tercihlerin ve teknik dünya görüşünün küçük bir arşividir.

dotfiles-kulturu-bashrc-67

Devamı...

Dağıtım Savaşları: Ubuntu, Arch ve Debian Neden Uzlaşamıyor?

Linux dünyasında “en iyi dağıtım hangisi?” sorusu, teknik bir öneri istemekten çok kimlik, alışkanlık ve değerler hakkında konuşma başlatır. Ubuntu kullanıcısı bilgisayarın işini kolaylaştırmasını beklerken, Arch kullanıcısı sistemin her vidasını tanımak isteyebilir; Debian kullanıcısı ise yıllarca değişmeden çalışan bir altyapıyı en büyük başarı sayabilir. Bu yüzden tartışmanın tek bir kazananı yoktur: “en iyi”, kullanıcının öncelik fonksiyonuna bağlıdır.

Devamı...

C++ Akıllı İşaretçiler: RAII ile Güvenli Bellek Yönetimi

C++’ta new ile bellek ayırmak kolay, onu her yürütme yolunda doğru zamanda delete etmek ise şaşırtıcı derecede zordur. Erken return, fırlatılan bir istisna veya sahipliği belirsiz bir işaretçi; bellek sızıntısı, çift silme ve geçersiz belleğe erişim gibi klasik hatalara davetiye çıkarır. Modern C++’ın cevabı akıllı işaretçilerdir: Kaynağın ömrünü nesnenin ömrüne bağlayan, RAII tabanlı küçük ama güçlü sınıflar.

Devamı...

Bir Dağıtımdan Diğerine Göç Etmek: Dijital Bir Yer Değiştirme Ritüeli mi?

Bir Linux dağıtımından diğerine geçmek, çoğu zaman yalnızca paket yöneticisini değiştirmek değildir. Fedora’dan Debian’a, Arch’tan NixOS’a ya da Ubuntu’dan openSUSE’ye giden kişi; komutlarını, hata çözme reflekslerini, masaüstü düzenini ve hatta bilgisayarıyla kurduğu güven ilişkisini yeniden müzakere eder. Bu nedenle sistem göçü, teknik bir kurulum işlemi olmanın yanında küçük ölçekli bir dijital yer değiştirme ritüelidir.

Devamı...

apt’tan Nix’e: Paket Yöneticilerinin Bağımlılık Savaşları

Bir yazılımı çalıştırmak eskiden “dosyayı kopyala ve aç” kadar basitti. Sonra kütüphaneler, sürüm beklentileri, derleyiciler ve işletim sistemi paketleri sahneye çıktı. Bugün bir projenin çalışması için yalnızca kodun değil, kodun konuştuğu bütün çevrenin de doğru biçimde kurulması gerekir. Paket yöneticilerinin tarihi, aslında bu görünmez bağımlılık ağını evcilleştirme girişimlerinin kısa ama oldukça hareketli tarihidir.

Devamı...

Açık Kaynakta Statü: Commit Sayısı Saygının Kısayolu mu?

Açık kaynak dünyası ilk bakışta çekici bir vaatte bulunur: Kodun iyiyse, katkın görünürse ve problemi çözüyorsan saygıyı hak edersin. Bu anlatı, unvanlardan çok emeğin konuştuğu bir meritokrasi hayali kurar. Fakat bir depodaki commit sayısı, bir kişinin topluluk içindeki etkisini veya saygınlığını gerçekten ölçer mi? Sosyolojik açıdan yanıt, rahatsız edici derecede karmaşıktır.

Devamı...

Açık Kaynak Lisanslarının Ahlaki Mimarisi: GPL, MIT ve BSD

Bir depoyu herkese açık yapmak, kodu ahlaki olarak “sahipsiz” ilan etmek değildir. Açık kaynak lisansları, üreticinin emeği ile topluluğun yeniden kullanma hakkı arasında kurulan sosyal sözleşmelerdir. GPL, MIT ve BSD aynı kaynak koduna erişim fikrini paylaşsa da özgürlüğün ne anlama geldiği konusunda farklı bir mimari önerir: Özgürlük, sonraki kullanıcıya garanti edilen bir hak mıdır; yoksa ilk kullanıcının olabildiğince az engelle karşılaşması mı?

acik-kaynak-lisanslarinin-64

Devamı...

Struct'lar ile Veri Gruplama: Bellekte Düzenli Gerçek Dünya Modelleri

structlar-ile-veri-12

Programlamada gerçek dünya nesneleri nadiren tek bir değerden oluşur. Bir öğrencinin adı, numarası ve notu; bir oyun karakterinin koordinatları, canı ve seviyesi vardır. Bu bilgileri birbirinden kopuk değişkenlerde tutmak kısa örneklerde işe yarasa da uygulama büyüdükçe yönetilemez hale gelir. Yapılar (structs), farklı türlerdeki verileri mantıksal olarak tek bir varlık altında toplayan temel veri iskeletleridir.

Devamı...