Bıktım, bu yüzden bir tarayıcı yazıyorum
(adayinthelifeof.nl)- Kişisel haber kaçınma deneyimi teknoloji haberlerine de taşınırken, tekrar eden olumsuz değişimler karşısında duyulan çaresizliğin sonunda kendi tarayıcısını yapmaya karar veriyor
- Hacker News'te istenmeyen güncellemeler, abonelik ücret artışları, kişisel veri toplama, şifrelemenin yasaklanması tartışmaları ve tarayıcı ekosisteminin kontrol altına alınması gibi eğilimlerle sürekli karşılaşıyor
- Bu kez sadece kaçınmak yerine, bir programcı olarak kod yazarak ve yayımlayarak küçük bir karşılık vermeyi deniyor
- Projenin tamamlanma ya da ana akım bir tarayıcı olma ihtimalini düşük görüyor; yardım alamazsa yakında durabileceğini de kabul ediyor
- Ticari olmayan ve açık bir tarayıcı projesinin başkalarına ilham vermesini ve daha fazla alternatif projeye yol açmasını umuyor
Haberlerden kaçınmanın tarayıcı geliştirmeye dönüşme süreci
- Yaklaşık 10 yıl önce arabayla sık sık müşterilere gidip gelirken Hollanda'nın Business News Radio (BNR) ya da Radio 1 kanalını dinliyordu; ama bir gün radyoyu kapattıktan sonra haberleri bir daha dinlemek istemediğini fark etti
- Haberlerde savaş, yolsuzluk gibi kötü olayların sürekli tekrarlandığını düşünüyordu ve birey olarak bu sorunları çözmesinin bir yolu olmadığını görüyordu
- Sonrasında haber dinlemekten, izlemekten ve internette haber taramaktan kaçındı; saat 8 haberleri başladığında kanalı değiştiriyor ya da haberin açık olduğu odadan çıkıyordu
- Önemli gelişmelerin insanlardan zaten bir şekilde kendisine ulaştığını düşünüyor, genel haberler yerine yalnızca bazı Reddit alt dizinleri ile teknoloji haberlerini sınırlı biçimde takip ediyordu
Teknoloji haberlerinde de tekrar eden çaresizlik
- Teknoloji haberlerini yaklaşık %98 oranında Y Combinator'ın Hacker News'i üzerinden takip etti; ancak zamanla 10 yıl önce genel haberlerde hissettiği duygular yeniden büyümeye başladı
- Tekrar tekrar karşılaştığı sorunlar şunlardı: istenmeyen güncellemeler, verilen sözlerin bozulması, abonelik ücretlerinin artırılması, şirket satın almaları ve daha fazla kişisel veri toplama girişimleri
- Hükümetlerin çocuklara yönelik cinsel suçluları gerekçe göstererek şifrelemeyi yasaklamaya çalışmasını da aynı sorunun bir parçası olarak görüyor
- Tarayıcılar, dünyanın neredeyse herkesinin zaman geçirdiği yer olduğu için özellikle önemli bir alan haline geliyor
- Tarayıcının kendisi reklam gösterirse, site reklamlarını engelleyen reklam engelleyicilerin buna karşı koyması zorlaşabilir
- Belirli bir tarayıcıya özel eklentiler yüzünden başka tarayıcılarda sitelerin kullanılamaz hale geldiği örnekler vardı; tekel sorununu aşmanın bir yolu bulunursa bunun yeniden tekrarlanabileceğini düşünüyor
Neden kendisi yapmaya karar verdi ve neden beklentisi düşük
- Bu kez sadece kaçınmak yerine, bir programcı olarak tarayıcıyı doğrudan geliştirebileceğine ve kodu paylaşabileceğine karar veriyor
- Tarayıcı yapmaya karar vermesinin iki nedeni var
- Çok küçük de olsa geri itmeye yönelik bir deneme yapmak
- Eskiden beri kendi tarayıcısını yapmak istemesi gibi kişisel bir neden
- Projeden büyük beklentileri yok
- Tamamlanacağını beklemiyor
- Yardım edecek kimse olmazsa yakında ölebileceğini düşünüyor
- Mevcut büyük tarayıcıları yıkacak baskın bir tarayıcı olacağını beklemiyor
- Olmasını istediği şey, ticari olmayan bir amaçla açık olması ve başkalarına ilham vererek kendi projelerini üretmelerine imkan tanıması
- Projenin ilerleyişi codemusings.nl'deki ilerleme yazısında görülebilir
- Proje deposu jaytaph/gosub-browser adresinde
1 yorum
Hacker News yorumları
OP benim. Olumlu/olumsuz/nötr tüm yorumlar için teşekkürler; birkaç şey eklemek gerekirse, katkıda bulunulabilecek zaten çok sayıda tarayıcı projesi olduğu ve bunun daha verimli olduğu doğru, ama o zaman geriye yalnızca birkaç tarayıcı kalıyor. Ben insanların seçenekleri olması için çok sayıda tarayıcı olmasını istiyorum.
Bu kesinlikle kişisel bir proje. Teknoloji sektöründen bıkmış olmasaydım da muhtemelen başlayacağım bir işti; ama hiçbir şeyi değiştiremeyeceğim hissinin yarattığı çaresizliğe kızgınım ve bu da benim bir şeyler yapmayı deneme biçimim. Gerçekten bir tarayıcının tamamlanmasını beklemiyorum. İnsanlar koduma bakıp ister gülsün, ister daha iyi fikirler edinsin. Örneğin whatwg sitesi gibi HTML5 tokenizer ve parser algoritmaları adım adım açıklanmış olursa, herkesin kendi HTML5 parser’ını yazması kolaylaşır. Google veya Microsoft pazar hâkimiyetine dayanarak kapalı biçimli, özel bir HTML5; örneğin ghtml gibi bir şey üretirse bunu kim engelleyebilir? Sıfırdan başlamak istememin nedeni, en alttaki teknik zorlukları daha iyi anlamak istemem.
“Haberler”in sefaleti hakkındaki sözlere de katılıyorum. Psikolojik savaşta buna moral bozma (sapping) denir. Eskiden düşman, direnme iradesini kırıp insanları güçsüzleştiren propaganda yapardı; klasik örnek Lord Haw-Haw’du. https://en.wikipedia.org/wiki/Lord_Haw-Haw
Günümüzde ana akım haber kanalları ve teknoloji devleri insanları kalıcı bir umutsuzluk ve kaygı içinde tutmaya çalışıyor gibi görünüyor. Teknoloji tartışması da sinizm, kaçınma, inkâr, kabulleniş ve öğrenilmiş çaresizlik çukuru gibi; son dönemde çok sayıda röportaj ve duygu analizi yaptım, sonuçlar korkunçtu. “Tech” kelimesinin kendisi “direniş boşunadır” ile eş anlamlı hâle geliyor gibi. Başarı beklediğin için değil, örnek olmak ve kendi akıl sağlığını korumak için bir şeyler yapmak, en olumlu ve en insani tepki.
Linus Torvalds’ın ifadesiyle, “GNU gibi büyük ve profesyonel bir şey yapmaya çalışmıyorum, kendim için yapıyorum” tavrıyla yola çıkınca çok daha az çabayla çok şey başarılabilir. Böyle yapınca pratik tavizler verebilir, ister öğrenme amacıyla ister gerçek kullanım için olsun bir “ürün” yapmaya kıyasla çok daha az emekle kendin için yararlı bir şeye ulaşabilirsin. Benim kişisel projelerim de çoğu kez böyle küçük kişisel projeleri keşfedip parçalarını yeniden kullanırken bambaşka yönlere gitti. Devasa, özellikleri tamamlanmış bir canavarı küçültmek veya uyarlamaktansa “yeterince yakın” küçük bir projeyi alıp kullanmak çok daha kolay. Tarayıcının karmaşıklığının büyük kısmı tüm siteleri ve tüm kullanım senaryolarını desteklemek zorunda olmasından geliyor; ama kendim için yaparsam, önemsediğim sitelerin yeterince iyi çalışmasına odaklanabilirim ve sorun ciddi biçimde küçülür. Daha fazla insanın “imkânsız” projelere girişmesini isterim. Bütünü hemen başkalarına yararlı olmasa bile parçaları yararlı olabilir; bazen de Linux gibi küçük bir kişisel projeden daha büyük bir şey doğar.
Birinin projesinin işe yaramaz bir zaman kaybı olduğunu söylemeye harcanan zamanın yarısı bile yapıcı bir şeye harcansaydı, dünyada çok daha fazla harika ve ilginç proje olurdu. Hiç denememektense cesur ve iddialı bir işte başarısız olmak daha iyidir.
Modern web tarayıcısının tüm özelliklerini implemente etmek gerekmiyor. Battery API, Game Controller API, USB gibi şeylere gerek yok; önemli olan HTML, CSS ve JS’ye odaklanmak. En kötü durumda bile yeni bir şey öğrenirsin. Projede bol şans.
“Hiçbir şey beklemiyorum, bitirmeyi de beklemiyorum, yardım edecek kimse olmazsa yakında ölecek bir proje, piyasadaki dev oyuncuları devirecek baskın tarayıcı olmasını beklemiyorum” sözleri, Linus’un comp.os.minix’e gönderdiği Linux’un ilk duyurusuna benziyor.
“Minix kullanan herkese merhaba. 386(486) AT klonları için özgür bir işletim sistemi yapıyorum. Sadece hobi, bu yüzden gnu gibi büyük ve profesyonel olmayacak…” diye başlayıp bash ve gcc’yi port ettiğini, birkaç ay içinde pratik bir şeyin ortaya çıkacağını düşündüğünü, uygulama sözü vermese de istenen özelliklerin söylenmesini istediğini yazdığı o gönderi. Sonunda da hiç minix kodu olmadığını, çok iş parçacıklı bir dosya sistemi bulunduğunu ama taşınabilir olmadığını ve muhtemelen AT sabit diskleri dışında bir şeyi desteklemeyeceğini söylemişti.
Bir projenin nereye varacağını kimse bilemez. Ve kendi nedenlerinle yaptığın bir işse, bir bakıma bunun önemi de yoktur.
HN’de tarayıcılar ve açık web hakkında böylesine olumsuz bir hava olmasına alışkın değilim. Başarılı olup olmamasından bağımsız olarak bunun çok değerli bir deneme olduğunu düşünüyorum.
Ortaya çıkan şey, büyük teknoloji şirketlerinin motivasyonları tarafından yönlendirilmeyen yarım yamalak bir tarayıcıdan ibaret olsa bile, bir gün Firefox’a bağımlı olmayı bırakmamız gereken an gelirse işe yarayabilir. Firefox’u çok sevdiğim için o günün gelmemesini umuyorum ama web’e erişirken tarayıcımın bir tür darboğaz olduğunu fark ettim. Aynı içeriği görebileceğim başka web siteleri de var, kullanabileceğim başka bilgisayar markaları da; ama arada her zaman Firefox var. Başka tarayıcılar da var ama çoğu Googlium’a, ya da bugün adı her neyse ona, dayanıyor gibi görünüyor. Bu yüzden bol şans diliyorum, başarılı olmasını umuyorum ve RSS akışına abone olup projeye ara sıra göz atmayı düşünüyorum
Bunun gerçekten mümkün olduğuna dair kanıt da var. Ladybird sıfırdan yapıldı; hatta başlangıçta C++ standart kütüphanesini bile kendileri yazmışlardı ve 3-4 yıllık yarı zamanlı çalışmanın ardından artık Discord’u da yavaş da olsa çalıştırıyor. Şu anda tam zamanlı geliştiricileri de var. GoSub ise cargo.lock’a bakınca her şeyi sıfırdan uygulamaya çalışıyor gibi görünmüyor; görüntü çözücüleri gibi şeylerde hazır bileşenler kullanma ihtimali yüksek görünüyor, bu yüzden daha hızlı büyüme potansiyeli de var
Bugün “sıfırdan tarayıcı yazmak” aslında kutu içinde taşınabilir bir işletim sistemi, yani web platformunu uygulamak ve Google’ın kendi tarayıcısına eklemeye karar verdiği şeylerle uyumlu hale getirmek anlamına geliyor sayılır.
Tarayıcılar o kadar geniş bir özellik ve API yelpazesine sahip ki, Google’ın durmaksızın yaptığı özellik değişikliklerini ve hâkimiyetini yakalamak zor; Microsoft bile bunu başaramadı. İlgili bir kişisel proje olarak Tersenet var. https://github.com/runvnc/tersenet
Neredeyse hiç uygulaması olmayan bir kavram sayılır, ama gereksinimler insanların uygulayabilmesi için özellikle seçilmiş. Tam bir web tarayıcısından çok daha az karmaşık. GPT-4 ile ilgili bir tartışma da var. https://chat.openai.com/share/16d02b78-f876-4c87-949a-a60b4f...
Gerçekten var olan ve pratik bir Gemini projesi de ilgili. https://geminiprotocol.net/ Tersenet fikrine ilham vermişti
WebSQL, IndexedDB, service worker’lar, WebGL, WebGPU, WebBluetooth, WebRTC gibi şeylerin hepsi yokmuş gibi davranabilirsiniz. Gerçek web sitelerinin %99’u, yani web “uygulaması” olmayan siteler, işlev kaybı yaşamaz
Kişisel olarak Blink ve akrabası WebKit’in tek kültürüne, ayrıca Gecko/Quantum dışında daha fazla alternatif motor olmasına sevinirim. WebKit tarafından yutulmadan önce KHTML’in tuttuğu yerin yerini alacak bir şey ya da deneyebileceğimiz başka bir açık kaynak seçenek olsa güzel olurdu
Bu fikre büyük ölçüde katılan insanların kullanacağı bir alt küme üzerinde anlaşmasını isterdim; Google tarayıcısının yaptığı her şeyi yapmayan bir tarayıcıyla da memnun olabilirim. Ben uMatrix ile Google özelliklerinin epey bir kısmını kapatıyor, google.com alan adını asla izin listesine almıyor ve yine de dünyanın sonunun gelmediğini kanıtlar gibi kullanıyorum. Çalışmayan siteler görece az
Web sitelerinin büyük çoğunluğu Google’a özel, sonradan çıkarılmış reklam teknolojileri, AMP, DRM gibi şeyleri izlemek istemiyor
Mozilla ve diğerlerinin, herkesin kullanabileceği bağımsız bir JavaScript “VM”i yapması gerekebilir
“Gerçek” bir tarayıcının nasıl çalıştığını hiç bilmezken kendi tarayıcısını yazmaya kalkmış biri olarak, üstelik özel bir layout engine de yapmış biri olarak, sadece deneyin derim.
Kendi kodunuzla bir web sitesinin render edildiğini görmek, kod ya da çıktı ne kadar berbat olursa olsun çok tatmin edici. Benim projem yaklaşık iki buçuk yıllık ve artık HN’i ve basit blogları fena olmayan şekilde render ediyor. Başta yerine geçirmeyi düşündüğüm w3m’den nesnel olarak daha iyi mi, derseniz pek sayılmaz; hâlâ bazı işler için w3m’ye geri dönüyorum. Yine de hiç düşünmediğim işlerde faydalı oluyor, programlama hakkında çok şey öğrendim ve sonuçta çalışıyor olması harika. https://sr.ht/~bptato/chawan
Tarayıcı yapmak, rendering engine ve layout engine yapmak demektir. İmkânsız değil ama epey büyük bir iş
Ama meyve verme olasılığı daha yüksek pek çok iş de var. Servo’yu Nyxt Browser’a port edebilir ya da WebKit/Servo/Gecko’yu fork’layıp reklam şirketlerinin son 10 yılda kullanıcılara zarar verecek şekilde web standartlarına enjekte ettiği istilacı şeyleri ayıklayabilirsiniz. Zaten sıfırdan yaparken yapmanız gerekecek işler bunlarsa, en dipten başlamak yerine birlikte çalışmaya istekli mevcut bir topluluktan başlamak daha iyi
Gecko monolitik yapının tanımına yakın; bu yüzden saldırı yüzeyini ortadan kaldırmak imkânsız. Tor bile her iç API veya bridge değişikliğinde bozulan berbat bir stub değiştirme yöntemi kullanıyor. Ancak upstream’i tek başıma takip etmem imkânsız; katkı verenlere ve bakımcılara ihtiyaç var. Siber güvenlik açısından saldırı yüzeyini olabildiğince belgeledim, kalan işleri ve sonunda kaldırılması gerekenleri yazdım. https://github.com/tholian-network/retrokit/blob/main/SECURI...
RetroKit’i kendi Browser Stealth’imin webview’i olarak kullanmak istediğim için bu oldukça öznel olabilir. Browser Stealth; filtreleme proxy’si, scraper ve merkeziyetsiz cache olarak çalışıyor. https://github.com/tholian-network/stealth Şu anda golang ile yeniden yazıyorum
https://github.com/pop-os/cosmic-text gibi bir text layout engine ile birleştirilmesi gerekiyor ve henüz tüm özellikleri desteklemiyor. Şu anda eksik olan başlıca özellikler
float,display: inline-block,box-sizing: content-box,position: static. Ama Block, Flexbox ve CSS Grid’i destekliyor; daha fazlasını da ekliyoruzBüyük bir iş olduğu kesin ama kendini adamış küçük bir ekibin yapabileceği en imkânsız şey de değil
Makul derecede basit HTML web sitelerini render etmekle başlanabilir; acele etmeye gerek yok ve standardın her köşesini uygulamak zorunda olduğunu söyleyen katı bir kural da yok. Web tarayıcıları ve web, muhteşem derecede insani şeyler
Mevcut engine’leri alıp birbirine bağlasanız ve istediğiniz zaman değiştirebilecek kadar modüler yapsanız bile bu hâlâ düzgün bir tarayıcıdır. Şahsen buradaki insanların iç dişlilere fazla odaklandığını düşünüyorum; gerçekte ise rendering/layout/scripting dışında daha iyi arayüzlere ve başka bileşenlere ihtiyaç var
Destekliyorum. Devam etmeni umarım
Python ile ORC Solver algoritmasının çok küçük bir bölümünü uyguladım ve rendering için wxWidgets kullandım. Metin genişliğini hesaplamak için wxWidgets’in text extent API’sini kullandım. ORC Solver whitepaper’ı burada. https://yuejiang-nj.github.io/Publications/2020CHI_ORCSolver...
Branch and bound’u nasıl uygulayacağımı düşünüyorum; ilgili bilgi varsa iyi olur. Dizgi algoritmalarını görmek için TeX codebase’ini incelemem gerekecek gibi, layout bin packing için JavaScript kütüphanesi Masonry’yi kullanmak da çok ilginçti
“HTML’imi istiyorsan vereceğim! Arayın! Dünyadaki her şeyi oraya bıraktım”
“Böylece hacker’lar hayallerinin peşinden HyperText Line’a yöneldi ve dünya gerçek Büyük Tarayıcı Çağına girdi!”
Yıllarca tarayıcının aşılamaz bir dağ olduğuna inandım ama artık giderek daha fazla insan bunu başarabileceğimize inanıyor gibi. 2 saniyelik analizime göre bu akımı görmemizin nedeni, yeni tarayıcı yapımcılarının mevcut dev canavarları taklit edip onlarla rekabet etmek istemesi değil, web’i değiştirmek istemesi. Hoşuma gidiyor
Yazının siyasi kısmına gelince, dünya bozuk ve sadece bozuk haberleri okumak yorucu. Ama gerçeklikten kopup “apolitik” olmak, insanlıktan vazgeçmek; yani kendi çocuklarından ve yeğenlerinden, en yakın arkadaşlarının çocuklarından vazgeçmek demek bence.
Dünyayı değiştirmek zorunda değilsin; kendi topluluğundaki küçük değişimler bile yeterli. Özellikle kod yazanlar olarak ürettiklerimiz, dünya çapında binlerce kişiyi etkileyip yönünü değiştirebilir. Herkes zamanının yalnızca %3–5’ini topluluğu desteklemeye ve bir tür faaliyete ayırsaydı durum farklı olur muydu diye bazen düşünüyorum.
Haberlerde okuyacağım hiçbir şey oy verme biçimimi değiştirmeyecek; oysa haberlere bakmanın en iyi nedeni de muhtemelen bu olurdu.
Açıkça söylemek gerekirse ben dünyadan vazgeçtim. Ama başkalarının çocukları benim sorumluluğum değil. “Doğru olanı” yapmak için başkaları kadarını yapıyorum, ama daha fazlasını değil. Eskiden bunları düşünür, kişisel ayak izimi azaltmaya çalışır, sürdürülebilirliği ve gelecek nesilleri de hesaba katardım; ama umudumu kaybettim. Akıntıya karşı savaşıyormuşum gibi geliyordu. Artık sadece ayak izimin ortalamanın üstüne çıkmamasına ve çevremdekilere iyi davranmaya çalışıyorum.
Rust şartsa, Servo’ya katkıda bulunup küçük PR’larla başlayarak öğrenmek daha faydalı olabilir gibi geliyor. https://github.com/servo/servo
Yine de mevcut kod tabanını okumakta zorlandığın ya da daha iyisini yapabileceğini düşündüğün için “sıfırdan” proje yaptığım oldu; bu yüzden anlıyorum. Herkesin kendi yöntemi var.
Benzer şekilde Servo, Firefox tarayıcısının bazı kısımlarının yerine geçecek şekilde tasarlanmıştı; bu yüzden “Gecko biçimli” boşluklara uyması gerekiyordu. Örneğin Firefox’un geri kalanıyla uyumluluk nedeniyle birçok yerde UTF-16 dizeleri kullanıyor. Bugün olsa Servo’yu modern Rust ile yeniden yazıp daha küçük, daha çevik ve belki de daha hızlı hale getirmek mümkün olabilir.