Ali Gündoğdu

CTO @gensuretech | Tech Guy & Father

Wails Notlarım

QBasic ile Başlayan Yolculuk

İlk uygulamamı QBasic 4.5 ile yapıp satmıştım.
Tabii ki müthiş bir ticaret değildi. Bir müşteri, ekranda girdiği değeri birkaç formülden geçirip çıktı üretmemi istemişti.
Basit haliyle programlanabilir bir hesap makinesinden farksızdı. Çok kısa sürede bitti, karşılığında da “harçlık” sayılabilecek bir ücret aldım.

QBasic arayüzü.


O günden sonra DOS’un sınırlı renkleriyle hazırlanmış arayüzler hep dikkatimi çekmeye başladı.

DOS döneminin tipik iş uygulamaları.

DOS döneminin tipik iş uygulamaları.


O dönem otobüs bileti satan büroların, muhasebe firmalarının ekranları bana harika UX tasarımları gibi görünüyordu.
80 sütun, 25 satır… ama kullanıcı için işlevsel, hızlı ve anlaşılır.
Hatta bugün tekrar popülerleşen TUI kategorisindeki gelişmelerden nasıl mutlu oluyorum anlatamam.


Windows ve İlk Masaüstü Deneyimlerim

MS-DOS yerini Windows’a bıraktı. Basit işlemcili bilgisayarlara bol disketle kurulan Windows, bilgisayar dünyasını bambaşka bir noktaya taşıdı.

İlk masaüstü uygulamamı mIRC script diliyle yazdım.
Şimdi düşününce saçma gelse de, sırf öğrenme eğrisi çok kolay olduğu için IRC dışı bir uygulamayı mIRC ile geliştirdim.
Teoride basit bir ders programı takip yazılımıydı. Butonları bile Paint ile çizmiştim.

mIRC ile ilgili ekran görüntüleri.



Visual Basic 6.0: Gerçek Paket Programlar

Sonra Visual Basic 6.0 ile tanıştım.
Bu, benim için büyük bir aşk oldu. Tek taraflı mıydı yoksa o da beni seviyor muydu, bilmiyorum :)

Visual Basic 6.0 IDE’si.


Gerçek anlamda yazdığım ilk “paket programı” VS6.0 ile oldu.
O zamanlar adını koyamasam da object ve event bazlı çalışma mantığı ve IDE’nin büyülü ortamı beni etkiledi.

Bir dönem “ocx madencisi” gibi system dizinindeki OCX dosyalarını denemekle meşguldüm.
Her yeni kütüphane, yeni bir oyuncak gibiydi.


Platform Bağımsızlık Arayışı

Zamanla cihazlar çeşitlendi: Windows, Linux, macOS…
Her evde, her işyerinde farklı sistemler çalışmaya başladı.

Bu da platform bağımsız uygulamalara olan ihtiyacı artırdı.
Basit OCX kontrolleriyle idare edilen günler geride kaldı.
Toolkit’ler devreye girdi.

Sonra Web 2.0 geldi.
Masaüstü uygulamalarına harcanan emek yavaş yavaş web’e kaydı.
Sonrası zaten malum…

Belki bu zaman çizelgesinde atladığım noktalar vardır. Neticede ben artık yaşlı bir insanım :) Maruz görün.


Electron: Güzel Ama Ağır

Bugün geldiğimiz noktada ne masaüstü uygulamalarından kurtulabildik, ne de tamamen onlara bağımlı kaldık.
Cross-platform uygulama geliştirme hâlâ çok önemli bir ihtiyaç.
Üstelik bu denkleme mobil uygulamalar da dahil oldu.

Son yıllarda hayatımıza giren Electron bu ihtiyacı büyük ölçüde karşıladı.


JavaScript, Node.js ve TypeScript ile birçok işimi çözebiliyorum.
Bir masaüstü uygulamasını tamamen JS ile geliştirme fikri çok heyecan verici.
Ama iş pratiğe dökülünce durum değişiyor.

Özellikle:

  • İşletim sistemi API’leriyle doğrudan haberleşmek gerektiğinde,
  • Küçük ve optimize build çıktıları hedeflendiğinde,

Electron keyif kaçırıcı olabiliyor.
React veya Vue ile arayüz geliştirmek çok keyifli olsa da OS ile iletişim kısmı için daha kolay çözümler aramaya başladım.


Tauri: Güzel Ama Zor

Bu noktada Tauri ile yollarım kesişti.
Backend’de Rust, frontend’de istediğimiz framework.
Üstelik Chrome’u içine gömmediği için build boyutları çok küçük.

Ama Rust tarafı bana epey zor geldi.
Config dosyalarıyla uğraş, command yapısıyla boğuş…
Rust’u bilenler için keyifli ama benim için değil.
Sonunda fark ettim ki işimi kolaylaştırması gereken araç, bana ekstra yük oluyordu.


Wails: Aradığım Çözüm

Ve Wails

İhtiyaç Listem

  • Kolay adapte olup geliştirme yapabilmek
  • Kolay şekilde cross-platform build alabilmek
  • Dosya boyutunun küçük olması
  • Derleme sonrası sürprizlerin olmaması
  • Dahili bir GC (çöp toplayıcı) olması
  • İşletim sistemi özelinde çözümler için beni JS ile uğraştırmaması
  • İstediğim frontend kütüphanesiyle ek adaptör olmadan geliştirme yapabilmek

Electron vs Tauri vs Wails

ÖzellikElectronTauriWails
Backend diliNode.jsRustGo
Frontend esnekliğiReact, Vue, Angular, Svelte vs.React, Vue, Angular vs.React, Vue, Angular vs.
Dosya boyutu150+ MB10-20 MB10-25 MB
PerformansAğırHızlı ama Rust bilgisi şartHızlı ve dengeli
CORS sorunlarıVarYokYok
Öğrenme eğrisiDüşükDikOrta (Go öğrenmek kolay)
OS API erişimiZorGüçlü ama karmaşıkBasit ve temiz
Build süreciAğırOrtaHızlı ve sorunsuz

Wails’in Öne Çıkan Avantajları

  • Gerçek cross-platform deneyimi: Tek komutla Windows, macOS ve Linux build’i.
  • Küçük dosya boyutu: Electron’un 150 MB’lık dev paketleri yerine 20 MB civarında build.
  • Go ile güçlü backend: Rust kadar karmaşık değil. Concurrency, file I/O, API entegrasyonu çok kolay.
  • Doğrudan OS API erişimi: CORS sorunlarıyla uğraşmak yerine Go’da 5 satırlık fonksiyon yazıp JS’den çağırıyorsun.
  • Frontend özgürlüğü: React, Vue, Svelte veya Angular… Ne istersen doğrudan kullanabiliyorsun.
  • Stabil build süreci: “Bende çalışıyordu ama Windows’ta açılmadı” dönemi sona eriyor.

Basit Bir Senaryo

Diyelim ki bir uygulamada:

  • Kullanıcıdan bir CSV dosyası alıyorsun,
  • Go backend ile parse edip işliyorsun,
  • Vue arayüzünde tablo olarak gösteriyorsun,
  • Aynı anda bir API’ye fetch atıyorsun ve CORS derdine düşmüyorsun.

Electron ile yapsan: 200 MB paket ve karmaşık config.
Tauri ile yapsan: Rust öğrenmek şart.
Wails ile: Go’nun sadeliği sayesinde az kod, az dert.


Sonuç

QBasic ile yazdığım o basit hesap makinesinden
Wails ile geliştirdiğim cross-platform uygulamalara…
Yol uzun ama his aynı: bilgisayarın sana boyundan büyük işler yaptırabilmesi.

Ve benim için şu an o hisin adı: Wails.