Ruffle - Adobe Flash Player Emülatörü

Ruffle, eski Flash içeriğini (oyunlar, animasyonlar, uygulamalar ve SWF banner'ları) çalıştırmak için gerekli olan bir Adobe Flash Player emülatörüdür. Tüm işletim sistemlerinde (Windows, macOS ve Linux dahil) bağımsız bir uygulama olarak çalışır ve WebAssembly aracılığıyla tarayıcılara entegre olur.

Ruffle, Windows, macOS ve Linux için normal programlar gibi çalışan ayrı derlemeler sunar: sadece yürütülebilir dosyayı çalıştırın ve istediğiniz SWF dosyasını içinde açın.

Ruffle, Rust dilinin bellek güvenliğinden ve modern tarayıcının korumalı alanından yararlanır. Bu, potansiyel olarak riskli eski içeriğin, sistem enfeksiyonu veya veri sızıntısı riski olmadan çalışmasına olanak tanır.

Emülatör, hem eski AVM1 (2006'ya kadar kullanılan ActionScript 1 ve 2) hem de daha karmaşık AVM2 (ActionScript 3) desteğini birleştirir. Bu, 2000'lerin başındaki animasyonlardan, teknolojinin durdurulmasından hemen önce yayınlanmış karmaşık oyunlara ve uygulamalara kadar neredeyse tüm Flash içeriğinin doğru çalışması için gereklidir.

İndirme bağlantıları:

Tüm bağlantılar resmi kaynaklara yönlendirir: Windows (x86_64), macOS (Intel ve Apple Silicon için evrensel), Linux (Raspberry Pi ve ARM cihazları için x86_64 ve ARM64) derlemeleri Ruffle projesinin GitHub deposu aracılığıyla dağıtılırken, Flatpak formatındaki Linux sürümü dijital imzalar ve uygulama izolasyonu ile resmi Flathub kataloğu üzerinden temin edilebilir.

Ruffle'ın Temel Özellikleri

WebAssembly ile Entegrasyon. Tarayıcıda çalışmak için Ruffle, WebAssembly (Wasm) formatına derlenir — bu, tarayıcının izole edilmiş korumalı alanı içinde neredeyse yerel performansla yürütülen düşük seviyeli bir bayt kodudur. Bu, emülatörün güncel olmayan ve güvensiz NPAPI/PPAPI eklentilerini kurmaya gerek kalmadan karmaşık Flash grafiklerini ve mantığını yüklemesine ve işlemesine olanak tanır.

Flash İçeriğinin Otomatik Algılanması ve Polyfill ile Değiştirilmesi. Ruffle'ın web sürümü, sayfanın DOM yapısını object, embed ve applet öğeleri ile .swf uzantılı dosyalar için tarayan bir JavaScript algılayıcı içerir. Bu tür içeriği algıladığında, Ruffle bunu otomatik olarak kendi oynatıcısıyla değiştirir, sayfayı kullanıcı için sorunsuz bir şekilde düzeltir ve Flash öğelerinin işlevselliğini geri kazandırır.

İkili Çalışma Modu (Masaüstü Uygulaması ve Web Eklentisi). Ruffle, kullanıcılara esneklik sunar: yerel SWF oynatımı için bağımsız bir masaüstü uygulaması olarak (dosyaları Ruffle yürütülebilir dosyasıyla ilişkilendirmeniz yeterlidir) veya web'de gezinme ortamına entegre olan ve her sitede Flash desteği sağlayan bir tarayıcı eklentisi olarak kullanılabilir.

ActionScript 1.0 ve 2.0 (AVM1) Desteği. Ruffle, AVM1 sanal makinesini uygulayarak 2006 öncesi ve 2013'e kadar oluşturulmuş geniş içerik yelpazesiyle uyumluluk sağlar. AVM1 dil yapıları için mevcut uyumluluk seviyesi %99'a, API'ler için ise %81'e ulaşarak erken dönem Flash oyunlarının ve animasyonlarının büyük çoğunluğunun doğru çalışmasını garanti eder.

ActionScript 3.0 (AVM2) Desteği. 2006 sonrası oluşturulan içerik için Ruffle, AVM2'nin bir uygulamasını içerir. Uyumluluk üzerindeki çalışmalar aktif olarak devam etse de emülatör, ActionScript 3 ile yazılmış birçok karmaşık oyunu ve uygulamayı çalıştırmak için şimdiden yeterli düzeyde destek sağlamakta, API kapsamını ve dil yeteneklerini sürekli olarak genişletmektedir.

Rust Dili Seviyesinde Güvenlik. Ruffle'ın ana mimari avantajlarından biri Rust dilini kullanmasıdır. Rust, derleme zamanında bellek güvenliğini garanti ederek, orijinal Adobe Flash Player'da bulunan arabellek taşmaları, çift boşaltmalar ve kullanımdan sonra boşaltma hataları gibi tüm güvenlik açığı sınıflarını tamamen ortadan kaldırır.

Tarayıcı Korumalı Alanı İçinde İzolasyon. Web ortamında çalışırken Ruffle (WebAssembly aracılığıyla), tarayıcının güvenlik politikasına tamamen uyar. Bu, ek bir izolasyon katmanı ekler: emülatörün kullanıcının dosya sistemine veya diğer sistem süreçlerine doğrudan erişimi yoktur, bu da klasik Flash eklentisine kıyasla istismar edilmesini son derece zorlaştırır.

Verimli Bellek Yönetimi. Belirleyici olmayan duraklamalara sahip çöp toplama kullanan orijinal Flash Player'ın aksine, Ruffle, Rust'ın katı sahiplik modelini devralır. Bu, daha öngörülebilir bellek kullanımı sağlar, parçalanmayı azaltır ve genellikle kararsız tarayıcı davranışına yol açan bellek sızıntılarını ortadan kaldırır.

Komut Satırı Desteği. Ruffle'ın masaüstü sürümü, tam işlevli bir komut satırı arayüzü sunar. Kullanıcılar emülatörü parametrelerle çalıştırabilir, örneğin: yerel bir dosya için ruffle dosyaadi.swf veya bir URL'den SWF oynatmak için ruffle https://example.com/dosyaadi.swf. ruffle --help komutu, mevcut tüm argümanların ve ayarların kapsamlı bir listesini görüntüler.

Açık Kaynak Kod ve Geliştirme Şeffaflığı. Ruffle, Apache 2.0 ve MIT lisansları altında dağıtılır. Kaynak kodun tamamen açık olması, herhangi bir geliştiricinin emülatörün güvenliğini denetleyebileceği, düzeltmeler ekleyebileceği ve geliştirmeye katılabileceği anlamına gelir; bu, kurumsal geliştiriciler tarafından eklenebilecek gizli özellikler veya güvenlik açıkları olasılığını ortadan kaldırır.

Geniş Tarayıcı Yelpazesiyle Uyumluluk. WebAssembly teknolojisi sayesinde Ruffle, Google Chrome, Mozilla Firefox, Microsoft Edge, Safari, Opera, Brave ve Vivaldi dahil tüm modern tarayıcılar tarafından desteklenir. Bu, kullanıcıların tarayıcı motoru tercihlerinden (Chromium, Gecko veya WebKit) bağımsız olarak Flash içeriğiyle tutarlı bir deneyim sağlar.

Mobil Tarayıcı Desteği (iOS ve Android). Orijinal Adobe Flash Player'ın iOS'ta hiçbir zaman resmi olarak desteklenmediği ve Android'de sınırlı desteğe sahip olduğu durumun aksine, Ruffle mobil platformlarda çalışır. Bu, Flash oyunlarının ve animasyonlarının akıllı telefonlar ve tabletlerde doğrudan mobil tarayıcı aracılığıyla çalışmasına olanak tanıyarak arşivlenmiş içeriğe mobil kitleler için erişim sağlar.

Yapılandırma Gerektirmez. Ruffle, "kur ve unut" prensibiyle tasarlanmıştır. Eklentiyi kurduktan veya masaüstü uygulamasını başlattıktan sonra, emülatör karmaşık bir yapılandırma gerektirmez. Sahne boyutu, kare hızı ve etkileşim türü gibi oynatım parametrelerini otomatik olarak algılar ve kullanıcı müdahalesi olmadan optimal ayarları uygular.

Sıfır Gün Güvenlik Açıklarına Karşı Koruma. Ruffle bir eklenti olmadığından, güncel olmayan API'ler kullanmadığından ve kodu güvenliğe odaklanarak Rust ile yazıldığından, Adobe Flash Player'ın karakteristik özelliği olan saldırılara karşı bağışıktır. Bu, onu eski içeriğe erişimi sürdürmesi gereken ancak sistemin tehlikeye atılması riskini göze alamayan kuruluşlar için ideal bir çözüm haline getirir.

Çeşitli Kurulum Yöntemleriyle Uyumluluk. Ruffle çeşitli dağıtım yöntemleri sunar. Web geliştiricileri, onu Chromium tabanlı tarayıcılara (geliştirici modu aracılığıyla) statik bir eklenti olarak veya Firefox'ta (about:debugging aracılığıyla) geçici bir eklenti olarak kurabilirler. Sunucu tarafında basit JavaScript kodu eklemesi yoluyla entegrasyon da mevcuttur.

Hem Çevrimiçi Hem Çevrimdışı İçerik Oynatımı. Ruffle'ın masaüstü sürümü, bilgisayarda yerel olarak kaydedilmiş SWF dosyalarını açmaya ve oynatmaya olanak tanır. Bu, emülatörü yerel Flash oyun ve animasyon arşivleriyle çalışan koleksiyoncular, arşivciler ve araştırmacılar için vazgeçilmez bir araç haline getirir.

Yüksek İşleme Performansı. Ruffle, platformlar arası kütüphaneler aracılığıyla modern grafik API'lerini (OpenGL, Vulkan, DirectX veya WebGL gibi) kullanır. Bu, vektör ve raster grafiklerin işlenmesi için donanım hızlandırması sağlayarak, orijinal Flash Player'ın yavaşlayabileceği daha zayıf cihazlarda bile sorunsuz oynatım sağlar.

Aktif Geliştirme ve Sık Güncellemeler. Proje aktif geliştirme aşamasındadır. Sürümler düzenli olarak çıkar ve hem kritik hata düzeltmelerini hem de genişletilmiş ActionScript API desteğini içerir. Örneğin, son sürümler String.indexOf ve lastIndexOf yöntemlerindeki sınır durumları düzeltmiş ve Array.indexOf'daki negatif indeksleri doğru şekilde işlemiştir.

Büyük Arşivler ve Platformlarla Entegrasyon. Ruffle, Flash içeriği oynatımı için resmi oynatıcı olarak Internet Archive, Newgrounds, Coolmath Games ve Armor Games gibi devler tarafından seçilmiştir. Bu, emülatörün yüksek derecede güvenilirliğini ve uyumluluğunu, ayrıca gerçek dünya koşullarında yüksek yük altında çalışabilme yeteneğini doğrular.

Oyun Kayıtları ve Durum Desteği. Orijinal Flash Player gibi Ruffle da birçok oyunun ilerlemeyi kaydetmek için kullandığı Yerel Paylaşılan Nesneleri (LSO) destekler. Emülatör, bu depolama alanına veri okuma ve yazma mekanizmalarını doğru bir şekilde taklit ederek uygulamanın çalışma süresi içinde kayıt bütünlüğünü sağlar.

Zamanlamaların ve Kare Hızının Doğru Taklidi. Ruffle, Flash Player'ın dahili zamanlayıcısını doğru bir şekilde taklit eder; bu, oyun ve animasyon mantığı için kritik öneme sahiptir. Bu, olayların, sesin ve nesne hareketlerinin uygun şekilde senkronize edilmesini sağlayarak bir oyunun orijinalinden daha yavaş veya daha hızlı çalıştığı durumları önler.

DOM ve JavaScript Etkileşimi Desteği (ExternalInterface). ActionScript ile JavaScript arasında veri alışverişi için ExternalInterface API'sini kullanan karmaşık web uygulamaları için Ruffle uyumlu bir köprü uygular. Bu, emülatörün işlev çağrılarını ve veri aktarımını doğru şekilde ele almasına olanak tanıyarak içeriğin çevreleyen web sayfasıyla etkileşimini korur.

Otomatik Ölçekleme ve Çözünürlük Uyarlaması. Belirli bir çözünürlük için oluşturulmuş Flash içeriğini (örneğin 800x600) oynatırken Ruffle, tarayıcının veya masaüstü uygulamasının mevcut pencere boyutuna uyum sağlamak için otomatik olarak ölçekleme algoritmaları uygular. Oranları ve görüntü kalitesini korur ve fare etkileşim alanlarını doğru şekilde işler.

Çeşitli Medya Formatları Desteği. Emülatör, SWF dosyalarına gömülebilecek çeşitli medya formatlarının kod çözümünü destekler; buna ses için MP3 ve Flash'ın sonraki sürümlerinde kullanılan video sıkıştırma dahildir. Kod çözme, Rust ile yazılmış yüksek performanslı kütüphaneler aracılığıyla gerçekleştirilir ve sistem yükünü azaltır.

Gelişmiş Hata Ayıklama ve Günlük Kaydı. Geliştiriciler ve ileri düzey kullanıcılar için Ruffle, AVM1/AVM2 sanal makine işlemlerinin ayrıntılı günlüklerini etkinleştirme olanağı sağlar. Bu, uyumluluk sorunlarını teşhis etmeye, ActionScript kodundaki hataları izlemeye ve daha hassas ayarlama için emülasyonun iç süreçlerini anlamaya olanak tanır.

İmleç ve Etkileşimli Öğe Taklidi. Ruffle, Flash içeriği tarafından belirtilen imleç stili değişikliklerini doğru şekilde işler. Örneğin, LoaderDisplay gibi etkileşimli öğeler için emülatör, standart imleci otomatik olarak bir işaretçiye değiştirerek orijinal Flash oynatıcının davranışını taklit eder ve kullanıcıya tanıdık bir gezinme sağlar.

Erken Erişim için Nightly Derlemeleri Desteği. Kararlı sürümlere ek olarak, Ruffle ekibi günlük deneysel Nightly derlemelerine erişim sağlar. Bu derlemeler, kararlı sürüme henüz dahil edilmemiş en son düzeltmeleri ve yenilikleri içerir.

Dijital Kültürel Mirası Koruma. Bu sadece teknik bir işlev değil, aynı zamanda projenin temel bir hedefidir. Ruffle, tarihi internet içeriğini korumak için bir araç olarak oluşturulmuştur. Modern tarayıcılarda güvenlikten ödün vermeden çalışabilme yeteneği sayesinde, Adobe Flash Player'ın durdurulmasından sonra kalıcı olarak kaybolacak olan milyonlarca Flash oyunu, animasyonu ve uygulaması gelecek nesiller için erişilebilir durumda kalır.

Ruffle'ın 12 Daha Az Bilinen Teknik Yeteneği

  1. Birincil İşleme Arka Ucu Olarak WGPU Kullanımı. Eski OpenGL'e güvenen birçok emülatörün aksine, Ruffle modern, güvenli ve platformlar arası bir grafik API'si olan WGPU kütüphanesini kullanır. Masaüstünde WGPU, en uygun düşük seviyeli arka ucu otomatik olarak seçer: Vulkan, DirectX 12 veya Metal. Tarayıcıda, WebGPU (mevcutsa) aracılığıyla çalışabilir veya minimum performans kaybıyla WebGL üzerinden çalışmayı taklit edebilir.

  2. Maksimum Performans için Tarayıcıda WebGPU Desteği. Modern tarayıcıların kullanıcıları (örneğin, Chrome ve Edge'in en son sürümleri) için Ruffle, son teknoloji WebGPU API'sini kullanabilir. Bu, standart WebGL arka ucuna kıyasla önemli ölçüde azaltılmış gölgelendirici derleme süresi ve daha düşük ek yük sağlar; bu, karmaşık 3D grafikler ve Stage3D uygulamaları için kritik öneme sahiptir.

  3. İnce Ayar Yapılabilen İşleme Arka Ucu (canvas, webgl, wgpu-webgl). Çok az kişi işleme davranışının manuel olarak kontrol edilebileceğini bilir. Standart wgpu-webgl'e ek olarak, zorla etkinleştirme seçeneği vardır:

    • webgl — daha hızlı başlatılan ve karmaşık bitmap efektleri gerektirmeyen basit içerik için yararlı olabilecek klasik bir arka uç.

    • canvas — en yavaş ancak en doğru arka uç. Donanım hızlandırma kullanıldığında çok kalın görünebilecek vektör grafiklerindeki ince çizgileri doğru şekilde ölçekleyen tek arka uçtur.

  4. Stage3D Taklidi ve AGAL'in WGSL'ye Derlenmesi. Ruffle yalnızca 2D grafikleri değil, aynı zamanda Stage3D (Context3D) API'si aracılığıyla 3D hızlandırmayı da destekler. AGAL (Adobe Graphics Assembly Language) ile yazılmış gölgelendiriciler, modern WGSL (WebGPU Shading Language) veya GLSL'ye "anında" derlenir. Bu, Flash Player 11 ve üzeri için oluşturulmuş, programlanabilir gölgelendiricilerin tam hattını kullanan karmaşık 3D oyunların ve uygulamaların çalışmasına olanak tanır.

  5. Geriye Dönük Uyumluluk için fscommand Desteği. Ruffle, eski ancak önemli fscommand mekanizması desteğini korumuştur. Bu, (ExternalInterface'den önce oluşturulmuş) eski Flash filmlerinin JavaScript ile etkileşime girmesine, sayfaya rastgele komutlar ve argümanlar göndermesine olanak tanır. Ruffle'ın modern uygulamasında, bu komutlar onFSCommand aracılığıyla işlenir ve çok eski web içeriği için bile işlevsellik sağlar.

  6. Context3D için Çift Arabelleğe Alma. 3D içerikle çalışırken Ruffle, karmaşık bir çift arabelleğe alma mekanizması (arka arabellek / ön arabellek) kullanır. Bu, standart ancak kritik derecede önemli bir performans tekniğidir ve bir sonraki karenin arka plan arabelleğinde işlenmesine izin verirken mevcut karenin ekranda görüntülenmesini sağlayarak dinamik oyunlarda görsel yırtılmaları (frame tearing) ortadan kaldırır.

  7. Kıyaslama Araçları: ruffle_scanner ve exporter. Ruffle deposu içinde, standart derlemeye dahil olmayan ancak geliştiricilere sunulan yardımcı araçlar vardır:

    • ruffle_scanner — emülatörün bir klasördeki tüm SWF dosyalarıyla uyumluluğunu test etmeye, ayrıştırma başarısı hakkında bir CSV raporu oluşturmaya olanak tanır.

    • exporter — SWF dosyalarından toplu olarak PNG ekran görüntüleri oluşturmak için bir araçtır; GUI olmadan (başsız modda) çalışabilir, bu da otomatik test ve önizleme oluşturma için kullanışlıdır.

  8. Flatpak Sandbox ile Tam İzolasyon. Linux kullanıcıları için resmi bir Ruffle derlemesi Flatpak formatında mevcuttur. Bu sadece bir kurulum yöntemi değil, aynı zamanda ek bir güvenlik katmanıdır: uygulama, tüm kayıtların, yapılandırmaların ve günlüklerin Flatpak ana dizini (~/.var/app/rs.ruffle.Ruffle/) içinde sıkı bir şekilde saklandığı ve sistemin geri kalanına erişimi olmayan izole bir ortamda çalışır.

  9. Homebrew ve Scoop ile Entegrasyon Desteği. Deneyimli kullanıcılar için Ruffle, manuel indirmenin ötesinde gelişmiş kurulum yöntemleri sunar. macOS'ta Homebrew aracılığıyla kurulabilir (brew install --HEAD ruffle-rs/ruffle/ruffle), bu da en son nightly derlemesine otomatik güncellemelere olanak tanır. Windows'ta Scoop paket yöneticisi benzer bir işlev görür.

  10. Şeffaf Veri Depolama Sistemi (SharedObjects). Ruffle, Flash yerel depolama sistemini (LSO — Yerel Paylaşılan Nesneler) doğru bir şekilde taklit eder. Ancak, tescilli oynatıcıdan farklı olarak, bu dosyaların konumu standartlaştırılmıştır ve kullanıcı için şeffaftır. Windows'ta %AppData%\Local\Ruffle\SharedObjects\ konumunda, Linux'ta ise ~/.local/share/ruffle/SharedObjects/ konumunda bulunurlar. Bu, eski oyunlardan kayıtların manuel olarak yedeklenmesine olanak tanır.

  11. JavaScript API ve Genel Ayarlar ile Yapılandırma. Web geliştiricileri için Ruffle, oynatıcıyı yalnızca gömmekle kalmayıp aynı zamanda durumunu kontrol etmeye olanak tanıyan güçlü bir JavaScript API'si sunar. SWF'yi programlı olarak yüklemek (load), ses seviyesini kontrol etmek (volume), duraklatmak (suspend/resume) ve hata ayıklama için traceObserver aracılığıyla ActionScript'ten trace() çıktılarını yakalamak için yöntemler mevcuttur.

  12. macOS Derlemelerinin Otomatik İmzalanması ve Noter Onayı. CI/CD sürecinde, macOS için tüm nightly Ruffle derlemeleri, Apple tarafından kod imzalaması ve noter onayından geçer. Bu, emülatörün kararsız sürümlerinin bile Gatekeeper tarafından güvenli olmayan yazılım olarak engellenmeyeceği ve güvenlik gereksinimlerinin katı olduğu en son macOS sürümlerinde sorunsuz çalışmanın sağlanacağı anlamına gelir.