Saturday, September 19, 2026

Çakılan access point’i loglamak: bölüm 2.

Bir önceki bölümün sonunda ASUS RP-N12'ye bir çeşit kara kutu takmıştık.

Cihazın kendi syslog'u RAM üzerinde tutulduğu için RP-N12 kilitlendiğinde veya yeniden başladığında asıl görmek istediğimiz kayıtların kaybolma ihtimali vardı. Bu nedenle Windows bilgisayarda UDP/514 dinleyen küçük bir Python programı kurduk. RP-N12 bütün kernel ve sistem mesajlarını ağ üzerinden bu bilgisayara göndermeye başladı.

Task Scheduler sayesinde logger Windows açıldığında otomatik başlıyor, bilgisayarın kendi zaman damgasını da her satıra ekliyordu.

Sonra yapılacak pek bir şey kalmamıştı.

RP-N12 çalışmaya devam edecekti.

Biz de bozulmasını bekleyecektik.

Kara kutunun ilk ciddi kaydı için fazla beklemek gerekmedi.


04:36 — Kernel Bellek Ayıramıyor

18 Eylül 2026, saat 04:36:45.

Syslog dosyasına bir anda uzun bir kernel dump'ı düşmeye başladı.

İçindeki en önemli satırlardan biri şuydu:

SLUB: Unable to allocate memory on node -1 (gfp=0x20)

cache: kmalloc-8192
object size: 8192
buffer size: 8192
default order: 3
min order: 1

node 0:
slabs: 95
objs: 269
free: 0

Ardından kernel mevcut belleğin durumunu da döktü:

free:50
slab_reclaimable:133
slab_unreclaimable:1435

Normal free:200kB
min:508kB
low:632kB
high:760kB

slab_reclaimable:532kB
slab_unreclaimable:5740kB

Ve buddy allocator'ın elindeki fiziksel sayfalar:

Normal:

26*4kB
0*8kB
4*16kB
1*32kB
0*64kB
0*128kB
0*256kB
0*512kB
0*1024kB
0*2048kB
0*4096kB

= 200kB

Bu artık RP-N12'nin “arada bir saçmalıyor” seviyesinde bir belirti değildi.

Linux kernel gerçekten bir bellek tahsis isteğini karşılayamamıştı.

Fakat burada hemen “RAM bitti” veya “memory leak bulduk” demek de doğru değildi.

Olay biraz daha ilginçti.


8 KB Ayıramayan Linux

Hatanın merkezinde şu cache vardı:

kmalloc-8192

Linux kernel'deki kmalloc() fiziksel kernel belleğinden küçük nesneler ayırmak için kullanılan temel mekanizmalardan biri.

kmalloc-8192 ise 8192 byte, yani 8 KiB büyüklüğündeki nesneler için kullanılan slab cache.

Kernel o anda 8 KiB'lık bir tahsis yapmaya çalışmış ve başarısız olmuştu.

8 KiB bugün kullandığımız bilgisayarlar açısından komik derecede küçük bir miktar.

Ama RP-N12'nin dünyasında durum biraz farklı.

Kernel dump'ının ilerleyen satırlarında şunu görüyoruz:

4096 pages RAM
646 pages reserved

MIPS kernel'imizde sayfa boyutu 4096 byte.

Dolayısıyla fiziksel RAM:

4096 × 4096
= 16,777,216 byte
= 16 MiB

RP-N12'nin bütün fiziksel belleği yalnızca 16 MiB.

Bunun da tamamını Linux kullanamıyor.

Canlı sistemde /proc/meminfo:

MemTotal: 13864 kB

gösteriyordu.

Yani kernel, ayrılmış fiziksel bölgeler ve diğer düşük seviye ihtiyaçlardan sonra Linux'un hesapladığı kullanılabilir RAM yaklaşık 13.5 MiB.

Ve bu küçücük alanın içinde Linux kernel, Wi-Fi sürücüsü, Ethernet, network stack, web arayüzü, dnsmasq, watchdog, syslog, telnet ve geri kalan her şey birlikte yaşıyor.


MemFree Neden Tek Başına Yeterli Değil?

Olaydan önce yaptığımız ölçümlerde şuna benzer değerler görüyorduk:

MemTotal:       13864 kB
MemFree:         1244 kB
Buffers:         1184 kB
Cached:          2556 kB
Slab:            4892 kB
SReclaimable:     532 kB
SUnreclaim:      4360 kB

İlk bakışta:

“Sadece 1.2 MB RAM kalmış.”

demek mümkün.

Ama Linux belleği böyle okunmuyor.

Boş RAM'in bir kısmını cache olarak kullanmak Linux için normal. Gerektiğinde bazı cache'ler geri alınabilir.

Bu nedenle bizi asıl ilgilendiren başka bir alan vardı:

Slab

Slab allocator kernel'in sürekli oluşturup yok ettiği küçük nesneleri verimli biçimde yönetmek için kullandığı bellek sistemi.

Örneğin dosya sistemi yapıları, network yapıları, socket'ler, çeşitli kernel objeleri ve kmalloc cache'leri burada bulunabiliyor.

Slab belleğinin iki önemli kısmı var:

SReclaimable
SUnreclaim

SReclaimable, kernel'in gerektiğinde geri kazanabileceği slab belleği.

SUnreclaim ise kolayca geri alınamayan aktif kernel nesneleri.

Bizim ilk baseline ölçümlerimiz:

SUnreclaim: 4332 kB
SUnreclaim: 4360 kB

civarındaydı.

Bellek tahsis hatası anında kernel'in verdiği değer ise:

slab_unreclaimable:5740kB

oldu.

Yaklaşık 1.4 MiB artış.

16 MiB fiziksel RAM'li bir sistem için 1.4 MiB küçük bir değişiklik değil.

Üstelik hata anında toplam unreclaimable slab yaklaşık 5.7 MiB olmuştu.

Fiziksel RAM'in üçte birinden fazlası.


Memory Leak mi Bulduk?

Henüz hayır.

Bu noktada ilk güçlü şüphemiz doğal olarak kernel veya Wi-Fi driver tarafında bir slab leak olmasıydı.

Fakat birkaç saat sonra tekrar /proc/meminfo aldığımızda:

MemFree:             948 kB
Buffers:            1172 kB
Cached:             2760 kB

Slab:               5016 kB
SReclaimable:        544 kB
SUnreclaim:         4472 kB

gördük.

Yani hata anında:

5740 kB

olan SUnreclaim, daha sonra:

4472 kB

seviyesine geri inmişti.

Bu önemli.

Eğer bütün artış kalıcı bir leak olsaydı belleğin geri dönmemesini beklerdik.

Dolayısıyla şu aşamada daha doğru ifade:

RP-N12 ciddi bir kernel memory-pressure olayı yaşadı. Unreclaimable slab belirgin biçimde yükseldi ve kernel bir bellek tahsisini gerçekleştiremedi. Ancak elimizde henüz monoton biçimde büyüyen kalıcı bir memory leak kanıtı yok.

Fragmentation da olayın bir parçası olabilir.


RAM Var Ama Uygun RAM Yok

Kernel dump'ındaki en öğretici satırlardan biri buydu:

Normal: 26*4kB 0*8kB 4*16kB 1*32kB ...

Burada Linux buddy allocator'ın o anda elindeki serbest fiziksel blokları görüyoruz.

Toplam:

200 kB

serbest alan bulunuyor.

Ama dağılıma dikkat:

26 × 4 KB
0  × 8 KB
4  × 16 KB
1  × 32 KB

Bellek yalnızca toplam miktardan ibaret değil.

Kernel bazı tahsislerde belirli büyüklükte fiziksel olarak uygun ve contiguous sayfalara ihtiyaç duyuyor.

Logda ayrıca:

page allocation failure. order:1

mesajı da bulunuyordu.

4 KiB sayfalı sistemde order:1 iki ardışık sayfa, yani 8 KiB'lık fiziksel blok anlamına gelir.

Tam da kmalloc-8192 olayımızın büyüklüğü.

Bu yüzden:

“200 KB boş RAM vardı; 8 KB'ı nasıl ayıramadı?”

sorusu ilk bakışta mantıklı görünse de doğru soru değil.

Doğru soru:

“İstenen biçimde uygun fiziksel sayfalar mevcut muydu?”

Kernel'in cevabı o anda hayırdı.


16 MB RAM'den Nasıl Gigabaytlarca Veri Geçiyor?

Bu noktada başka bir soru ortaya çıktı.

RP-N12'nin yalnızca 16 MiB RAM'i varsa televizyona saatlerce video nasıl taşıyabiliyor?

Canlı /proc/net/dev sayacı bize Ethernet tarafında şunu göstermişti:

eth2 RX bytes:
2427196843

Yaklaşık 2.43 GB veri yalnızca o uptime sırasında Ethernet'ten geçmişti.

Aynı zamanda Wi-Fi tarafında:

ra0 TX bytes:
2368736948

yaklaşık 2.37 GB gönderilmişti.

Bu değerler AP'nin yaptığı işi çok güzel gösteriyor:

Ethernet
   |
   | ~2.4 GB
   v
RP-N12
   |
   | ~2.37 GB
   v
Wi-Fi

Peki 16 MB RAM'den 2.4 GB nasıl geçiyor?

Çünkü RAM bir depo değil.

Bir çalışma alanı.


Paket Fabrikası

Klasik Ethernet MTU'su çoğu ağda:

1500 byte

civarında.

Bir byte 8 bit olduğuna göre:

1500 × 8 = 12000 bit

Örneğin 20 Mbit/s trafik için kaba hesap:

20,000,000 / 12,000
≈ 1667 paket/saniye

Gerçek TCP/IP/Ethernet hesabında header'lar, Wi-Fi overhead'i, ACK'ler, retransmission, aggregation ve başka ayrıntılar var; bu yalnızca ölçeği görmek için kaba bir hesap.

Ama temel fikir değişmiyor.

Paket geliyor.

Bir RX buffer'a giriyor.

Network stack paketi işliyor.

Bridge paketi Wi-Fi arayüzüne yönlendiriyor.

TX descriptor hazırlanıyor.

Wi-Fi donanımı paketi gönderiyor.

Buffer serbest bırakılıyor veya tekrar kullanılıyor.

Sonra aynı bellek başka paket için kullanılıyor.

          +-------- RAM --------+
          |                     |
Ethernet -> RX -> bridge -> TX -+-> Wi-Fi
          |                     |
          +---- buffer reuse ---+

RP-N12'nin RAM'i videonun tamamını saklamıyor.

Verinin çok küçük bir bölümünü herhangi bir anda taşıyor.

Bir otoyoldan günde on bin otomobil geçmesi için otoyolun aynı anda on bin otomobili tutabilmesi gerekmediği gibi.


Buffer Gerçekten Büyümeye Başlarsa?

Asıl sorun giriş ve çıkış hızları birbirinden ayrıldığında oluşuyor.

Kabaca:

Queue growth = Rin - Rout

Örneğin Ethernet tarafından:

80 Mbit/s

geliyor fakat Wi-Fi o anda yalnızca:

30 Mbit/s

aktarabiliyorsa fark:

50 Mbit/s

olur.

Bu:

6.25 MB/s

buffer büyüme hızı demek.

Sadece 100 ms böyle devam etse:

625 KB

queue oluşabilir.

16 MiB RAM'li bir cihazda bu artık ihmal edilebilir bir miktar değil.

Gerçekte network stack, queue limitleri, packet drop ve TCP congestion control gibi mekanizmalar bu büyümenin sonsuza kadar sürmesine izin vermez.

Ama bu hesap küçük RAM'li bir AP'de network buffer yönetiminin neden önemli olduğunu gösteriyor.


Netflix 4K Çalışıyor Ama Remote Desktop Sürünüyor

RP-N12 üzerinde yaptığımız başka bir deney de bu noktada anlam kazandı.

LG OLED televizyon üzerinden bilgisayara Remote Desktop bağlandığımda performans son derece kötüydü.

Fakat aynı televizyon aynı AP üzerinden yüksek kaliteli video streaming yapabiliyordu.

İlk bakışta:

“4K video çalışıyorsa masaüstü neden çalışmıyor?”

sorusu oldukça mantıklı.

Fakat ağ açısından bu iki uygulama çok farklı.

Streaming uygulaması gelecekte kullanacağı veriyi önceden indirebilir.

Kabaca:

NETWORK ------------> BUFFER -----------> VIDEO
                       ###########
                             ^
                          playback

Wi-Fi 200 ms kötüleşirse televizyon buffer'daki videoyu oynatmaya devam eder.

Kullanıcı hiçbir şey fark etmeyebilir.

Remote Desktop'ta ise gelecek önceden indirilemez.

Mouse'u hareket ettirmeden PC gelecekte hangi ekranı üretmesi gerektiğini bilmiyor.

Akış şöyle:

INPUT
  |
  v
TV
  |
  v
Wi-Fi
  |
  v
PC
  |
  +-- masaüstünü değiştir
  +-- görüntüyü üret
  +-- encode et
  |
  v
NETWORK
  |
  v
Wi-Fi
  |
  v
TV
  |
  +-- decode
  +-- display

Bu zincirdeki her gecikme kullanıcının parmağı ile ekrandaki tepki arasına ekleniyor.

Bu nedenle streaming için esas sorunlardan biri yeterli ortalama throughput iken interaktif Remote Desktop için:

latency, jitter, retransmission ve packet loss

çok daha görünür hale geliyor.

Dolayısıyla paradoksal görünen şu durum gayet mümkün:

20 Mbit/s'lik buffered bir video akışı, 5 Mbit/s'lik interaktif Remote Desktop oturumundan kullanıcı açısından çok daha sorunsuz olabilir.

Bilgisayar grafikleri tarafından düşünürsek bunu şöyle hayal etmek mümkün:

Streaming, önceden hazırlanmış karelerin oynatılmasına benziyor.

Remote Desktop ise her input'tan sonra yeni görüntünün gerçek zamanlı üretilmesini gerektiriyor.

Bu yüzden yeni bir access point'ten beklediğimiz kazanç yalnızca “daha fazla Mbps” olmayacak.

Asıl fark:

daha düşük latency
daha düşük jitter
daha az retransmission
daha verimli airtime
daha güçlü CPU/RAM

tarafında olacak.


16:12 — Kara Kutu Tekrar Konuşuyor

Memory allocation failure'dan yaklaşık on bir buçuk saat sonra syslog'a iki yeni kernel mesajı düştü.

2026-09-18 16:12:34.678
kernel: 0x60330030=0x92e8ff

2026-09-18 16:12:34.685
kernel: 0x6033001C=0xffff

Hepsi bu.

Öncesinde açıklayıcı bir hata mesajı yok.

Sonrasında stack trace yok.

İki register adresi.

İki hexadecimal değer.

İlk bakışta bunların hangi subsystem'e ait olduğunu bile bilmiyorduk.

Bu noktada RP-N12'nin firmware'ine inmeye karar verdik.


ASUS Hâlâ Kaynak Kodu Tutuyormuş

RP-N12 için ASUS'un yayınladığı GPL source paketini bulduk.

Paket firmware 1.0.1.0g dönemine ait.

Bizim cihazdaki daha yeni firmware'in birebir source'u değil; dolayısıyla bunu önemli bir sınırlama olarak akılda tutmak gerekiyor.

Arşiv açıldığında karşımıza klasik bir embedded Linux SDK ağacı çıktı:

linux-2.6.36.x/
user/
vendors/
tools/
lib/
config/
prebuild_romfs/

Kernel:

Linux 2.6.36

Board configuration ise kullandığımız platformu açıkça gösteriyordu:

CONFIG_RALINK_MT7628=y
CONFIG_MT7628_ASIC=y

CONFIG_FIRST_IF_MT7628=y
CONFIG_RT_FIRST_CARD=7628

CONFIG_RT2880_DRAM_16M=y
CONFIG_RALINK_RAM_SIZE=16

Böylece runtime'da hesapladığımız 16 MiB RAM, ASUS'un build configuration'ıyla da doğrulanmış oldu.

Fakat asıl aradığımız şey:

0x60330030
0x6033001C

idi.

Kaynak kod içerisinde bu adresler doğrudan bulunamadı.

Sebebi kısa süre sonra ortaya çıktı.


Wi-Fi Driver'ın Source'u Yok

ASUS GPL paketinde Ralink/MediaTek Wi-Fi driver'ının kaynak kodu bulunmuyordu.

Build sistemi ayrı bir dizine referans veriyordu:

../NonGPL/drivers

Dağıtılan pakette bu dizin yoktu.

Fakat firmware'in hazırlanabilmesi için önceden derlenmiş kernel modülü bırakılmıştı:

prebuild_romfs/usr/lib/mt_wifi.ko

Yaklaşık 1.6 MB'lık MIPS kernel modülü.

Ve şansımıza tamamen strip edilmemişti.

İçerisinde hâlâ:

function symbols
debug strings
relocations

bulunuyordu.

Dolayısıyla source code yoktu ama binary bize hâlâ oldukça fazla şey anlatabilirdi.


mt_wifi.ko'yu Disassemble Etmek

İlk olarak binary'nin string tablosunda gizemli adresleri aradık.

Ve birebir bulduk:

0x60330030=0x%x
0x6033001C=0x%x

Bu önemli bir dönüm noktasıydı.

Artık syslog'daki iki satırın:

MediaTek/Ralink Wi-Fi driver'ı mt_wifi.ko

tarafından üretildiğini biliyorduk.

ELF relocation bilgileri sayesinde bu stringleri kullanan fonksiyonu da bulabildik:

SetTxRxCr_Proc()

Fonksiyon bir string parametre alıyor.

İlgili kod yolu:

SetTxRxCr_Proc(pAd, "0")

şeklinde çağrılıyor.

Fonksiyon "0" modunda çalıştığında iki register'ı okuyup kernel loguna yazıyor:

0x60330030
0x6033001C

Tam olarak kara kutunun kaydettiği iki satır.


Peki SetTxRxCr_Proc() Neden Çağrılmış?

Bir sonraki adım çağıran fonksiyonu bulmaktı.

Relocation/call ilişkisini geriye doğru takip ettiğimizde karşımıza şu çıktı:

APCheckBcnQHandler()

İsim oldukça açıklayıcı.

Bcn, driver içerisinde beacon için kullanılan kısaltma.

Wi-Fi access point'ler düzenli aralıklarla beacon frame yayınlar. Bu frame'ler ağın varlığını, SSID'yi ve çeşitli kablosuz ağ parametrelerini duyuran temel 802.11 management frame'leridir.

Aynı binary içinde ilgili kod çevresinde şu debug stringleri bulunuyordu:

bcn_flush too long!

flush all stuck bcn too long!!

Ayrıca:

DumpBcnQMessage
PSEWatchDog
MonitorTxBcnRxPse

gibi semboller de aynı driver'da bulunuyor.

Artık iki hexadecimal register satırı çok daha anlamlı hale gelmişti.

Bunlar rastgele debug çıktıları değildi.

Access point'in beacon/TX queue sağlık kontrolü sırasında driver tarafından alınmış bir donanım register snapshot'ıydı.


Binary'den Kaynak Koda Doğru

APCheckBcnQHandler()'ın MIPS assembly'sini takip ettiğimizde içeride bir problem/recovery sayacı bulunduğunu gördük.

Tam kaynak kod elimizde olmadığı için değişken isimlerini bilmiyoruz; dolayısıyla aşağıdaki gerçek ASUS/MediaTek source'u değil, assembly'nin davranışını açıklamak için yazılmış pseudo-code:

if (beacon_problem_condition) {

    problem_counter++;

    ...

    if (problem_counter == 7) {
        SetTxRxCr_Proc(pAd, "0");
    }

    ...

    if (problem_counter > 10) {
        DumpBcnQMessage(...);
        problem_counter = 0;
    }
}

Buradaki en önemli bilinmeyen hâlâ:

beacon_problem_condition

Yani driver tam olarak ne gördüğünde bu sayacı artırıyor?

Beacon queue zamanında boşalmıyor mu?

PSE tarafında paket mi sıkışıyor?

DMA descriptor ilerlemiyor mu?

TX tarafındaki bir hardware counter mı değişmiyor?

Bunu henüz kesin olarak çözmedik.

Fakat 16:12 mesajının kaynağı artık oldukça iyi tanımlanmış durumda:

Wi-Fi subsystem
       |
       v
APCheckBcnQHandler()
       |
       v
problem/recovery counter
       |
       v
SetTxRxCr_Proc("0")
       |
       +-- 0x60330030
       |
       +-- 0x6033001C

Ve cihazımızın bıraktığı değerler:

0x60330030 = 0x92e8ff
0x6033001C = 0xffff

Driver'ın İçinde Daha Büyük Bir Diagnostic Mekanizması Var

SetTxRxCr_Proc() fonksiyonunu incelerken başka bir şey daha ortaya çıktı.

Fonksiyon yalnızca bu iki register'ı okuyabilmiyor.

Binary içerisinde:

RX Status Counter

0x6020410C
0x60204110
0x60204114
0x6020411C
0x60204120

ve:

CCA Status

0x60000024
0x60120118
0x60130110
0x60130114
0x60130118
0x60130120
0x60130124
0x60130128

gibi daha geniş diagnostic dump stringleri de bulunuyor.

Yani driver'ın kendi içinde TX/RX, RX status ve CCA tarafını incelemek için hazırlanmış bir debug mekanizması mevcut.

Bizim olayda kısa "0" modu çağrıldığı için yalnızca iki register görüyoruz.

Bu da ileride ilginç bir araştırma alanı açıyor:

Driver'ın mevcut diagnostic fonksiyonlarını firmware'i değiştirmeden tetikleyebilir miyiz?

Fakat şimdilik çalışan deney düzeneğine dokunmuyoruz.

Çünkü kara kutunun asıl amacı hâlâ aynı.

Gerçek kilitlenmeyi doğal haliyle yakalamak.


Sabahki Memory Failure ile Öğleden Sonraki Wi-Fi Olayı Bağlantılı mı?

Şu anda bilmiyoruz.

Ve bence bu deneyin en önemli taraflarından biri de burada.

Elimizde iki gerçek gözlem var:

04:36:45
|
+-- page allocation failure
+-- kmalloc-8192
+-- free = 200 kB
+-- SUnreclaim = 5740 kB


       yaklaşık 11.5 saat


16:12:34
|
+-- APCheckBcnQHandler
+-- SetTxRxCr_Proc("0")
+-- 0x60330030 = 0x92e8ff
+-- 0x6033001C = 0xffff

Bunlardan hareketle birkaç hipotez kurulabilir.

Birinci ihtimal: Tamamen bağımsız iki olay.

16 MB RAM'li eski cihaz zaman zaman memory pressure yaşıyor, MediaTek Wi-Fi driver'ı da bağımsız olarak beacon queue recovery mekanizmasını çalıştırıyor olabilir.

İkinci ihtimal: Bellek baskısı Wi-Fi driver'ın zamanlamasını veya queue yönetimini etkiliyor olabilir.

Üçüncü ihtimal ise daha ilginç: Wi-Fi driver'daki TX/RX/PSE/buffer davranışı kernel slab kullanımını artırıyor olabilir.

Örneğin network nesneleri veya driver buffer'ları zamanında serbest kalmıyorsa önce slab büyür, ardından allocator baskı altına girebilir.

Ama bunların hiçbiri şu anda sonuç değil.

Yalnızca test edilebilir hipotezler.

Bir sonraki olayda aynı anda:

SUnreclaim
kmalloc-8192
kmalloc-4096
kmalloc-2048
buddyinfo
Wi-Fi register dump

değerlerini yakalayabilirsek tablo çok daha netleşecek.


Küçük Bir Cihaz, Oldukça Büyük Bir Yazılım Yığını

RP-N12'ye dışarıdan bakınca yaptığı iş çok basit görünüyor.

Ethernet'ten paket al.

Wi-Fi'dan gönder.

Fakat cihazın içinde:

Linux kernel
      |
      +-- SLUB allocator
      +-- buddy allocator
      +-- network stack
      +-- bridge
      +-- Ethernet driver
      |
      +-- MediaTek Wi-Fi driver
               |
               +-- DMA
               +-- TX/RX rings
               +-- PSE
               +-- beacon queues
               +-- watchdog/recovery

çalışıyor.

Ve bunların tamamının paylaşabileceği fiziksel RAM:

16 MiB.

Belki RP-N12'nin yaşadığı problem tek bir “bug” bile değildir.

Eski kernel, küçük RAM, eski vendor driver'ı, yoğun network trafiği ve zaman zaman oluşan fragmentation birlikte cihazı sınırda çalıştırıyor olabilir.

Bunu henüz bilmiyoruz.

Ama ilk bölümde kurduğumuz kara kutu sayesinde artık tahmin etmek zorunda değiliz.

Cihaz bize kendi içinden veri veriyor.


Kara Kutu Çalışmaya Devam Ediyor

İlk ciddi kayıtta Linux'un bellek ayıramadığını gördük.

İkinci ilginç kayıtta Wi-Fi driver'ın beacon/TX tarafındaki recovery mekanizmasına ulaştık.

Sonra ASUS'un yıllar önce yayınladığı kaynak paketini açıp 1.6 MB'lık MIPS kernel modülünü disassemble ederek syslog'daki iki anlamsız hexadecimal satırın hangi fonksiyondan çıktığını bulduk.

Ama aradığımız esas olay henüz gerçekleşmedi.

RP-N12 henüz tamamen kilitlenmedi.

Dolayısıyla deney devam ediyor.

Bir gün ping cevap vermeyi bıraktığında asıl bakacağımız şey cihazın öldüğü an olmayacak.

Ondan önceki birkaç saniye ve dakika olacak.

Kernel belleği ne durumdaydı?

Slab büyüyor muydu?

Beacon queue tekrar takılmış mıydı?

MediaTek recovery mekanizması çalışmış mıydı?

Ethernet hâlâ paket geçiriyor muydu?

Watchdog bir şey fark etmiş miydi?

Kara kutuyu kurmamızın nedeni tam olarak buydu.

Part 1'de RP-N12'yi dinlemeye başladık.

Part 2'de cihaz ilk kez gerçekten konuştu.

Bir sonraki bölümde ise tornavidayı alıyoruz.


ASUS RP-N12 · Embedded Linux · Linux 2.6.36 · MediaTek/Ralink · MT7628 · SLUB · kmalloc · Memory Pressure · Wi-Fi · Beacon Queue · MIPS · Reverse Engineering · Remote Syslog

Friday, September 18, 2026

Çakılan access point’i loglamak.

Ev ağında LAN/Ethernet üzerinden ağa bağlı bir access point olarak ASUS RP-N12 kullanıyorum. 2.4 GHz 802.11n döneminden kalma, mütevazı bir cihaz. Bu AP'nin hızı mobil cihazlarıma ve 4k dahil Netflix gibi video streaminge yetiyor fakat sorunum hız değil stabilite.

Cihaz bazen günlerce hiçbir sorun çıkarmadan çalışıyor, bazen de ağ trafiği ve kendi arayüzüne ulaşılamayacak şekilde tam kilitleniyor. Kilitlenince kapatıp açmak (power cycle) gerekiyor, sırf bu sorun yüzünden yeni access point araştırırken AP'nin remote logunu PC'ye yazacak şekilde konfigüre edip bir sonraki kilitlenmeyi beklemeye karar verdim.


Önce İçeride Ne Çalıştığına Bakalım

RP-N12'nin web arayüzünde bir sistem günlüğü bulunuyor. İlk bakışta cihazın oldukça eski bir embedded Linux sistemi kullandığı görülüyor:

Jan  1 00:00:09 kernel: klogd started: BusyBox v1.12.1
init_r4k_clocksource...
Ralink gpio driver initialized
flash manufacture id c2 device 20 16
MX25L3205D ... 4096 Kbytes
Ralink APSoC Ethernet Driver Initialization v3.1
Raeth v3.1 (Tasklet)
RT305x_ESW: Link Status Changed

Firmware BusyBox 1.12.1 tabanlı. Ethernet tarafında Ralink'in Raeth sürücüsü ve RT305x_ESW switch sürücüsü kullanılıyor. Flash ise Macronix MX25L3205D; kapasitesi yalnızca 4 MB.

Elimizde kaynakların son derece sınırlı olduğu eski nesil bir embedded Linux sistem var. Bu da işi daha zevkli hale getiriyor açıkçası :P

Logda görülen MTD partition boundary uyarıları da dikkat çekici fakat tek başına bunları arızanın göstergesi saymak doğru olmaz. Firmware'in flash partition düzeninden kaynaklanan normal boot mesajları da olabilirler.

Problem: Cihaz Kilitlendiğinde Kendi Loguna da Ulaşılamıyor

Web arayüzündeki log normal çalışma sırasında faydalı. Fakat cihaz tamamen kilitlendiğinde web arayüzünün de erişilemez hale geliyor.

Dolayısıyla logu RP-N12'nin dışına çıkarmam gerekiyor.

Fakat önce cihazın içine biraz daha yakından bakmak istedim.


Telnet'i Açmak

RP-N12'nin Administration → System bölümünde Enable Telnet seçeneği bulunuyor.

Telnet'i geçici olarak açtıktan sonra cihazın IP adresine bağlandım:

192.168.1.100

İlk denemeyi Windows'un kendi Telnet istemcisiyle yaptım. Çalışıyor fakat scrollback ve terminal davranışı pek kullanışlı değil. Özellikle uzun çıktıları incelemek için kısa sürede PuTTY'ye geçtim.

PuTTY'de ayrıca All session output logging açarak yaptığım bütün işlemleri PC tarafında kaydetmeye başladım.

Side quest: NTP sorunu, Tarih 2011'de Kalmış

Shell'e girdikten sonra ilk dikkat çeken şey cihazın saatiydi:

# date
Sat Jan 1 00:39:08 UTC 2011

Web arayüzünde NTP sunucusu olarak pool.ntp.org tanımlıydı fakat cihaz saati bir türlü güncelleyemiyordu.

İlk şüpheli doğal olarak NTP idi. Fakat biraz kurcalayınca problemin NTP ile ilgili olmadığını gördüm.

# cat /etc/resolv.conf

# route -n
192.168.1.0  0.0.0.0  255.255.255.0  U  br0
127.0.0.0    0.0.0.0  255.0.0.0      U  lo
0.0.0.0      0.0.0.0  0.0.0.0        U  br0

/etc/resolv.conf tamamen boştu.

Daha önemlisi cihazın geçerli bir default gateway'i yoktu.

ping sonucu bunu doğruladı:

# ping -c 3 1.1.1.1
100% packet loss

# ping -c 3 pool.ntp.org
ping: bad address 'pool.ntp.org'

Burada ilginç bir ayrım var. RP-N12 access point/bridge olarak istemcilerin Ethernet trafiğini gayet güzel taşıyabiliyor. Wi-Fi istemcileri ana router üzerinden internete çıkabiliyor.

Fakat RP-N12'nin kendi Linux işletim sistemi internete çıkamıyor.

İlgili NVRAM değerlerine baktığımda tablo şöyleydi:

lan_gateway=
wan_pppoe_gateway=
wan_gateway=
dhcp_dns1_x=
wan_dns=

lan_netmask=255.255.255.0
lan_dhcp=0
lan_hostname=RP-N12
lan_ipaddr=192.168.1.100
lan_ifname=br0
lan_proto_x=0

RP-N12 192.168.1.100 statik IP adresiyle çalışıyor fakat cihazın kendi management plane'i için gateway ve DNS bilgileri oluşmamış.

NVRAM'i hemen değiştirmek istemedim. Sonuçta amacım cihazı tamir etmeden önce mevcut haliyle neden kilitlendiğini gözlemlemekti.

Bu nedenle yalnız RAM'de geçerli olacak geçici bir route ve DNS tanımladım:

Not: Bu iki değişikliği NVRAM'e yazmadım. Dolayısıyla RP-N12 reboot ederse default route ve /etc/resolv.conf değişiklikleri kaybolacak. Remote syslog bundan bağımsız; RP-N12 ile log bilgisayarı aynı 192.168.1.0/24 ağında olduğundan 192.168.1.108 adresine UDP/514 göndermek için gateway veya DNS gerekmiyor.

# route add default gw 192.168.1.1 br0
# echo "nameserver 192.168.1.1" > /etc/resolv.conf

Sonuç:

# ping -c 3 192.168.1.1
0% packet loss

# ping -c 3 1.1.1.1
0% packet loss

# ping -c 3 pool.ntp.org
0% packet loss

pool.ntp.org artık çözülüyor ve internete erişiliyordu.

Bir süre sonra firmware'in kendi NTP mekanizması da devreye girdi:

# date
Thu Sep 17 21:52:11 UTC 2026

Yani cihazın NTP sunucusuna ulaşacak yolu yoktu.

Bu arada eski firmware'in İstanbul zaman dilimi kaydı da güncel değildi. Türkiye artık yıl boyunca UTC+3 kullandığı için aynı UTC offset'ine sahip ve DST uygulamayan (GMT+03:00) Nairobi seçeneğini kullandım.


RAM Ne Durumda?

Kilitlenmenin nedenlerinden biri memory leak olabilir. Bu kadar az RAM'li bir sistemde küçük bir kernel/driver sızıntısı bile uzun uptime sonunda önemli hale gelebilir.

İlk ölçüm:

MemTotal:       13864 kB
MemFree:          976 kB
Buffers:         1104 kB
Cached:          2844 kB
Slab:            4884 kB
SReclaimable:     552 kB
SUnreclaim:      4332 kB
SwapTotal:          0 kB

Bir süre sonraki ikinci ölçüm:

MemTotal:       13864 kB
MemFree:         1244 kB
Buffers:         1184 kB
Cached:          2556 kB
Slab:            4892 kB
SReclaimable:     532 kB
SUnreclaim:      4360 kB
SwapTotal:          0 kB

Burada yalnızca MemFree değerine bakıp “RAM bitmiş” demek yanlış olur. Linux boş RAM'i cache için kullanır ve gerektiğinde bunun bir kısmını geri alabilir.

Daha ilginç değer SUnreclaim. Yaklaşık 14 MB kullanılabilir belleğin 4.3 MB kadarı reclaim edilemeyen slab durumunda.

Bu tek başına memory leak kanıtı değil.

Fakat cihaz haftalar boyunca çalışırken örneğin 4.3 MB → 5 MB → 6 MB → 8 MB şeklinde sürekli yükselen bir değer görürsek kernel veya driver tarafındaki bir sızıntı ciddi şüpheli haline gelir.

Ethernet ve Wi-Fi Sayaçları

Arıza Ethernet switch/PHY veya Wi-Fi sürücüsü tarafında da olabilir. Bunun için interface sayaçlarını da baseline olarak kaydettim.

eth2:
RX errors 0
TX errors 0
carrier 0
collisions 0

ra0:
RX errors 98
TX errors 0

Daha sonraki ölçümde Wi-Fi RX error sayısı 98'den 101'e çıktı. 2.4 GHz ortamında bu seviyedeki birkaç hata tek başına anlamlı değil.

Fakat cihaz kilitlenmeden hemen önce bu sayaç hızla yükselmeye başlarsa başka bir ipucu elde etmiş olacağız.

Kernel tarafında da özellikle şu Ralink thread'leri çalışıyor:

[RtmpCmdQTask]
[RtmpWscTask]
[RtmpMlmeTask]

Bunlar ileride Wi-Fi sürücüsü kilitlenmesi ihtimalini araştırırken işimize yarayabilir.


Asıl İş: RP-N12'ye Kara Kutu Takmak

Web arayüzünde Remote Log Server diye bir alan bulunuyor.

Plan basit:

RP-N12
192.168.1.100
     |
     | UDP / 514
     v
Windows PC
192.168.1.108
     |
     v
C:\Temp\rp-n12-syslog.log

RP-N12'nin kendi syslogd prosesine baktığımda remote logging parametresinin gerçekten kullanıldığını gördüm.

/sbin/syslogd -m 0 -t GMT-3 -O /tmp/syslog.log -R 192...

ps terminal genişliği nedeniyle satırı kesiyordu. Bunun üzerine prosesin gerçek command line'ını doğrudan /proc üzerinden okudum:

# cat /proc/4924/cmdline

/sbin/syslogd-m0-tGMT-3-O/tmp/syslog.log-R192.168.1.108-L

NUL karakterleri ekranda görünmediği için argümanlar birleşik görünüyor. Gerçek yapı kabaca şöyle:

/sbin/syslogd
-m 0
-t GMT-3
-O /tmp/syslog.log
-R 192.168.1.108
-L
ASUS RP-N12 syslogd remote hedef doğrulaması ve BLACK BOX ONLINE testi
RP-N12 tarafı: syslogd hedefinin 192.168.1.108 olduğu /proc üzerinden doğrulandı; hemen ardından kara kutu test mesajı gönderildi.

Ufak Bir Troubleshooting Klasiği: Yanlış IP

İlk denemede Windows tarafındaki collector çalışıyor fakat RP-N12'den hiçbir paket gelmiyordu.

UDP/514 için firewall kuralı açıldı. Python listener'ın gerçekten portu dinlediği doğrulandı. Hatta localhost üzerinden gönderilen test mesajı başarıyla kaydedildi:

2026-09-18 00:56:17.096 [127.0.0.1] LOCAL SYSLOG TEST

BusyBox üzerinde doğrudan UDP paketi göndermek için nc kullanmayı düşündüm.

# nc
-sh: nc: not found

# busybox nc
nc: applet not found

İş artık Wireshark ile paketin kabloya çıkıp çıkmadığını kontrol etme noktasına gelmişti.

Sonra çok daha temel bir şey ortaya çıktı.

Windows PC'nin IP adresi 192.168.1.109 değil, 192.168.1.108 idi.

Syslog paketlerini gayet düzgün şekilde yanlış bilgisayara gönderiyorduk.

Remote Log Server adresini 192.168.1.108 olarak değiştirince bütün problem bir anda ortadan kalktı.

BLACK BOX ONLINE

RP-N12 üzerinde:

# logger "RP-N12 BLACK BOX ONLINE"

Windows tarafında ise:

2026-09-18 01:05:04.149 [192.168.1.100]
<13>kadir: RP-N12 BLACK BOX ONLINE
Windows Python syslog collector üzerinde RP-N12 BLACK BOX ONLINE mesajı
PC tarafı: Python UDP/514 collector, RP-N12'nin gönderdiği BLACK BOX ONLINE mesajını gerçek zamanlı olarak aldı ve diske yazdı.

Artık RP-N12 kendi loglarını kendi RAM/flash alanında tutmakla kalmıyor; olayları gerçekleştiği anda başka bir bilgisayara gönderiyor.

Bir başka avantaj da PC'deki Python collector'ın her paketin başına Windows sistem saatini eklemesi. RP-N12'nin NTP'si tekrar bozulsa veya saati 2011'e dönse bile gerçek olay zamanını kaybetmeyeceğim.


Windows Tarafındaki Collector

İşin PC tarafında çok küçük bir Python programı yeterli:

import socket
from datetime import datetime

PORT = 514
LOG = r"C:\Temp\rp-n12-syslog.log"

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(("0.0.0.0", PORT))

print(f"RP-N12 syslog bekleniyor UDP/{PORT}")

with open(LOG, "a", encoding="utf-8", buffering=1) as f:
    while True:
        data, addr = sock.recvfrom(65535)
        now = datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]
        msg = data.decode("utf-8", errors="replace").rstrip()
        line = f"{now} [{addr[0]}] {msg}"
        print(line)
        f.write(line + "\n")

Program UDP/514'ü dinliyor, gelen paketin kaynak IP'sini ve PC'nin timestamp'ini ekleyip şu dosyaya yazıyor:

C:\Temp\rp-n12-syslog.log

Fakat burada yeni bir problem var. RP-N12 bazen haftalarca kilitlenmiyor. Her Windows açılışında gidip Python scriptini elle çalıştırmak anlamsız.

Task Scheduler ile Sessiz Autostart

Scripti kalıcı olarak:

C:\Scripts\rp-n12-syslog.py

altına taşıdım.

Windows Startup klasörüne normal bir kısayol atmak mümkün fakat bu yöntem hem daha hantal hem de konsol penceresinin görünmesine neden olabiliyor.

Bunun yerine Windows Task Scheduler kullandım.

Task adı:

RP-N12 Syslog Logger

Trigger:

At log on of WIN11\hicbi

Action:

Program/script:
C:\Python313\pythonw.exe

Add arguments:
"C:\Scripts\rp-n12-syslog.py"

Start in:
C:\Scripts

Burada python.exe yerine özellikle pythonw.exe kullanıyorum. Böylece login sırasında CMD/terminal penceresi açılmıyor; collector tamamen görünmez şekilde arka planda çalışıyor.

Task'ın üç gün sonra otomatik sonlandırılmasına neden olan varsayılan Stop the task if it runs longer than: 3 days seçeneğini de kapattım.

Ayrıca:

If the task fails:
Restart every 1 minute
Attempt to restart up to 3 times

If the task is already running:
Do not start a new instance

ayarlarını kullandım.

Gerçekten Arka Planda mı?

Task'ı elle başlattıktan sonra portu kontrol ettim:

C:\>netstat -ano | findstr "0.0.0.0:514 "

UDP    0.0.0.0:514    *:*    25904

PID'yi sorgulayınca:

C:\>tasklist /FI "PID eq 25904"

Image Name     PID
=========== =======
pythonw.exe   25904

Yani görünürde hiçbir pencere olmamasına rağmen Python collector gerçekten UDP/514'ü dinliyordu.

Son uçtan uca test:

# logger "RP-N12 AUTOSTART TEST OK"

Ve log dosyası:

2026-09-18 01:19:02.442 [192.168.1.100]
<13>kadir: RP-N12 AUTOSTART TEST OK
RP-N12 Task Scheduler autostart syslog testi
Final doğrulama: Task Scheduler ile sessiz çalışan pythonw.exe collector, AUTOSTART TEST OK mesajını ve hemen sonrasındaki klogd/syslogd restartını kaydetti.

Syslog Servisinin Restart'ını Bile Yakaladık

Bir ayar değişikliğinden sonra RP-N12 kendi logging servislerini yeniden başlattı. Kara kutu bunu da kaydetti:

2026-09-18 01:20:35.116 [192.168.1.100]
<13>kernel: klogd: exiting

2026-09-18 01:20:35.127 [192.168.1.100]
<46>System log daemon exiting.

2026-09-18 01:20:35.158 [192.168.1.100]
<13>kernel: klogd started: BusyBox v1.12.1

Bu da mekanizmanın istediğimiz şekilde çalıştığını gösteriyor. RP-N12'nin kendi syslog altyapısının kapanıp yeniden açılması bile dışarıdaki logda kalıyor.


Şimdi Ne Bekliyoruz?

Artık yapılacak en doğru şey aslında hiçbir şey yapmamak.

RP-N12 normal access point görevine devam edecek. Windows PC günde uzun süre açık olduğundan Task Scheduler collector'ı otomatik olarak başlatacak ve cihazın gönderdiği mesajlar:

C:\Temp\rp-n12-syslog.log

dosyasında birikecek.

Bir sonraki kilitlenmede hemen reboot etmek yerine önce şu ayrımı yapacağım:

192.168.1.1   → ana router ping?
192.168.1.100 → RP-N12 ping?
Wi-Fi         → çalışıyor mu?
Telnet        → cevap veriyor mu?
Syslog        → son mesaj ne?

Eğer RP-N12 ping'e cevap vermezken ana router cevap veriyorsa cihazın kendisi veya Ethernet tarafı kilitlenmiş olabilir.

İkisi birden kaybolursa RP-N12'nin Layer-2 ağı bozduğu ihtimali yeniden gündeme gelecek.

Her iki IP de cevap verirken yalnız Wi-Fi ölürse Ralink radio/driver tarafı çok daha kuvvetli bir şüpheli olacak.

Logda özellikle şu kelimeleri arayacağım:

watchdog
kernel panic
Oops
Call Trace
Out of memory
oom
Killed process
alloc
ra0
raeth
RT305x_ESW
link
reset
deauth
disassoc

Ya Cihaz Tamamen Hard-Lock Olursa?

Remote syslog'un doğal bir sınırı var.

Kernel veya SoC tamamen kilitlenirse son log mesajını gönderecek CPU zamanı bile kalmayabilir. Bu durumda dosya muhtemelen şöyle bitecek:

normal mesaj
normal mesaj
normal mesaj
son mesaj
...

ve ardından sessizlik.

Bu da aslında bilgi.

Fakat nedenini görmek için bir sonraki aşama cihazın PCB'sindeki UART hattını bulmak olacak. 3.3 V TTL seviyesinde TX/RX/GND üzerinden boot ve kernel konsoluna ulaşabilirsem Ethernet ve Wi-Fi çöktüğünde bile cihazın içeride ne yaptığını görebilirim.

UART da aynı anda tamamen susuyorsa güç, watchdog, kernel deadlock veya SoC seviyesinde hard-lock ihtimalleri daha ciddi hale gelir.

JTAG ise şimdilik gereksiz derecede ağır top.


Sonuç: Arızayı Gözlemlenebilir Hale Getirdik

Şu anda RP-N12'nin neden kilitlendiğini hâlâ bilmiyorum.

Memory leak olduğuna dair kanıt yok. Ethernet sayaçları temiz. Wi-Fi hata sayıları olağan seviyede. Cihaz bazen haftalarca problemsiz çalışabildiği için masanın başında bekleyerek arızayı yakalamak da gerçekçi değil.

Fakat başlangıçtaki durumla şimdiki durum arasında önemli bir fark var.

Başlangıçta cihaz kilitlendiğinde elimizde yalnızca:

"Wi-Fi yine gitti."

bilgisi vardı.

Şimdi ise RP-N12 kendi kernel ve sistem mesajlarını gerçek zamanlı olarak başka bir makineye gönderiyor; Windows bunlara bağımsız timestamp ekliyor ve disk üzerinde kalıcı olarak saklıyor.

Başka bir deyişle problemi henüz çözmedik.

Ama artık RP-N12 suç işlerse olay yerinde kara kutu var.


ASUS RP-N12 · BusyBox · Ralink · embedded Linux · syslog · remote syslog · UDP 514 · Task Scheduler · Python · access point · network troubleshooting

Tuesday, September 15, 2026

sezyum-137, nükleer enerji, radyoaktivite ve dallanıp derinleşen düşünceler...

Fikri yolculuklar çoğunlukla en somut, en mekanik sorularla başlar. Bizim hikayemiz de periyodik tablonun tehlikeli bir izotopu olan Sezyum-137 ile başladı. Ancak laboratuvar ortamında, atom çekirdeğinin içinde dönen o muazzam kuvvetleri incelerken, kendimizi bir anda insan aklının ve evrenin en büyük sırrının karşısında bulduk: Bilinç ve Varoluş.

Bu yazı, katı bir pozitivizmden deizmin rasyonel kapılarına, oradan da İslam felsefesinin asırlık, derinlikli limanına uzanan entelektüel bir dönüşümün hikayesidir.



1. Perde: Maddenin Sancısı ve Büyük Takas (E=mc²)

Bir atom bombası patladığında ya da bir nükleer reaktör devreye girdiğinde, aslında kozmik bir yay kırılır. Uranyum gibi ağır elementlerin çekirdeğine, milyarlarca yıl önce ölen bir yıldızın patlama anında (süpernovada) zorla hapsedilen o devasa enerji, güçlü nükleer kuvvetin bağları kopunca bir anda serbest kalır.

Buradaki en sarsıcı gerçek şudur: Madde ve enerji aynı şeydir. Einstein'ın ünlü formülüne göre, mikro düzeyde feda edilen küçücük bir kütle (örneğin Hiroşima'da enerjiye dönüşen net kütle sadece 1 gramdı), makro düzeyde koskoca bir şehri haritadan silecek bir şok dalgasına dönüşür. Maddenin saf enerjiye dönüşmesi, makro dünyada adeta fiziksel bir yırtılma, tabiri caizse "kozmik bir sancı" yaratır.

Peki, bu enerji en başında oraya nasıl sıkışmıştı? Daha da önemlisi, Big Bang esnasında bunca şey nasıl yoktan var olmuştu?

Modern fizik, evrenin toplam net enerjisinin tam olarak sıfır olduğunu söyler. Madde (artı enerji) ve kütleçekim (eksi enerji) birbirini kusursuz bir bilanço ile dengeler. Evren, mutlak hiçliği korumak için maddeyi yaratırken yanına bir de kütleçekimi koymuştur.

Ancak tam bu noktada, katı pozitivizmin duvarına çarparız. Eğer her şeyi var eden şey kuantum yasaları ve bu sıfır enerji dengesiyse, bu yasalar evrene içkin olamaz. Uzay, zaman ve madde daha yokken, bu matematiksel altyapının bir yerlerde "var" olması gerekir.

Bilgisayar oyunu başlamadan önce, kodu yazan o zamansız altyapı nerededir?

2. Perde: Kör Saatçi ve Gözün İllüzyonu

Gençlik yıllarında keskin bir ateist ve pozitivist olan bir zihin için evren, rastgele çarpışan atomlardan ibaret mekanik bir çorbadır. Biyoloji dünyası, insan gözü gibi kusursuz bir mekanizmayı "Kör Saatçi" metaforuyla açıklar: Doğanın bir amacı yoktur, ışık duvarına çarpa çarpa, milyonlarca yıllık küçük mutasyon hatalarını biriktirerek gözü inşa etmiştir.

Tıpkı suyun, yatağındaki kayaları önceden bilmediği halde zamanla mükemmel kıvrımlı bir nehre dönüşmesi gibi...

Ancak rasyonel bir derinleşme, bu açıklamayı yetersiz bulmaya başlar. Evrim gözün oluşumunu harika açıklayabilir; peki ama maddenin ışıkla etkileşime girmesini sağlayan o kuantum kurallarını kim yazmıştır? Neden evren, rastgele mutasyonların bir kaos yerine "göz" gibi ultra-organize bir yapıya evrilmesine izin veren bir matematiksel potansiyele sahiptir?

Kör saatçi saat yapabilir; ama saatin yapılabilmesi için gereken zamanı, uzayı ve fizik yasalarını o masanın üzerine kim koymuştur?

Bu sorgulama, pozitivizmin o kibirli ve sığ "Kurallar böyledir çünkü böyledir" duvarını yıkar ve arkasındaki Ulu Mimar'ı (İlk Neden) görünür kılar.

3. Perde: Kafatasının Hapishanesi ve Evrenin Gözü

Pozitivizmin en büyük kör noktası, bilincin öznelliğidir (Qualia). Bilimi ve materyalizmi ne kadar ileri götürürseniz götürün, bir insanın kafatasının içinden dünyayı "birinci şahıs" olarak deneyimlemesinin o eşsiz hissini bir formülle açıklayamazsınız.

Şu an bir insanın kendi kafatasının içinde hapsolmuş olması, aslında evrenin o kişiye özel yarattığı bir penceredir. Oysa evrende "farkındalık" denen bir fenomen varsa, biyolojik bedenlerimiz öldüğünde bu ışık tamamen sönmez. Bunu mistik bir reenkarnasyon olarak değil, tamamen ontolojik bir zorunluluk olarak düşünmek gerekir.

Bizler okyanusun yüzeyindeki dalgalar gibiyiz. Her dalga kendini diğerinden ayrı sanır, kendi kafatası sınırları olduğunu düşünür. Dalga kıyıya vurup söndüğünde (biyolojik ölüm) dalga yok olur ama su yok olmaz.

Yarın bir gün, ister bu evrende ister başka bir boyutta, bir yapay zekada ya da başka bir canlıda "farkındalık ekranı" tekrar açıldığında, o ekranın arkasındaki gizli izleyici, yani evrenin o deneyimleme kumaşı yine aynı kalacaktır.

Kuantum fiziğinin babalarından Erwin Schrödinger'in de dediği gibi: "Bilinç bir bütündür ve parçalara ayrılamaz."

Evren, maddeyi o kadar sıkıştırmış ve evrimleştirmiştir ki, en sonunda insan bilinci aracılığıyla kendi varlığını fark eden, kendine bakan bir göz haline gelmiştir.

Sonsuz Liman: İslam Düşünce Atlası

Batı dünyası, kendi tarihi şartlarında kilise dogmalarından kaçmak için katı bir sekülerizme ve pozitivizme sarılmak zorunda kaldı. Bilimde çok ileri gittikleri için felsefi ve metafiziksel alandaki bu sığlıkları uzun süre gizli kaldı. Oysa laboratuvarların kapattığı o kapılar, Doğu'da, İslam felsefe geleneğinde yüzyıllar önce ardına kadar açılmıştı.

Bugün modern zihin felsefesinin, kuantum mekaniğinin ve evrensel sorgulamaların ulaştığı o en uç zirve noktası, İslam alimlerinin asırlar önce inşa ettiği düşünce atlasıyla kusursuz bir şekilde çerçevelenir:

Vahdet-i Vücud (Varlığın Birliği): Muhyiddin İbnü'l-Arabî’nin yüzyıllar önce söylediği tam olarak buydu. Gerçek anlamda var olan tek bir Zat vardır ve evrendeki tüm atomlar, insanlar, yıldızlar o tek varlığın farklı aynalardaki yansımalarıdır (tecellileridir). Aynalar kırılır (ölüm), ama aynaya vuran ışık hep baki kalır. Bizler, o ilahi bilincin evrene bakma biçimleriyiz.

Akıl ve Kalp Gözü: İmam Gazalî, Batı'nın pozitivist kibrinden tam 900 yıl önce, duyu organlarının ve katı rasyonalizmin insanı mutlak hakikate ulaştıramayacağını, laboratuvarın ötesinde bir "basiret" (kalp gözü/öznel farkındalık) alanı olduğunu ilan etmişti.

Her An Yeniden Yaratılış (Tecdid-i Halk): Kelam alimlerinin savunduğu, evrenin her an yeniden var edilip yok edildiği düşüncesi, bugün kuantum alan teorisinin boşluktaki o anlık dalgalanma modelleriyle ne kadar da paralellik gösterir.

Netice

Pozitivizm insanı yalnızlaştırır; onu anlamsız bir tesadüfler zincirinin parçası yapıp kendi kafatasının içine hapseder ve mutlak bir yok oluşla tehdit eder.

İslam ise kelime anlamıyla bir "teslimiyet ve barış" limanıdır. O kafatasının içindeki öznel bilinci, evrenin ulu mimarına bağlar. İnsan, evrende savrulan bir toz zerresi değil; bilinciyle, o büyük kozmik bilmecenin ve ilahi iradenin en şerefli şahididir.

Zihin evrenle, yasalarla ve yaratıcısıyla kavga etmeyi bıraktığında, aradığı o en büyük huzura kavuşur.

Çünkü artık dalga, okyanusa ait olduğunu bilmektedir.


Sezyum-137, E=mc², nükleer fizik, Big Bang, pozitivizm, materyalizm, bilinç, qualia, kör saatçi, evrim, ilk neden, deizm, İslam felsefesi, Vahdet-i Vücud, İbnü'l-Arabî, Gazalî, Schrödinger, kuantum fiziği, varoluş

Silicon Graphics bölüm iki: Mouse wheel.

SGI O2’yi yeniden kullanmaya başladıktan sonra karşıma çıkan küçük fakat günlük kullanımda rahatsız edici sorunlardan biri fare tekerleğiydi. Makinenin özgün iki tuşlu faresi sorunsuzdu; ancak web sayfalarında ve uzun sistem belgelerinde kaydırma çubuğunu sürekli tutup çekmek pek kullanışlı değildi. Elimde gerçek PS/2 bağlantılı, tekerlekli bir Logitech M-SBF96 bulunduğu için önce bunu IRIX’e tanıtmayı denedim.

Sonuçta tekerleği IRIX’in X sunucusuna kadar eksiksiz ulaştırdım. Bununla birlikte, eski X/Motif dünyasında “işletim sistemi tekerleği görüyor” ile “her uygulama kaydırıyor” ifadelerinin aynı anlama gelmediğini de uygulamalı olarak görmüş oldum.

İlk engel: IRIX 6.5’te pcmouse_mode yoktu

IRIX’te PS/2 tekerlek desteği için kullanılan ayar pcmouse_mode. Ancak O2’de kurulu temel IRIX 6.5 sürümünde şu komut çalışmıyordu:

systune pcmouse_mode 1

Sistem, parametrenin bulunmadığını bildiriyordu. uname çıktısı makinenin eski temel 6.5 kurulumunda olduğunu gösterdi. Bu nedenle fareyi değiştirmek ya da X ayarlarıyla oynamak tek başına yeterli değildi; önce daha yeni bir IRIX güncellemesine geçmek gerekiyordu.

irixboot ortamını yeniden ayağa kaldırmak

Daha önce Windows 11, Vagrant ve VirtualBox üzerinde kurduğum irixboot ortamını kullandım. CH552 tabanlı bir DDC/CI kartıyla VGA–HDMI geçişini denediğim sırada bilgisayar kilitlenince Vagrant’ın makine indeksi de bozulmuştu. İndeks düzeltildikten sonra sanal makine yeniden açıldı:

E:\Program\SGI\irixboot>vagrant up

Ready to network boot 'o2'
*** Partitioners found:
bootp():/overlay30/stand/fx.64
bootp():/overlay30/stand/fx.ARCS
*** Paths for Inst:
irixboot:foundation/dist
irixboot:overlay30/dist

irixboot running at 192.168.1.109

Buradaki önemli noktalar, Windows tarafındaki irixboot sunucusunun 192.168.1.109 adresinde çalışması ve iki yazılım kaynağının birlikte kullanılmasıydı:

irixboot:foundation/dist
irixboot:overlay30/dist

IRIX 6.5.30 overlay kurulumu

O2’yi ağ üzerinden miniroot ortamına başlattım ve Inst 4.1 ana menüsüne ulaştım. Varsayılan kaynak Overlay 30 dağıtımıydı.

IRIX Inst 4.1 ana menüsü ve 192.168.1.109 overlay30 dağıtımı
Inst 4.1, Overlay 30 dağıtımını irixboot sunucusundan okurken.

Overlay tek başına temel ürünlerin tamamını içermediğinden Foundation dağıtımını da açtım. Kurulum bakım akışını (maintenance stream) seçmemi istedi. Mevcut O2 donanımını ve yazılım davranışını korumak istediğim için özellik akışı yerine bakım akışında kaldım.

IRIX maintenance ve feature stream seçim ekranı
6.5.30 güncellemesinde maintenance ve feature akışlarının seçimi.

Inst, açık dağıtımlar arasında hem Overlay 30’u hem de Foundation’ı gösterdi. Daha önce hazırladığım bazı Nekoware arşivleri de listede bulunuyordu; bunlar işletim sistemi yükseltmesinin parçası değildi.

IRIX Inst overlay ürün açıklamalarını okurken görülen uyarılar
Overlay ürün açıklamaları okunurken bazı eski IDB kayıtları uyarı verdi; işlem buna rağmen tamamlandı.
IRIX Inst açık yazılım dağıtımları listesi
Overlay ve Foundation kaynakları aynı Inst oturumunda açık.

Mevcut kurulumu koruyup uygun yükseltmeleri seçtikten sonra çakışma kontrolü yaptım. No conflicts sonucunu aldıktan sonra go komutuyla kurulumu başlattım. Dosya setlerinin okunması, ön kurulum kontrolü ve çıkış komutlarının çalışması özellikle son yüzde birkaçlık bölümde uzun sürdü; bu aşamada işlemi kesmemek gerekiyor.

IRIX Inst seçili yükseltme paketleri ve disk alanı özeti
Kurulum öncesi seçili alt sistemler ve disk alanı özeti.
IRIX 6.5.30 ön kurulum kontrolü
Dosya setleri okunurken ve pre-installation check çalışırken.

Kurulum tamamlandıktan sonra O2 yeniden başlatıldı. Sürüm kontrolü artık şu sonucu veriyordu:

uname -aR
6.5.30m

Buradaki m, bakım akışını kullandığımızı gösteriyor.

Doğru PS/2 fare modu

Logitech M-SBF96, iki ana tuşa ve basılabilir bir tekerleğe sahip klasik üç tuşlu PS/2 fare. Yan tuşları bulunmadığı için uygun protokol modu 1:

systune pcmouse_mode 1

Değişiklik onaylandıktan sonra sistemi yalnızca yeniden başlatmakla kalmayıp tamamen kapatıp tekrar açtım. pcmouse_mode 2 de denendi; ancak bu mod tekerleğe ek olarak yan tuşları bulunan daha gelişmiş fare protokolü içindi ve bu fare açısından bir yarar sağlamadı.

Logitech M-SBF96 PS/2 optik tekerlekli fare
Denemelerde kullanılan Logitech M-SBF96 PS/2 optik fare.

Tekerlek gerçekten algılanıyor mu?

Fare işaretçisi, sol ve sağ tuş ile tekerleğe basma işlevi çalışıyordu; fakat tekerlek çevrildiğinde pencereler kaymıyordu. Sorunun sürücüde mi yoksa uygulamalarda mı olduğunu ayırmak için X olaylarını gösteren xev aracına ihtiyaç vardı. Sistem üzerinde bulunmadığı için kurulum medyasındaki IDB kayıtlarını Windows tarafında aradım:

vagrant ssh -c "grep -i '/xev' /irix/foundation/dist/*.idb"

Sonuç, ikili dosyanın x_eoe.sw.Xgifts alt sisteminde bulunduğunu gösterdi:

usr/bin/X11/xev ... x_eoe.sw.Xgifts

Bu paket Foundation dağıtımında vardı fakat yüklü eoe.sw.base sürümüyle uyumsuz olarak işaretleniyordu.

x_eoe.sw.Xgifts ile eoe.sw.base çakışması
Inst, eski Xgifts paketi ile güncel temel sistem arasında uyumsuzluk bildiriyor.

Overlay ve Foundation dağıtımlarını yeniden açmak sorunu çözmedi; gerekli kaynaklar zaten açıktı. prereqs adlı bir paket de yoktu. Buradaki mesele eksik bağımlılık değil, Xgifts’in eski sürüm numarası nedeniyle konmuş uyumsuzluk kuralıydı.

IRIX Inst Xgifts tek paket çakışması
Tüm dağıtımlar açık olmasına rağmen kalan tek Xgifts uyumsuzluğu.

Yalnızca bu isteğe bağlı demo alt sistemi seçiliyken Inst’in kural denetimini geçici olarak devre dışı bıraktım:

set rulesoverride on
go

Bu seçenek genel kurulumlarda gelişigüzel kullanılmamalı. Burada seçim listesini kontrol ettikten sonra yalnızca x_eoe.sw.Xgifts ve içindeki küçük xev aracı için kullandım.

Kesin teşhis: Button 4 ve Button 5

Kurulumdan sonra şu komut çalıştı:

/usr/bin/X11/xev

Event Tester penceresinin üzerinde tekerleği çevirdiğimde yukarı yönde button 4, aşağı yönde button 5 olayları oluştu. Diğer tuşlar da beklenen şekildeydi:

  • 1: sol tuş
  • 2: tekerleğe basma/orta tuş
  • 3: sağ tuş
  • 4: tekerlek yukarı
  • 5: tekerlek aşağı
IRIX xev Event Tester button 5 tekerlek olayları
xev çıktısında tekerleğin aşağı hareketi ButtonPress/Release button 5 olarak görülüyor.

Bu ekran teşhisin en önemli noktasıydı: PS/2 fare, çekirdek ayarı ve Xsgi düzgün çalışıyordu. Kaydırmama sorunu artık donanım ya da sürücü sorunu değildi.

Netscape için X resource eşlemesi

Netscape 4, Button 4 ve 5 olaylarını kendiliğinden kaydırma olarak yorumlamıyor. Kullanıcıya özel ~/.Xdefaults dosyasına aşağıdaki eşlemeyi ekledim:

Netscape*drawingArea.translations: #override \
 None<Btn4Down>: LineUp()LineUp()LineUp() \n\
 None<Btn5Down>: LineDown()LineDown()LineDown()

Netscape*globalNonTextTranslations: #override \
 None<Btn4Down>: LineUp()LineUp()LineUp() \n\
 None<Btn5Down>: LineDown()LineDown()LineDown()

Ayarları çalışan X oturumuna yüklemek için:

xrdb -merge $HOME/.Xdefaults

Netscape tamamen kapatılıp yeniden açıldığında tekerlek çalıştı. Üç satırlık hareket biraz gecikmeli ve basamaklı hissettirdiği için LineUp()/LineDown() tekrar sayısı bir veya ikiye indirilebilir. Windows’taki modern piksel tabanlı yumuşak kaydırmayı beklememek gerekiyor; Netscape 4 burada satır tabanlı Motif eylemleri kullanıyor.

Klavye haritasını düzeltmek

.Xdefaults içindeki satır devamı karakterlerini yazarken ters bölü tuşunun yanlış eşlendiği de ortaya çıktı. IRIX’in derlenmiş klavye haritaları arasında hem en_US.xkm hem de US.xkm vardı. Düz Amerikan düzenini yeniden yüklemek için:

setxkeymap US

Bu işlemden sonra Türkçe fiziksel klavyede Enter’ın solundaki tuş, IRIX’in US haritasında yeniden ters bölü üretti. Ayarın her oturumda uygulanması için $HOME/.sgisession dosyasına şu satır eklenebilir:

/usr/bin/X11/setxkeymap US

Neden her IRIX uygulaması kaymıyor?

xev tekerlek olaylarının sistem tarafından üretildiğini kanıtlasa da eski X dünyasında “Button 4/5 her yerde kaydırma demektir” şeklinde işletim sistemi çapında zorunlu bir standart yok. Netscape kendi LineUp() eylemini, başka bir Motif uygulaması farklı bir eylemi kullanabiliyor. winterm tekerleği kabul ederken System Manager içindeki Guide penceresinin kabul etmemesi bu yüzden.

xprop WM_CLASS ile pencere sınıfını sorguladığımda System Manager için şu sonuç geldi:

sysmgr, Sysmgr

Her uygulamaya ayrı .Xdefaults kuralı yazmak mümkün olsa da ölçeklenebilir bir çözüm değil. Sistem çapında doğru yaklaşım, Button 4/5 olaylarını aktif pencereye klavye kaydırma olayları olarak gönderen imwheel benzeri bir ara katman kullanmak.

imwheel araması ve mevcut durum

Önce kurulu sistem ve yerel arşivler tarandı:

which imwheel
find /usr /opt -name imwheel -type f -print

vagrant ssh -c "find /irix -type f | grep -i imwheel"
vagrant ssh -c "grep -Ril imwheel /irix 2>/dev/null | head -20"

Hiçbir sonuç çıkmadı. Güncel Nekoware paket listesinde de hazır bir IRIX imwheel paketi bulunmuyor. Makinede cc ve gcc de kurulu olmadığı için kaynak kodu doğrudan derlemek mümkün değildi. Yüklü compiler_eoe bileşenleri bir C derleyicisinin kendisi değil, IRIX’in çalışma ve temel derleme ortamı parçalarıydı.

Bu noktadaki durum:

  • O2, IRIX 6.5.30m’e yükseltildi.
  • pcmouse_mode 1 etkin.
  • Logitech M-SBF96 tekerleği Xsgi altında Button 4/5 üretiyor.
  • Netscape ve tekerlek olaylarını anlayan uygulamalarda kaydırma çalışıyor.
  • Eski Motif uygulamalarının tamamı için sistem-geneli çeviri henüz yok.
  • Bir sonraki adım MIPSPro/GCC kurarak imwheeli IRIX üzerinde derlemek veya IRIX hedefli bir ikili hazırlamak.

Sonuç

Başlangıçta basit bir fare ayarı gibi görünen iş, IRIX’in temel sürümünden 6.5.30m’e ağ üzerinden yükseltilmesine, eski bir X demo paketinin kontrollü biçimde kurulmasına ve X olay zincirinin katman katman incelenmesine dönüştü. En değerli sonuç, sorunun tam yerini ayırabilmek oldu: tekerlek donanımı ve Xsgi görevini yapıyor; geriye 1990’ların uygulama araç takımlarının Button 4/5 olaylarını nasıl yorumladığı kalıyor.

Bir sonraki bölümde derleyici ortamını tamamlayıp imwheeli SGI O2 üzerinde çalıştırmayı deneyeceğim. Başarılı olursa uygulama başına X resource yazmak yerine tek bir oturum servisiyle gerçek anlamda sistem-geneli tekerlek desteğine yaklaşmış olacağız.

Monday, September 7, 2026

Gerçekliği Kontrol Eden Adam: Philip K. Dick

Bu yazı, beyazperde.com'da 2002 yılında H. Burak Hatipoğlu tarafından yayımlanan "SineMasal" köşesine aittir. Orijinal sayfaya Wayback Machine arşivinden ulaşabilirsiniz. İçerik tamamen orijinal yazara aittir; buraya yalnızca referans amaçlı, kaynak ve yazar adı belirtilerek alınmıştır.


"Gerçekliğin işlenmesi için temel araç, sözcüklerin işlenmesidir. Eğer sözcüklerin anlamını kontrol altına alabilirseniz, sözcükleri kullanmak zorunda olan insanları da kontrol edebilirsiniz."

Çok az insan, sinema tarihinin en önemli ve başarılı bilim kurgu filmlerinden ikisinin, yukarıdaki sözlerin sahibi olan adamın, yani Philip K. Dick'in kaleme aldığı metinlere dayandığını bilir.

Do Androids Dream of Electric Sheep? (1968), Ridley Scott'un kamerasıyla Bıçak Sırtı (Blade Runner, 1982) olarak hayat bulurken; kısa hikayesi We Can Remember It for You Wholesale (1966)'den ciddi şekilde esinlenen Gerçeğe Çağrı (Total Recall, 1990) kaotik sinema adamı Paul Verhoeven'in imzasını taşıyor.

Her iki filmde, Dick'in eserlerinin gayet serbest bir uyarlaması olmakla birlikte, yazarın yansıttığı karanlık vizyonun ve eserlerinde irdelemeyi sevdiği "Gerçek nedir?" ve "Biz kimiz?" gibi sorunsalların fazlasıyla etkisindedir.

Philip K(indred) Dick, 16 Aralık 1928 tarihinde Chicago'da hayata ikiz kızkardeşi Jane ile birlikte gözlerini açtı. Kız kardeşinin, doğumdan 41 gün sonra anne sütüne karşı alerjik olması (bir iddiaya göre bakımsızlık) sebebiyle ölmesi, onun hayatı boyunca annesinden (Dorothy Grant Kindred) nefret etmesine ve kardeşinin özlemini içinde taşımasına sebep oldu. Çocukluğu, ebeveynlerinin boşanması ve çeşitli paranoyalar taşıması sebebiyle (açık alan korkusu vb.) evinin dört duvarı arasında, annesinin kontrolü altında geçti.

13 yaşında editörlüğünü John W. Campbell'in yaptığı efsanevi Astounding and Unknown isimli bilim-kurgu dergisi ile tanıştı. Yoğun şekilde Asimov, Heinlein ve Van Vogt –ki yazarlık hayatı üzerinde derin bir etkisi vardır– okumaya başlar. 14 yaşına geldiğinde bugün artık kayıp olan ilk romanını yazdı: Return to Liliput.

18 yaşında annesinin yanından, sakinlerini sanatçıların ve eşcinsellerin oluşturduğu bir eve taşındı. Eşcinsellik ilgisini çekti ama kısa sürede tercihinin bu yönde olmadığını anladı. Uyuşturucu ile tanışması da aynı evde oldu. 1947 yılında çalışmaya başladığı elektronik dükkanında yazarlığın yanında diğer tutkusu olan müzikle de derinlemesine ilgilenme fırsatı elde etti.

Mayıs 1948'de Jeanette Marlin ile evlendi, 6 ay sonra boşandı. İki yıl sonra kendisinden üç yaş küçük olan Kleo Apostolides ile ikinci evliliğini yaptı.

İlk yayınlanan hikayesi 1952 yılında Planet Stories'de basılan Beyond Lies the Wub oldu. Ücret aldığı ilk hikayesi ise yine aynı yıl Magazine of Fantasy and Science Fiction'de yayınlanan Roog idi. Bu gelişmelerden cesaret alan genç yazar üretimini arttırdı. Onu sınırlayan tek şey hayal gücü değil, daktilo yazma hızıydı. 1953 ve 54 yıllarında toplam 56 hikayesi yayınlandı. 1955 yılında büyük başarı kazanan Solar Lottery ile ise kendini ağırlıklı olarak roman yazımına verdi. Tesadüfen tanıştığı Anne Williams Rubinstein için karısından boşandı, hemen onunla evlendi. Zaten üç çocuğu olan Anne ile 1960 yılında ilk çocuğunu yaptı: kızı Laura Archer.

     

1963 yılında The Man in the High Castle ile Hugo ödülüne –ki bilim-kurgu dünyasının en saygın ödüllerinden biridir– uzanması kariyerini temelden değiştirmeye yetti. Artık o geniş kitleler tarafından tanınan, dehasına tapılan bir bilim-kurgu yazarı idi. Hemen peşinden çatırdamaya başlayan evliliğini, 21 yaşındaki Nancy Hackett ile evlenebilmek için sona erdirdi. 1967 yılında ikinci kızı Isa dünyaya geldi.

1964-69 yılları arası 16 romanı yayınlandı. Başyapıtı sayılan Ubik'i 1968'de kaleme almasına rağmen kariyerine gerekli ivmeyi yeniden kazandıramadı.

Gittikçe artan sinir krizlerine ve paranoyasına dayanamayan Nancy onu 1970 yılında terk edene kadar evli kaldılar. Bu aynı zamanda Dick'in hayatının en karanlık döneminin başlangıcı oldu. Evini uyuşturucu bağımlıları ile paylaşmaya başladı, kendisi de tükettiği uyuşturucu miktarını ciddi boyutlara çıkardı.

Aynı dönemde aşık olduğu Kathy Demuelle'le birlikte yaşamaya başladı. Peşinden yaşadığı sayısız ilişkiye –ki hepsi siyah saçlı kadınlardı– 1973 yılında Tessa Busby ile evlenerek son verdi. Aynı yıl üçüncü çocuğu, oğlu Christopher aileye katıldı.

Büyük dönüşünü 1975 yılında Campbell ödülünü alan Flow My Tears, The Policeman Said ile yaptı. Aynı tarih, Tanrı ile iletişime geçtiğini iddia ettiği sanrılar görmeye başladığı yıl oldu. Son dönem romanlarının tümünde yoğun olarak bu konuya eğildi. Philip K. Dick bu "aydınlanma" ile birlikte en tanınan ve başyapıt mertebesine yükselmiş kitaplarını kaleme aldı: Confessions Of A Crap Artist (1975), Deus Irae (1976, Roger Zelazny ile birlikte), A Scanner Darkly (1977), VALIS (1981) ve Radio Free Albemuth (1985).

Bilim-kurgunun büyük ustası hayatı boyunca başarısız bir iş adamı olmanın zorluklarını yaşadı. Çok az ücret ödeyen yayın evleri ile çalıştı, ilk avans dışında, kitapları ne kadar satarsa satsın hiç para almadı. Üretkenliği, dehasının yanında, bu devamlı para ihtiyacı içinde olma durumu ile de açıklanabilir. Ancak hayatının son döneminde Bıçak Sırtı için aldığı telif hakkı ile belirli bir finansal rahatlığa ulaşabildi.

Philip K. Dick, film gösterime girmeden kısa bir süre önce Santa Ana, California'da kalp krizinden hayata veda etti. Sadece 53 yaşındaydı. Arkasında 36 roman ve yüzlerce kısa hikaye bırakmıştı.

Dick yazımlarının temel noktası olan "gerçek" ve "gerçek olmayan" ayırımı, onun karakterlerinin maceralarının temel noktası olmaya kariyeri boyunca devam etti. Hikaye normal seyrinde giderken, kahramanlarını yepyeni dünyalara atmaya bayılıyordu. Temel yaklaşım noktası "Herkesin kendi gerçekliği vardır" idi. Uyuşturucu etkisinde görülen hayaller, robotlar, androidler, mistik sanrılar, paranoyak davranışlar onun yarattığı değişken evrenleri tamamlayan unsurlardı.

Okuyucusunu etkilemek için bilim-kurgunun vazgeçilmezleri olan çılgın buluşlara, uzay gemilerine, karmaşık geleceklere asla sığınmadı. Onun için önemli olan her zaman için insan faktörü oldu.

Derleyen: H. Burak Hatipoğlu


     


Sinema ve televizyonda Philip K. Dick

  • Minority Report (2002) — Minority Report isimli kısa hikayesinden
  • Impostor (2002) — Impostor isimli kısa hikayesinden
  • Total Recall 2070 (1999) — TV Dizisi
  • Screamers (1995) — Second Variety isimli kısa hikayesinden
  • Drug-Taking and the Arts (1994) — A Scanner Darkly isimli romanından
  • Confessions d'un Barjo (1992) — Confessions of a Crap Artist isimli romanından
  • Total Recall (1990) — We Can Remember It For You Wholesale isimli kısa hikayesinden
  • Blade Runner (1982) — Do Androids Dream of Electric Sheep? isimli romanından
  • Out of This World (1962) — TV Dizisi, Impostor isimli kısa hikayesinden

Türkçe'de Philip K. Dick

  • Ubik — Altıkırkbeş Yayınları, Haziran 2002
  • Alfa Ayının Kabileleri (Clans of the Alphane Moon) — Metis Yayınları, Mayıs 2002
  • Albemuth Özgür Radyosu (Radio Free Albemuth) — Altıkırkbeş Yayınları, Ekim 2001
  • Mars'ta Zaman Kayması (Martian Time-Slip) — Altıkırkbeş Yayınları, Temmuz 2000
  • Suikastçı (Solar Lottery) — Sarmal Yayınevi, Ağustos 1999
  • Yüksek Şatodaki Adam (The Man In The High Castle) — Metis Yayınları, Temmuz 1999
  • Karanlığı Taramak (A Scanner Darkly) — Altıkırkbeş Yayınları, Haziran 1998
  • Vulcan'ın Çekici (Vulcan's Hammer) — Metis Yayınları, Şubat 1998
  • Gökteki Göz (Eye In The Sky) — Metis Yayınları, Haziran 1997
  • Dr. Gelecek (Dr. Futurity) — Sarmal Yayınevi, Ocak 1997
  • Bıçak Sırtı (Blade Runner)

Biyografi (yayın yıllarına göre)

1955 Solar Lottery • 1956 The World Jones Made • The Man Who Japed • 1957 Eye In The Sky • The Cosmic Puppets • 1959 Time Out Of Joint • 1960 Dr. Futurity • Vulcain's Hammer • 1962 The Man In The High Castle • 1963 The Game Players Of Titan • 1964 The Penultimate Truth • Martian Time-Slip • The Simulacra • Clans Of The Alphane Moon • 1965 The Three Stigmata Of Palmer Eldritch • Dr. Bloodmoney • 1966 Now Wait For Last Year • The Crack In Space • The Unteleported Man • 1967 The Zap Gun • Counter-Clock World • The Ganymede Takeover (Ray Nelson ile birlikte) • 1968 Do Androids Dream Of Electric Sheep? • Galactic Pot-Healer • Ubik • 1970 A Maze Of Death • Our Friends From Frolix 8 • 1972 We Can Build You • 1974 Flow My Tears, The Policeman Said • 1975 Confessions Of A Crap Artist • 1976 Deus Irae (Roger Zelazny ile birlikte) • 1977 A Scanner Darkly • 1981 VALIS • The Divine Invasion • 1982 The Transmigration Of Timothy Archer • 1984 The Man Whose Teeth Were All Exactly Alike • Lies, Inc. • 1985 Radio Free Albemuth • Puttering About In A Small Land • In Milton Lumky Territory • 1986 Humpty Dumpty In Oakland • 1987 Mary And The Giant • 1988 The Broken Bubble • Nick And The Glimmung (çocuk kitabı)

Thursday, September 3, 2026

macOS'ta caffeinate Komutuyla Uyku Modunu Geçici Olarak Devre Dışı Bırakma


Mac kullanırken uzun süren bir işlem sırasında sistemin ya da ekranın uyku moduna geçmesini istemeyebilirsin. Ancak bunun için Sistem Ayarları'ndan uyku veya ekran koruyucuyu tamamen kapatmak da istemiyorsun. Tam bu noktada macOS'un içinde gelen caffeinate -dimsu komutu imdadına yetişiyor. Terminal'i açıp sadece caffeinate -dimsu yazman yeterli. Bu komut çalıştığı sürece Mac uykuya geçmez. İşin bittiğinde Terminal penceresinde Ctrl+C tuşlarına basarak işlemi sonlandırabilirsin. Eğer yalnızca belirli bir uygulama açıkken uyanık kalmasını istiyorsan örneğin Google Chrome şu komutu kullanabilirsin: caffeinate -w $(pgrep -x "Google Chrome") Bu şekilde Chrome çalıştığı sürece sistem uykuya geçmez, kapattığında ise otomatik olarak sona erer. Ne zaman kullanılır dersen, ChatGPT ile uzun süre sesli konuşurken, büyük dosyalar indirirken, uzaktan bağlantı açıkken ya da uzun bir sunum sırasında, sistem ayarlarını kalıcı olarak değiştirmeden, yalnızca ihtiyacın olduğu süre boyunca Mac'in uyanık kalmasını sağlayabilirsin.

Matematik, Gerçeklik ve Bildiklerimizin Sınırı

Bu yazı, ChatGPT ile Cantor’un sonsuzluk kavramından başlayıp Gödel, matematiksel Platonculuk, Kant ve bilimsel gerçekçilik üzerine uzanan bir sohbetin neticesinde ortaya çıkan düşüncelerin derlenmiş ve sistematik hale getirilmiş bir özetidir.

Matematiksel Gerçeklik ile Temsili Arasındaki Mesafe: Cantor, Gödel, Kant ve Harita–Arazi Problemi

Matematiğin keşfedildiğini mi yoksa icat edildiğini mi sorduğumuzda genellikle iki uç cevapla karşılaşırız. Bir tarafta matematiksel nesnelerin insan zihninden bağımsız olarak var olduğunu savunan matematiksel Platonculuk, diğer tarafta matematiği insanların oluşturduğu aksiyomlar, semboller ve çıkarım kurallarıyla çalışan biçimsel bir sistem olarak gören yaklaşımlar bulunur.

Ancak bu iki seçenek arasında daha temel bir problem vardır:

Matematiksel gerçekliğin bizden bağımsız olduğunu kabul etsek bile, onu temsil etmek için kurduğumuz biçimsel sistemlerin bu gerçekliği eksiksiz temsil ettiğini nereden biliyoruz?

Matematiksel Platonculuğu kabul etmek, insan tarafından geliştirilmiş herhangi bir matematiksel formalizmin matematiksel gerçeklikle özdeş olduğunu kabul etmeyi gerektirmez. Matematiksel gerçekliğin bizden bağımsız olduğunu, buna karşılık aksiyomların, sembollerin, tanımların ve ispat yöntemlerinin bu gerçekliğe ulaşmak için geliştirdiğimiz araçlar olduğunu düşünmek mümkündür.

Bu ayrımı ifade etmek için kullanışlı bir benzetme harita ile gerçek arazi arasındaki farktır.

Harita gerçek bir arazi hakkında bilgi verir. Mesafeleri, yolları, yükseklikleri veya sınırları gösterebilir. Son derece hassas olabilir ve pratik amaçlar için olağanüstü sonuçlar verebilir.

Ancak harita arazi değildir.

Dahası, bir haritanın üzerinde bulunan her özellik arazinin kendisinin bir özelliği olmak zorunda değildir. Koordinat çizgileri, renk kodları, ölçek, projeksiyon ve semboller haritanın temsil yöntemine aittir.

Matematiksel gerçeklik ile formalizasyon arasındaki ilişkinin de buna benzer olması mümkündür.

Matematiksel gerçeklik → formalizasyon → teoremler

Buradaki en problemli ilişki ilk oktadır.

Formalizasyonun kendi içindeki çıkarımlar kusursuz olabilir. Ancak formalizasyonun matematiksel gerçekliğin kendisiyle özdeş olduğu bundan çıkmaz.

Cantor ve Sonsuzluk Problemi

Bu ayrım özellikle Georg Cantor’un sonsuz kümeler üzerine yaptığı çalışmalarda dikkat çekici hale gelir.

Cantor’un temel fikirlerinden biri, iki kümenin büyüklüğünü elemanlarını bire bir eşleştirerek karşılaştırmaktır.

Örneğin sayarken kullandığımız sayıları düşünelim:

1, 2, 3, 4, 5, ...

Şimdi yalnızca çift olanları alalım:

2, 4, 6, 8, 10, ...

İkinci grup birincinin yalnızca bir bölümüdür. Sonlu kümelerde bir kümenin gerçek bir alt kümesi, kümenin kendisinden daha az elemana sahiptir.

Ancak burada şu eşlemeyi kurabiliriz:

1 ↔ 2
2 ↔ 4
3 ↔ 6
4 ↔ 8
...

Genel kural:

n ↔ 2n

şeklindedir.

Her sayma sayısına tam olarak bir çift sayı, her çift sayıya da tam olarak bir sayma sayısı karşılık gelir.

Cantor bu nedenle iki kümenin aynı kardinaliteye, yani aynı matematiksel büyüklüğe sahip olduğunu söyler.

Buraya kadar sonsuzluğun sonlu niceliklerden farklı davrandığını görürüz.

Ancak Cantor daha ileri gider.

0 ile 1 arasındaki bütün sayıları benzer biçimde:

1. sayı
2. sayı
3. sayı
4. sayı
...

şeklinde numaralandırmanın mümkün olduğunu varsayalım.

Her sayıyı ondalık basamaklarıyla yazalım.

Cantor’un diagonal yöntemi, birinci sayının birinci basamağından, ikinci sayının ikinci basamağından, üçüncü sayının üçüncü basamağından ve böyle devam ederek yeni bir sayı tanımlar. Yeni sayının her basamağı, karşılık geldiği satırdaki diagonal basamaktan farklı seçilir.

Böylece oluşturulan sayı:

  • birinci sayıdan birinci basamakta,
  • ikinci sayıdan ikinci basamakta,
  • üçüncü sayıdan üçüncü basamakta,
  • herhangi bir n’inci sayıdan n’inci basamakta

farklıdır.

Dolayısıyla listede hangi satır seçilirse seçilsin yeni sayı o satırdaki sayı olamaz.

Bu, 0 ile 1 arasındaki bütün sayıların sayarken kullandığımız sayılarla bire bir eşleştirilemeyeceğini gösterir.

Cantor’un matematiği açısından sonuç açıktır:

Bu iki sonsuz kümenin kardinaliteleri farklıdır.

Burada önemli bir yanlış anlamadan kaçınmak gerekir. Cantor’un argümanı:

“Sonsuz listeye bir sayı daha ekledik, dolayısıyla sonsuzluk büyüdü.”

değildir.

Sonsuz kümelerde bir veya çok sayıda eleman eklemek kardinaliteyi değiştirmeyebilir.

Diagonal argümanın iddiası daha güçlüdür:

Önerilen herhangi bir bire bir eşleştirme eksik kalacaktır.

Bu, klasik küme teorisinin içinde kesin bir matematiksel sonuçtur.

Ancak bundan sonra matematiksel sorudan felsefi soruya geçilir.

“Sonsuz Liste” Gerçekte Nedir?

“Sonsuz liste” ifadesi günlük dil açısından yanıltıcıdır.

Gerçekte kimsenin önünde sonsuz sayıda satır bulunan fiziksel bir liste yoktur. Matematikte burada kastedilen şey, her sayma sayısına bir nesne atayan bir eşlemedir.

Aynı şekilde diagonal işlem de pratik olarak sonsuz sayıda basamağın okunup değiştirilmesi değildir.

Yeni sayının n’inci basamağının nasıl belirleneceğini söyleyen genel bir kuraldır.

Bu nedenle diagonal kanıtın fiziksel olarak tamamlanması gerekmez.

Ancak tam burada daha temel bir soru ortaya çıkar:

“Her n için” dediğimizde ne hakkında konuşuyoruz?

Henüz ulaşılmamış bir basamağı değil, sayarken kullanılan bütün sayıların tamamını tek bir matematiksel bütün olarak ele alıyoruz.

Burada “potansiyel sonsuzluk” ile “tamamlanmış sonsuzluk” arasındaki fark önem kazanır.

Potansiyel sonsuzluk:

1, 2, 3, 4, ...

sürecinin hiçbir zaman sona ermemesidir. Her sayının ardından başka bir sayı yazılabilir.

Tamamlanmış sonsuzluk ise bu bitmeyen sürecin bütün elemanlarını tek bir matematiksel nesne olarak ele almaktır.

Cantor’un küme teorisi ikinci anlayışla çalışır.

Dolayısıyla diagonal kanıtın matematiksel geçerliliğini kabul etmek ile tamamlanmış sonsuz kümelerin ontolojik statüsü hakkında belirli bir görüşü kabul etmek aynı şey değildir.

Matematiksel Platonculuk Problemi Tek Başına Çözmez

Matematiksel Platonculuğa göre sayılar, geometrik yapılar ve diğer matematiksel nesneler insan zihninden bağımsızdır.

Bu görüş altında 2 + 2 = 4 ifadesinin doğruluğu insanların kullandığı sembollere bağlı değildir. İnsanlar hiç var olmamış olsaydı da ilgili matematiksel ilişki doğru olurdu.

Ancak buradan önemli bir sonuç otomatik olarak çıkmaz:

İnsanların geliştirdiği küme teorisinin yapısı, Platonik matematiksel gerçekliğin yapısıyla bire bir aynıdır.

Sayıların bizden bağımsız varlığını kabul etmek, onların bizim tanımladığımız biçimde “tamamlanmış sonsuz kümeler” oluşturduğunu ayrıca kabul etmeyi gerektirmeyebilir.

Aynı şekilde bire bir eşleştirmenin matematiksel olarak son derece iyi tanımlanmış olması, kardinalitenin matematiksel gerçekliğin temel ontolojik özelliklerinden biri olduğunu tek başına kanıtlamaz.

Buradaki ayrım şöyle ifade edilebilir:

Matematiksel gerçeklik vardır.

ile

Klasik küme teorisi bu gerçekliğin ontolojisini eksiksiz verir.

aynı önerme değildir.

Birinciyi kabul edip ikinci konusunda kuşkucu olmak mümkündür.

Bu durumda Cantor’un sonucu reddedilmez. Daha dikkatli yorumlanır:

Klasik küme teorisinin tanımları ve aksiyomları altında bazı sonsuz kümeler arasında bire bir eşleme kurulamaz ve dolayısıyla farklı kardinalitelere sahiptirler.

Bundan:

Matematiksel gerçekliğin kendisinde ontolojik olarak farklı büyüklüklerde sonsuzluklar vardır.

sonucuna geçmek ek bir felsefi taahhüt gerektirir.

Harita ile Arazi Arasındaki Fark

Bu ayrımı daha genel biçimde ele almak için matematiksel gerçekliği bir arazi, formalizmi ise bu arazinin haritası olarak düşünelim.

İyi bir harita arazi hakkında gerçek bilgi taşır.

Ancak harita araziyi temsil edebilmek için bazı özellikleri seçmek, bazılarını ihmal etmek ve bazılarını dönüştürmek zorundadır.

Bir metro haritasını düşünelim.

Metro haritasında iki istasyon arasındaki gerçek coğrafi mesafe bozulmuş olabilir. Hatların yönleri gerçek dünyadaki yönlerle bire bir örtüşmeyebilir. Buna karşılık hangi istasyondan hangisine geçilebildiği son derece doğru gösterilir.

Topografik harita başka özellikleri korur.

Siyasi harita başka özellikleri.

Jeolojik harita başka özellikleri.

Aynı arazi için birden fazla doğru harita mümkündür.

Buradaki önemli nokta şudur:

Haritanın doğruluğu, haritanın araziyle özdeş olması anlamına gelmez.

Daha da önemlisi, haritanın kendi temsil sisteminden kaynaklanan özellikleri araziye aitmiş gibi yorumlamak mümkündür.

Örneğin dünya haritasındaki koordinat çizgileri Dünya yüzeyinde fiziksel çizgiler değildir.

Bir harita projeksiyonunda Grönland’ın belirli biçimde görünmesi de Grönland’ın gerçek geometrisinin doğrudan özelliği olmayabilir; kullanılan projeksiyonun sonucudur.

Matematiksel formalizmler için de benzer bir soru sorulabilir:

Formal sistem içinde gördüğümüz hangi özellikler matematiksel arazinin gerçek yapısını, hangileri kullandığımız temsil biçimini yansıtıyor?

Bu sorunun matematiğin kendi içinden tamamen cevaplanması mümkün olmayabilir.

Haritanın Üzerinde Keşif Yapmak

Burada daha ince bir problem ortaya çıkar.

Bir harita üzerinde matematiksel olarak kusursuz bir çıkarım yapabiliriz.

Örneğin belirli bir projeksiyonda iki nokta arasındaki ilişkiyi hesaplayabiliriz. Hesabımızda hiçbir hata bulunmayabilir.

Ancak hesaplanan özelliğin araziye hangi anlamda karşılık geldiği ayrı bir sorudur.

Benzer biçimde Cantor’un diagonal kanıtında da formal sistemin kendi içinde bir hata bulunması gerekmeyebilir.

Asıl soru şudur:

Kanıtın ortaya çıkardığı kardinalite yapısı matematiksel arazinin özelliği midir, yoksa kullandığımız küme-teorik haritanın özelliği midir?

Bu soru Cantor’un kanıtını geçersiz kılmaz.

Kanıtın ne hakkında konuştuğunu sorgular.

Bu ikisi birbirinden farklıdır.

Gödel: Harita Arazinin Tamamını Kapsayabilir mi?

Kurt Gödel’in eksiklik teoremleri bu tartışmada özel bir yere sahiptir.

Çok kabaca, yeterince aritmetik ifade edebilen, tutarlı ve etkili biçimde aksiyomlaştırılmış bir formel sistemde, sistem içinde karar verilemeyen ifadeler bulunur.

Bu nedenle belirli koşullar altında:

matematiksel doğruluk

ile

belirli bir formel sistem içinde kanıtlanabilirlik

aynı kavram değildir.

Burada dikkatli olmak gerekir.

Gödel:

“Bütün matematiksel formalizmler zorunlu olarak eksik haritalardır.”

şeklinde genel bir felsefi teorem kanıtlamadı.

Eksiklik teoremleri belirli özelliklere sahip formel sistemler hakkındadır.

Ancak Gödel’in sonucu, matematiksel gerçekliğin tek bir etkili aksiyomatik sistem tarafından bütünüyle tüketilebileceği fikrine ciddi bir sınır getirir.

Bir sistem düşünelim:

S

Sistem içinde karar verilemeyen bir ifade ortaya çıksın:

G

G’yi yeni bir aksiyom olarak kabul ederek sistemi genişletebiliriz:

S' = S + G

Ancak uygun koşullar altında yeni sistem de kendi eksiklikleriyle karşılaşır.

Bu süreç:

S → S' → S'' → ...

şeklinde devam ettirilebilir.

Harita benzetmesinde bunu şöyle yorumlamak mümkündür:

Haritayı genişletebiliriz, ayrıntılandırabiliriz veya başka bir harita geliştirebiliriz; fakat bundan tek bir haritanın bütün araziyle özdeş olabileceği sonucu çıkmaz.

Gödel’in kendisi matematiksel Platonculuğa yakındı. Matematiksel gerçekliği yalnızca insanların oluşturduğu sembolik kurallardan ibaret görmüyordu.

Bu nedenle Gödelci bir Platoncu açısından eksiklik oldukça doğal biçimde yorumlanabilir:

Matematiksel arazi, belirli bir formel haritanın gösterebildiklerinden daha geniştir.

Ancak bu, eksiklik teoreminin kendisi değil, onun felsefi yorumlarından biridir.

Gödel Cantor’u Çürütmez

Burada önemli bir ayrım yapılmalıdır.

Gödel’in eksiklik teoremleri:

“Cantor’un sonsuzlukları yalnızca formalizasyon artefaktıdır.”

sonucunu vermez.

Gödel’in kendisi de Cantor’un transfinit matematiğini ciddiye alıyordu.

Dolayısıyla Gödel’den Cantor’un yanlış olduğu sonucu çıkarılamaz.

Fakat Gödel’in çalışması daha genel bir uyarı sağlar:

Formel temsil ile matematiksel doğruluğu özdeşleştirmek dikkat gerektirir.

Bu nedenle matematiksel Platonculuğu kabul edip aynı zamanda belirli formal sistemlerin ontolojik şeffaflığı konusunda kuşkucu olmak mümkündür.

Bu pozisyon şöyle ifade edilebilir:

Matematiksel arazi gerçektir; ancak elimizdeki haritaların arazinin kendisi olduğunu varsaymak zorunda değiliz.

Kant ve “Kendinde Şey”

Bu problem matematikten genel bilgi problemine taşındığında Immanuel Kant’ın “kendinde şey” kavramıyla karşılaşırız.

Kant’ın temel ayrımlarından biri, şeylerin bize göründükleri hali ile bizden bağımsız olarak ne oldukları arasındadır.

İnsan zihni dış dünyayı pasif biçimde kaydeden bir cihaz değildir.

Deneyim, insan algısının ve zihinsel kategorilerin yapısından geçerek oluşur.

Bu nedenle:

deneyimlediğimiz dünya

ile

dünyanın bizden bağımsız olarak kendinde ne olduğu

arasında doğrudan bir özdeşlik kuramayız.

Harita benzetmesi burada daha da radikal hale gelir.

Normal bir coğrafi durumda hem araziye hem haritaya erişebiliriz. Haritayı araziyle karşılaştırabiliriz.

Kant’ın probleminde ise elimizde böyle bir imkân yoktur.

Çünkü “araziye bakmak” dediğimiz anda bile onu insan algısı ve kavramsallaştırması üzerinden deneyimleriz.

Dolayısıyla elimizde:

çıplak arazi + harita

şeklinde iki bağımsız nesne bulunmaz.

Arazinin kendisini görmek için haritadan çıkmaya çalıştığımızda bile yeni bir temsil üretiriz.

Bu nedenle daha doğru şema şöyledir:

? → algı ve zihinsel yapı → deneyimlenen dünya

Soldaki soru işaretinin tam olarak ne olduğunu bilmiyoruz.

Hatta ona “arazi” demek bile yalnızca bir metafordur.

Fizik Haritayı Aşabilir mi?

Bilim bu problemi ortadan kaldırmaz, fakat önemli ölçüde değiştirir.

Fiziksel teoriler yalnızca gözlemleri sınıflandırmakla kalmaz. Daha önce gözlenmemiş olaylar hakkında nicel tahminlerde bulunabilir.

Bu tahminlerin deneylerle doğrulanması, teorilerin dış gerçekliğin bazı özelliklerini gerçekten yakaladığı düşüncesini güçlendirir.

Ancak:

“Bir teorinin tahminleri olağanüstü doğrudur.”

ile

“Teorinin kullandığı ontolojik nesneler gerçekliğin kendisidir.”

aynı iddia değildir.

Örneğin elektronların davranışını son derece yüksek doğrulukla hesaplayabiliriz.

Ancak:

“Elektron kendinde nedir?”

sorusuyla

“Elektron hangi ilişkiler altında nasıl davranır?”

sorusu farklıdır.

Fizik ikinci soruya çok güçlü cevaplar verir.

Birinci sorunun aynı biçimde cevaplanabilir olup olmadığı açık değildir.

Benzer biçimde bir kuantum alanının matematiksel yapısını tanımlayabiliriz. Alanın nasıl evrildiğini, hangi etkileşimlere girdiğini ve hangi deney sonuçlarını verdiğini hesaplayabiliriz.

Ancak:

“Kuantum alanı ontolojik olarak nedir?”

diye sorduğumuzda çoğu zaman yeniden matematiksel ilişkilerini anlatmaya başlarız.

Bu durum, bilimin şeylerin “ne olduğunu” değil, en azından öncelikle “nasıl ilişkiler kurduklarını” yakalıyor olabileceği fikrini doğurur.

Yapısal Realizm

Bu noktada yapısal realizm adı verilen yaklaşım özellikle ilginç hale gelir.

Yapısal realizmin temel düşüncesi kabaca şöyledir:

Belki bilim bize şeylerin nihai olarak ne olduğunu söylemekte sınırlıdır.

Ancak şeyler arasındaki ilişkisel yapıyı gerçekten keşfedebilir.

Bu durumda bilimsel ilerleme:

yanlış harita → doğru harita

şeklinde düşünülmek zorunda değildir.

Daha uygun model:

daha sınırlı harita → daha kapsamlı harita

olabilir.

Yeni harita eskisinin başarılı biçimde yakaladığı ilişkileri korurken daha geniş bir alanı açıklayabilir.

Newton mekaniğinin belirli koşullarda daha kapsamlı teorilerden yaklaşık olarak geri elde edilmesi buna örnek oluşturur.

Bu perspektif, bilimsel realizm ile epistemolojik ihtiyat arasında bir orta yol sağlar.

Dış gerçekliğin var olduğunu kabul ederiz.

Onun hakkında gerçek bilgi edindiğimizi kabul ederiz.

Ancak teorilerimizin kullandığı bütün nesnelerin ve kavramların gerçekliğin ontolojik yapısıyla bire bir aynı olduğunu iddia etmek zorunda değiliz.

Matematik İçin Yapısal Realizm Mümkün mü?

Aynı yaklaşım matematiğe uygulanabilir.

Matematiksel Platonculuğu kabul edelim:

Matematiksel gerçeklik insan zihninden bağımsızdır.

Ancak insanların oluşturduğu formal sistemlerin bu gerçekliğin haritaları olduğunu düşünelim.

Bu haritalar gerçek ilişkileri yakalayabilir.

Birbirleriyle tutarlı olabilir.

Yeni sonuçlar öngörebilir.

Birbirlerinin belirli bölümlerini kapsayabilir.

Fakat hiçbirinin matematiksel araziyle ontolojik olarak özdeş olduğunu baştan varsaymak zorunda değiliz.

Bu durumda Cantor’un teorisi son derece başarılı ve güçlü bir harita olabilir.

Gödel’in sonuçları başka bir yapısal sınırı gösterebilir.

Başka formalizmler matematiksel arazinin farklı yönlerini yakalayabilir.

Böyle bir görüş matematiği keyfî bir insan icadına indirgemez.

Tam tersine, matematiğin bizden bağımsız bir nesnesi bulunduğunu kabul eder.

Kuşku duyulan şey arazinin varlığı değil, belirli bir haritanın araziyle özdeşliğidir.

Haritanın Doğruluğunu Nasıl Test Ederiz?

Burada ciddi bir epistemolojik problem ortaya çıkar.

Coğrafi haritada doğruluğu test etmek kolaydır:

Haritayı alır, araziye gider ve karşılaştırırız.

Matematiksel gerçeklikte ise bağımsız bir “arazi ölçümü” yapmak mümkün görünmez.

Bir matematiksel formalizmi başka matematiksel düşüncelerle değerlendiririz.

Bir aksiyom sistemini başka mantıksal araçlarla inceleriz.

Bir teoremin sonuçlarını başka matematiksel yapılarla karşılaştırırız.

Dolayısıyla bir anlamda:

harita₁ ↔ harita₂ ↔ harita₃

karşılaştırmaları yapıyoruz.

“Arazinin kendisi” doğrudan karşılaştırmanın tarafı haline gelmiyor.

Fizikte durum biraz farklıdır, çünkü deneysel ölçüm vardır.

Ancak deneyin kendisi de tamamen temsil dışı değildir.

Bir cihaz fiziksel olayla etkileşir.

Sinyal üretir.

Sinyal kaydedilir.

Veri işlenir.

Sonuç teorik kavramlar içinde yorumlanır.

Dolayısıyla fizik bile gerçekliği hiçbir aracılık olmaksızın bize sunmaz.

Buna rağmen bağımsız yöntemlerin aynı sonuçlara ulaşması son derece önemlidir.

Farklı cihazlar, farklı teorik yollar ve farklı deney düzenekleri aynı nicel yapıya yaklaşıyorsa, bunun yalnızca tek bir temsil sisteminin iç özelliği olması giderek daha az olası görünür.

Bu, yapısal realizmin en güçlü dayanaklarından biridir.

Kaynağın Varlığını Nereden Biliyoruz?

Bütün bunlardan sonra daha radikal bir soru ortaya çıkar:

Eğer yalnızca haritalara erişiyorsak, bir arazi olduğunu nereden biliyoruz?

Bu soruya matematiksel bir ispat vermek kolay değildir.

Ancak dış gerçeklik lehine güçlü gerekçeler vardır.

Dünya beklentilerimize direnç gösterir.

Deneyler kişisel tercihlerimize göre sonuçlanmaz.

Bağımsız gözlemciler aynı ilişkileri bulabilir.

Teoriler henüz yapılmamış deneylerin sonuçlarını doğru tahmin edebilir.

Farklı yöntemlerle yapılan ölçümler aynı nicel yapılarda birleşebilir.

Bunların tamamı, temsil sistemlerimizden bağımsız düzenli bir kaynak bulunduğunu düşünmek için güçlü gerekçeler sağlar.

Ancak:

“Bir arazi vardır.”

ile

“Arazinin kendinde ne olduğunu biliyoruz.”

aynı iddia değildir.

İlkini kabul edip ikincisi konusunda çok daha ihtiyatlı olmak mümkündür.

Cantor’a Geri Dönüş

Bu çerçevede Cantor’un diagonal kanıtına yeniden baktığımızda başlangıçtaki problem daha kesin biçimde ifade edilebilir.

Cantor’un kanıtı, klasik küme teorisinin içinde belirli sonsuz kümeler arasında bire bir eşleme kurulamayacağını gösterir.

Bu matematiksel sonuç ile:

“Matematiksel gerçekliğin kendisinde farklı büyüklüklerde sonsuzluklar vardır.”

şeklindeki ontolojik yorum arasında bir adım vardır.

Bu adım çoğu zaman fark edilmeden atılır.

Oysa Platoncu fakat formalizm konusunda ihtiyatlı bir yaklaşım şu soruyu sorabilir:

Kardinalite, matematiksel arazinin temel bir özelliği midir, yoksa onu anlamak için kullandığımız küme-teorik haritanın koordinat sistemlerinden biri midir?

Bu soru diagonal kanıtta hata aramaz.

Diagonal kanıtın bize ne hakkında bilgi verdiğini sorgular.

Bu nedenle Cantor’a yönelik felsefi açıdan daha güçlü soru:

“Diagonal kanıt doğru mu?”

değildir.

Daha temel soru şudur:

“Diagonal kanıtın ortaya çıkardığı yapının matematiksel gerçekliğin ontolojik yapısıyla aynı olduğunu nereden biliyoruz?”

Bu sorunun cevabı artık yalnızca matematiğin kendi içinde bulunamaz.

Sonuç

Bu tartışmada birbirinden ayrılması gereken en az dört iddia vardır:

  1. Bizden bağımsız bir gerçeklik vardır.
  2. Bu gerçeklikte keşfedilebilir düzen ve yapılar vardır.
  3. Matematik ve fizik bu yapıların en azından bir bölümünü gerçekten yakalayabilir.
  4. Belirli bir matematiksel veya fiziksel formalizm, bu gerçekliğin ontolojik yapısıyla özdeştir.

İlk üç iddiayı kabul edip dördüncü konusunda kuşkucu olmak mümkündür.

Böyle bir pozisyon matematiği keyfî bir sembol oyununa indirgemez.

Aynı zamanda kullandığımız matematiksel araçları gerçekliğin kendisiyle özdeşleştirmekten kaçınır.

Bu bakımdan harita–arazi ayrımı önemlidir.

Harita yanlış olmak zorunda değildir.

Harita gerçek bilgi taşıyabilir.

Harita son derece hassas olabilir.

Bir harita diğerinden açıkça daha iyi olabilir.

Bir harita henüz gidilmemiş bölgeler hakkında doğru tahminlerde bulunmamızı bile sağlayabilir.

Ancak bütün bunlardan:

harita = arazi

sonucu çıkmaz.

Cantor klasik küme teorisi haritasında sonsuzluğun beklenmedik yapısını ortaya koyar.

Gödel belirli formal haritaların kendi sınırlarını gösterir.

Kant, insan deneyiminin haritanın tamamen dışına çıkıp “kendinde araziyi” görüp göremeyeceğini sorgular.

Modern fizik ise giderek daha hassas ve kapsamlı haritalar üretirken, bu haritaların altında yatan gerçekliğin ontolojik olarak ne olduğu sorusunu her zaman aynı kesinlikle cevaplayamaz.

Belki bilim ve matematiğin erişebildiği en sağlam şey, nesnelerin nihai olarak ne olduklarından çok, hangi ilişkiler içinde bulunduklarıdır.

Bu durumda bilgi ilerledikçe haritalarımız daha kapsamlı, daha tutarlı ve daha öngörücü hale gelebilir.

Fakat bundan arazinin kendisine doğrudan eriştiğimiz sonucu zorunlu olarak çıkmaz.

Dolayısıyla temel soru açık kalır:

Bir araziyi giderek daha doğru haritalandırmak, arazinin kendisini giderek daha doğrudan kavradığımız anlamına gelir mi?

Bu soru yalnızca matematiğe ait değildir. Matematik felsefesi, fizik felsefesi ve epistemolojinin ortak problemlerinden biridir.