90’ların başında tanıştığımız internet Web 1.0 idi. Bu internetin en belirgin özelliği statik web sayfalarından oluşması ve oldukça yavaş olmasıydı. Ben bir web sayfası yüklenirken 5-10 dakika yanımdaki arkadaşımla sohbet ettiğimi hatırlıyorum. O zamanlar belki de bu yüzden henüz internetin hayatlarımızda bu denli yeri yoktu. O dönemlerde sürekli aklıma takılan bir soru vardı: “MSN ya da ICQ gibi uygulamalar neden bedava?!”
Sonra Web 2.0 geldi. Web 2.0’ın en ayırt edici özelliği dinamik web platformlarına geçişti. Dinamik web platformlarında içeriği kullanıcı sağlıyordu ve bu çığır açan bir gelişmeydi. Kullanıcılar içerik üretmeyi, kendilerini ifade etmeyi çok sevdi. Cep telefonlarının da bu dönemde çıkması ve Web 2.0 ile birlikte gelişerek akıllı telefonlara dönüşmesi bu içerik paylaşımı çılgınlığını körükledi. Artık internet hayatımızın ayrılmaz bir parçası olurken Facebook ve Google gibi şirketler, bir avuç insana, bugüne kadar teknoloji yoluyla elde edilmemiş devasa bir güç ve zenginlik verdi. Çok geçmeden yukarıdaki sorunun cevabını öğrendim. Artık bir sır değil, hatta belki de klişe ama hepimiz bazı uygulamaları “bedava” kullanmanın karşılığında, merkezileşen bu platformlara “mecburen” kişisel datalarımızı ve mahremiyetimizi kullanmalarına, alıp satmalarına izin veriyoruz. Böylece ürün biz oluyoruz. Kısaca güvenimizi, yani otoriteyi dev şirketlerin ellerine verdik.
Güven sorunu
Güveni şöyle tarif edebiliriz: bir şeyin olacağına veya olmayacağına dair inanç. Bu inancın sağlam temellere dayanması da gerekmiyor. Şöyle örnek verelim: mesela WhatsApp’ta bir arkadaşınızla mesajlaştığınızda bu mesajlaşmanın şifrelenmiş olduğuna ve bunları kimsenin okuyamayacağına dair bir güven duyuyorsunuz. Ancak pek tabii ki WhatsApp ekibi bu şifrelenmiş mesajların şifresini çözecek bir anahtar geliştirmiş ve mesajlarımızı okuyor olabilir. Oysa WhatsApp açık kaynak kodlu bir uygulama olsaydı biz de kodlara bakar, uygulamanın nasıl işlediğini görürdük. Lakin 2021 Ocak ayında yürürlüğe giren gizlilik politikasını kullanıcılar hiç sevmemiş ve kavimler göçü olarak niteleyebileceğimiz bir kopuş yaşanmıştı.
Bundan 500 yıl önce insanlar bildikleri, güvendikleri insanlarla ticaret yapmayı tercih ediyordu. At arabasına tekerlek alacağı zaman birkaç hafta içinde kırılmayacağına, patlıcan alacağı zaman araya çürükleri kakalamayacağına güvendiği kişiden alıyordu. Dünya globalleşip köyler, kasabalar şehirlere, ülkelere dönüştüğünde ticaretin alanı da genişledi. Artık güvenin karşılığı marka şöhreti oldu. Güven, bir takım yasalarla ve regülasyonlarla sağlanmaya başlandı. Fakat bu da mükemmellikten uzak çünkü bir ülkede yasalar öyle iken başka bir ülkede ya da bölgede böyle. Ayrıca yasa koyucular ile sektörlerin güçlü temsilcileri arasında karşılıklı çıkar ilişkileri kurulabiliyor, bu da yozlaşmaya sebep oluyor.
Güven gerektirmeyen (trustless) ve merkeziyetsiz bir internet, pratikte bütün bu sorunları çözer mi, bunu zaman gösterecek ama teoride çözmesi bekleniyor. Önümüzdeki yıllarda da, geçmişte olduğu gibi demokrasiyi sağlıklı bir şekilde tahsis etmenin yolu tam olarak bu yol ayrımından geçiyor.
Sansür ve arızaya açık nokta sorunu
Bilgiye erişim özgür olmalı. Web 2.0’ın merkezileşmenin odağında gelişmesiyle birlikte bu özgürlüğü kaybettik. Merkezileşme derken hem devletleri hem de şirketleri kastediyorum. Günümüz internetindeki bütün data bir avuç şirketin elinde. Bir avuç şirket demek bir avuç server demek. Aynı zamanda bilgi merkezi olduğu, yani tek bir kaynaktan sağlandığı için, “gerekli görüldüğünde”, erişim kolaylıkla kesilebiliyor ya da kısıtlanabiliyor.
Bu da sansür ve yasak gibi sorunlar anlamına geliyor. Bu ciddi sorunu en yakından deneyimlediğimiz örneklerden biri, Türkiye’nin beş yıl önce, 29 Nisan 2017’de Wikipedia'yı erişime engellemesiydi. Bu arada IPFS geliştirilirken Wikipedia Türkçe ile test edildiğini belirtelim.
Erişimin kesilmesi, ana sunuculardan birinde meydana gelebilecek bir arızadan da kaynaklanabilir. Buna arızaya açık nokta diyoruz. Bir an için bir sunucunun çevrimdışı olduğunu ve o sevimli kedi videolarını izleyemediğinizi veya hastası olduğunuz, her gün saatlerce vakit geçirdiğiniz o sosyal medya platformuna erişemediğinizi düşünün. Böyle olaylar günümüzde halihazırda kısa süreliğine de olsa meydana gelebiliyor. Üstelik bu olaylar erişimi kesilen internet platformlarına da mali açıdan büyük zarar veriyor. Örneğin geçtiğimiz Ekim ayında Facebook, WhatsApp ve Instagram 6 saatlik bir kesintiye uğrayınca herkes ayağa kalktı. Bunu nereden biliyoruz? Çünkü herkes Twitter’daydı.
Peki o zaman neden hâlâ bu modeli kullanıyoruz?
Çünkü biz kullanıcılar yüksek hız talep ediyoruz. Web sayfalarının, görsellerin ve videoların hemen yüklenmesini ve bunlara yüksek kalitede sahip olmak istiyoruz. Bir diğer sebep de halihazırdaki sisteme şimdiye kadar yeterince hızlı ve iyi bir alternatifin var olmaması.
Merkezi internetin çalışma prensibi
Merkezi internet hızlıdır çünkü içerikler konum tabanlı adresleme yoluyla sağlanır. İnternetten bir resim indirmek ya da web sayfasını ziyaret etmek istediğinizde bilgisayarınıza bu resmi ya da web sayfasını tam olarak nerede bulacağınızı söylersiniz. Bu konum, indirmek istediğiniz resmin olduğu web sitesinin adresi yani domain’idir. Konum tabanlı adresleme URL (Uniform Resource Locator) adresleri aracılığı ile çalışır. Eğer indirmek istediğiniz resmin ait olduğu domain veya bu domain’in bağlı olduğu server örneğin çevrimdışıysa (arızaya açık nokta) resmi indiremezsiniz. Oysa bu resim muhtemelen, daha önce internette başka birileri tarafından indirilmiştir. Fakat bugünkü sistem, resmi bu kişilerden temin etmenize izin vermez. Sistem konum tabanlı adresleme yoluyla çalıştığı için, bu kopyaya sorun düzelene kadar ulaşamazsınız.
IPFS Nedir?
IPFS; veriler, web siteleri, dosyalar ve uygulamalar dahil olmak üzere her türlü içeriği depolamak ve bu içeriğe merkezi olmayan bir şekilde erişebilmek için tasarlanmış bir protokol olarak tanımlanabilir. IPFS, dosyaları depolamak ve dosyalara erişmek için P2P (Peer to Peer / eşler arası) tabanlı merkeziyetsiz bir alternatif olarak tasarlandı. Aslında tasarlanan bu çalışma torrentteki çalışma prensibi ile benzerlik gösteriyor çünkü torentte de data karşı taraftaki eşlerden data blokları halinde çekiliyor.
İlk olarak 2013 yılında tohumları atılan IPFS, 2015 yılında Protocol Labs şirketi tarafından geliştirildi. IPFS üzerinde çalışan ekip, şirketin kurucusu ve CEO'su Juan Benet tarafından yönetilen küçük bir geliştirici ekibiydi. Şirket aynı zamanda $FIL (File coin)’in de babası. Şirket açık kaynak kodlu IPFS ile günümüz internetinin sansür ve arızaya açık nokta gibi sorunlarını çözmeyi ve geleceğin internetini yaratmaya katkıda bulunmayı amaçlıyor.
İçerik Tabanlı Adresleme
IPFS’in mevcut internet ile temelden farklı olduğu konulardan biri konum tabanlı adresleme yerine içerik tabanlı adresleme kullanmasıdır. Yani bilgisayarınıza, dosyayı nerede bulacağını değil, neyi bulacağınızı söylersiniz. Bir başka deyişle, URL yerine hash kodu kullanırsınız.
Bu, içerik tabanlı adreslemenin doğru çalışabilmesi için gereklidir. Dosya veya verileri eşsiz kılan bir çalışma sistemi yaratılmalıdır ki tam olarak neyi arıyorsak onu bulabilelim. Dosya ve verilere kimlik atamak için her dosyaya benzersiz bir hash kodu -burada IPFS söz konusu olduğu için içerik kimliği (CID – Content ID)- atanır.
İçerik tabanlı adreslemede bilgisayarınıza spesifik bir CID kodunu taşıyan dosyayı aradığınızı söylersiniz. Bilgisayarınız da bağlı olduğu ağdaki node’lara bu CID kodunu taşıyan dosyanın kimde olduğunu sorar. Ağa bağlı bir node’da bu dosya mevcutsa bu istemi aldığında dosyayı size yollar. Bu dosyanın üzerinde oynanmadığından ya da içine virüs konmadığından emin olmak için CID kodlarını karşılaştırıp bunun istediğimiz dosya olup olmadığını kontrol etmemiz yeterli. CID kodları benzersiz olduğundan, değiştirilmiş bir dosyanın CID kodu da değişecektir.
IPFS Nesneleri nedir ve nasıl çalışır?
Konu depolama olduğunda dosyaları IPFS'te depolarken, sistem IPFS nesneleri oluşturuyor. Bunları blok zincirdeki bloklar gibi düşünebiliriz. IPFS nesneleri maksimum 256 KB’lık bir alana sahip olup bu alandan hariç olarak, başka IPFS nesnelerine linkler içerebiliyor. Yani bir IPFS nesnesi iki bölümden oluşuyor: 256 KB’lık veri alanı ve link alanı. Basit bir “selam dünya!” mesajı bu 256 KB’lık nesneye rahatlıkla sığar. Ancak resim ya da video gibi dosyaların büyük çoğunlukla 256 KB’ın üzerinde olduğunu biliyoruz. Bu durumda IPFS’te 256 KB'tan büyük bir dosyayı depolayabilmek için dosya yine 256 KB’lık nesnelere bölünüyor. Büyük dosya daha küçük nesnelere bölünür bölünmez, sistem bu orijinal büyük dosyayı oluşturan tüm IPFS nesnelerine link veren boş bir referans nesnesi ekliyor. Bu oldukça basit bir çözüm olmakla birlikte o kadar etkilidir ki bir dosyalama sistemi olarak kullanılabiliyor.
Bu dosyalama sistemi içerik tabanlı bir sistem olduğundan, aynı blockchain’de olduğu gibi, yaratılan ya da eklenen bir dosya değiştirilemiyor. Ancak IPFS versiyonlamayı destekleyen bir sistemdir. Diyelim ki başkalarıyla da paylaşmak istediğiniz önemli bir dosya üzerinde çalışıyorsunuz. Bu durumda sistem IPFS üzerinde bir “taahhüt nesnesi” oluşturuyor. Bu nesnenin oldukça basit bir işlevi vardır: IPFS’e hangi versiyonun kendinden önce geldiğini söylemek ve bunu IPFS nesnesine bağlamak. Siz üzerinde çalıştığınız dosyayı güncellediğinizde IPFS, dosyanıza bağlanan yeni bir taahhüt nesnesi yaratıyor ve bunu önceki versiyona bağlıyor. Bu işlem sonsuza kadar devam edebilir. IPFS, dosyanızı ve bunun bütün geçmişini yani farklı sürümlerini ağdaki bütün node’lara paylaşıyor. Böylece dosya, bütün geçmişiyle birlikte ağa açılmış oluyor.
Özetle IPFS nesneleri;
A- Büyük bir dosyanın 256 KB’lık parçaları olabilir. Referans nesnesi bu parçalara link verir.
B- Üzerinde çalıştığınız bir dosyanın bütün versiyonlarını içerebilir (taahhüt nesnesi)
Yönlendirilmiş Döngüsel Olmayan Grafikler (DAG)
IPFS'in yapısı bir dizin ve dosya sistemini takip edecek şekilde optimize edilmiştir. Yani, IPFS protokolü bir node’un içeriğini farklı bloklara böler. Bu, içeriğin daha yüksek bir hızda doğrulanmasını ve daha güvenli olmasını sağlar. Ayrıca, her klasörün bir CID'i, klasördeki dosyaların kendi CID'leri ve bu dosyaların bölünmüş parçalarının da CID’leri olduğu için bu yapıya Merkle DAG grafiği denir. Merkle ağacı kavramı 1979 yılında Ralph Merkle tarafından geliştirilmiştir.
Yönlendirilmiş Döngüsel Olmayan Grafikler (Directed Acyclic Graphs / DAG), birçok merkeziyetsiz sistem tarafından kullanılan bir veri yapısı biçimidir. IPFS, Merkle DAG'leri olarak bilinen DAG yapılarını kullanır. Bu veri yapısında, her node’un, sahip olduğu içeriği temsil eden benzersiz bir hash kodu vardır.
Şekildeki yeşil alanları (yaprakları) verinin 256 KB’lık parçaları olduğunu düşünelim. En üstteki kahverengi parça (kök) ise dosyanın bütün halini ifade ediyor. Bu şemayı aynı zamanda bir dosyanın eski versiyonları veya bir node’un içeriği olarak da düşünebiliriz.
Bu veri yapısını kullanmanın bir başka yararlı etkisi, benzer dosyaların Merkle DAG'ının bölümlerini paylaşabilmesidir. Yani, bir projeyi güncellediğimizde, yalnızca güncellenen dosyalar yeni bir CID alır.
IPFS’in Dezavantajı
IPFS en büyük sorunu, teknoloji nispeten yeni olduğu için, yani henüz ana akım olmadığı için dosyaları sürekli olarak erişilebilir kılmakta yaşıyor. Eğer bir dosyanın kopyası sadece birkaç node’da bulunuyorsa ve bu node’lar o sırada çevrimdışıysa dosya ulaşılamaz olur. Tam olarak torentte bir dosyayı indireceğimiz zaman seeder olmaması gibi.
Bunu aşmanın iki yolu var:
1- Node’ları sürekli online olmak konusunda teşvik etmek
2- Dosyaları proaktif olarak dağıtmak ve belirli sayıda kopyanın mevcut olduğundan emin olmak.
Bugün, blockchain tabanlı çeşitli dosyalama ve depolama projeleri bu yöntemleri kendi çalışma sistemlerine entegre ediyorlar.
Peki neden adı gezegenler arası?
Güzel soru! Diyelim ki Mars’ta bir üstesiniz ve dünyayı çok özlediniz. Dünyadaki internetten dünyadaki güzel bir yerin fotoğrafını istediniz. Bu istem sinyali dünyaya 4 dakika ile 24 dakika arasında gider. Dünya bu istemi 10 milisaniyede tamamlar ve Mars’a geri gönderir. Bu sinyalin seyahati de iyi bir günde 4 dakika, kötü bir günde 24 dakika sürer. Yani basit bir fotoğrafı Mars’ta görüntülemek 8 ila 48 dakika arasında bir zaman alır. Fakat eğer daha önce Mars’taki bir başkası da bu fotoğrafı istemişse IPFS sistemi ile bu fotoğrafa saniyeler içerisinde ulaşabilirsiniz. Bu şekilde internet, güneş sistemimizdeki hatta daha uzaktaki gezegenler arasında da erişilebilir olur. Heyecan verici değil mi?
Özetle
IPFS, dosyaların tek bir merkezden herkese dağıtılması yerine, herkesin herkese dosya paylaşımı yaptığı bir sistem olarak tanımlanabilir. Bu sistemde dosyalar oluşturulurken ve paylaşılırken 256 KB’lık parçalara bölünüyor. Bu parçalara nesneler deniyor ve her biri bir nevi “ben orijinal dosyanın bir parçasıyım” diyen bir link içeriyor. Orijinal dosya, dosyanın bulunduğu klasör ve bu içeriğe sahip olan node CID adı verilen hash kodlarını alıyor. Bu şekilde hız ve güvenlik sağlanıyor.
Böylece dosyalar (web sayfaları, uygulamalar, videolar vs) merkezi bir sistem üzerinden dağıtılmadığı için sansürlenmesi de mümkün olmuyor. Böyle bir internet tam olarak Web3’ün ihtiyaç duyduğu altyapı. Bakalım Web 3, Web2’nin hatalarını çözüp daha demokratik bir toplum yaratabilecek mi? Bunu zaman gösterecek.