← PROJE ARŞİVİ

VIVER

LabVIEW projeleri için görsel VI karşılaştırması ve yerel sürüm kontrolü.

PythonFlaskSQLitepylabviewSVGJavaScript 12.10.2026 — devam ediyor

VIVER↓ release.zip

VIVER

LabVIEW projeleri için sürüm kontrolü — LabVIEW'u açmadan okunabilen blok diyagramı farklarıyla.

Lisans: MIT Python 3.9+ Tamamen çevrimdışı Karşılaştırma için LabVIEW gerekmez Claude ile geliştirildi

VIVER blok diyagramı farkı: bir enum sabiti Left Button değerinden Window Close değerine değişmiş


Neden VIVER?

LabVIEW kodu ikili (binary) .vi dosyalarında durur. Genel amaçlı sürüm kontrol sistemleri bu dosyaları saklayabilir ama neyin değiştiğini söyleyemez: Git yalnızca "binary file changed" der. LabVIEW ise bir dosyayı sadece açtığınızda bile yeniden kaydeder, bu yüzden "değişen" dosyalar listesi gürültüyle dolar. İki sürümü görsel olarak karşılaştırmak normalde makinede LabVIEW ve karşılaştırma aracının kurulu olmasını gerektirir.

VIVER bu boşluğu dolduran küçük, kendi bilgisayarınızda çalışan bir web uygulamasıdır:

📦 Her commit tam bir yedektirHer commit projenin eksiksiz bir anlık görüntüsüdür; içerik adresli saklanır, değişmeyen dosyalar iki kez depolanmaz.
🔍 LabVIEW olmadan görsel farkVI dosyaları pylabview ile çözümlenir; eski ve yeni blok diyagramları yan yana çizilir, eklenen, silinen ve değişen her öğe vurgulanır.
🧹 Gürültü filtresiGerçek mantık değişikliklerini yerleşim düzenlemelerinden ve "LabVIEW sadece yeniden kaydetti" durumlarından ayırır, gürültüyü gizler.
📄 Görselli CHANGELOGTek tıkla bir sürüm aralığından, özet tablosu ve değişen her VI'ın önceki ve yeni diyagramının SVG'sini içeren bir CHANGELOG.md üretir.
🛡 Güvenli tasarımProje dosyaları doğrulanmış anlık kopyalar üzerinden okunur, her yedeğin sağlama toplamı tutulur ve isterseniz VIVER'ın proje klasörünüze hiç yazmamasını sağlayabilirsiniz.
🔌 Çevrimdışı ve yerelKendi bilgisayarınızda (ya da ağınızdaki bir sunucuda) çalışır. Bulut yok, hesap yok, telemetri yok.

Bir LabVIEW projesi için küçük, özel bir GitHub gibidir: depolar, commit'ler, geçmiş, dallar, etiketler, karşılaştırma ekranları — artı bir blok diyagramı görüntüleyici.


Özellik turu

Değişiklikler ve Commit

VIVER, bir depoya bağladığınız proje klasörünü izler. Changes & Commit sekmesi değişen her dosyayı listeler; her VI için değişikliğin ne tür olduğunu commit'ten önce ve LabVIEW'u açmadan gösterir. Bir mesaj yazın, Commit and back up düğmesine basın; projenin tam durumu saklanır.

Değişiklikler ve Commit sayfası

Show: etiketleri kategoriye göre filtreler (blok diyagramı mantığı, yerleşim, ön panel, Timed Loop / XNode iç ayarları, diğer, yalnızca yeniden kaydedilmiş). Gizlenen VI'lar tek tıkla commit dışında bırakılabilir.

Blok diyagramı farkı

Herhangi bir VI'ın yanındaki Block diagram diff düğmesi yan yana görünümü açar:

  • Eski ve yeni diyagramlar; yapılar, subVI'lar, primitive'ler, sabitler (değerleriyle), terminaller, tüneller, shift register'lar, yorumlar ve kablolarla LabVIEW renklerinde çizilir.
  • 🟩 eklendi, 🟥 silindi, 🟧 değişti, 🟪 başka bir yapıya/çerçeveye taşındı, 🟦 yeri değişti (isteğe bağlı). Değişmeyen öğeler soluk gösterilir.
  • Değişiklik listesindeki bir satıra tıklamak iki diyagramı da o noktaya kaydırır ve doğru case/event çerçevesini açar. j / k ile listede gezinilir.
  • Kaydırma, yakınlaştırma ve çerçeve seçimi iki taraf arasında senkronizedir.
  • Ön panel kontrolleri, bağımlılıklar (subVI'lar, typedef'ler, kütüphaneler) ve VI özellikleri için sekmeler vardır.

Değeri değişen bir sabit eski ve yeni değeriyle raporlanır. Aşağıdaki örnekte bu bir Stacked Sequence içinde; VIVER onu Flat Sequence gibi açar, böylece tüm çerçeveler aynı anda görünür:

Stacked sequence içinde fark: üç sabit değişmiş

Geçmiş, commit'ler ve karşılaştırma

Her commit yazarını, mesajını ve tam dosya ağacını kaydeder. Geçmiş günlere göre gruplanır; v1.0 gibi etiketler sürümleri işaretler.

Commit geçmişi

Bir commit sayfası, değişen dosyaları VI özetleriyle gösterir ve şu işlemleri sunar: o sürümün dosyalarına göz atmak, ZIP olarak indirmek, geri yüklemek (proje klasörüne ya da başka bir klasöre), etiketlemek, ondan dal oluşturmak veya CHANGELOG üretmek.

Commit sayfası

Compare, herhangi iki commit, dal veya etiket arasında çalışır:

v1.0 ile main karşılaştırması

CHANGELOG üretimi

Bir aralık seçin, hangi kategorilerin dahil olacağını belirleyin; VIVER görselli bir Markdown değişiklik günlüğü yazar. Önizleme tarayıcıda gösterilir; ZIP olarak indirebilir ya da proje klasörüne kaydedebilirsiniz.

CHANGELOG önizlemesi

Değişen her VI için önceki ve yeni blok diyagramını birlikte içeren tek bir SVG üretilir; numaralı rozetler değişiklik listesiyle eşleşir. Aşağıdaki, VIVER'ın ürettiği gerçek bir görseldir (tam boyutta açmak için tıklayın — vektör grafiktir, yakınlaştırınca bozulmaz):

Önceki ve yeni blok diyagramı tek SVG içinde

👉 Üretilmiş tam örnek, indirilen pakette docs/example/CHANGELOG.md dosyasındadır.

Ayarlar: güvenlik ve yedekler

Güvenlik seçenekleriyle depo ayarları


Nasıl çalışır?

  1. Anlık görüntü al ve sakla. Değişiklikler sayfasını açtığınızda ya da commit yaptığınızda, yeni veya değişmiş her dosya özel bir anlık kopyaya alınır, tutarlılığı kontrol edilir ve data/objects/ altında SHA-256 özetiyle (zlib ile sıkıştırılmış) saklanır. Bir commit, tüm dosyaların yol → özet listesinden ibarettir; böylece her commit tam bir yedek olur, aynı içerik ise yalnızca bir kez saklanır.
  2. Çözümle. Bir VI, birçok bloktan oluşan bir RSRC kapsayıcısıdır (blok diyagramı yığını BDHb, ön panel yığını FPHb, tip tabloları VCTP/DTHP, connector pane, bağlantılar, ikon …). pylabview kapsayıcıyı ve yığınları XML'e çevirir. VIVER ardından iç içe yapıların koordinatlarını çözer, kabloları terminallere bağlar, sabit değerlerini, case/event çerçeve adlarını, değişken adlarını ve veri tiplerini çözer ve çizilebilir bir model kurar.
  3. Karşılaştır. İki sürümün düğümleri eşleştirilir (önce nesne kimliği ve imzaya, sonra konuma göre), kablolar uç noktalarına göre karşılaştırılır ve genel bir kayma (ör. Clean Up Diagram sonrası) algılanır. Her dosyaya bir karar verilir — bkz. Neler değişiklik sayılır?.
  4. Göster. Web arayüzü iki diyagramı tarayıcıda SVG olarak çizer; CHANGELOG üreticisi ise sunucuda her VI için tek bir SVG çizer.

Çözümleme ve karşılaştırma sonuçları içerik özetine göre önbelleğe alınır; bir VI çifti yalnızca bir kez analiz edilir.


Kurulum

Gereksinimler: Python 3.9 veya üzeri (Windows'ta python.org yükleyicisi önerilir). LabVIEW gerekmez — kuruluysa VIVER primitive adlarını oradan okur (bkz. Primitive adları).

Windows — projeyi indirip (bu sayfanın üstündeki disket) bir klasöre açın ve start.bat dosyasına çift tıklayın. İlk çalıştırmada bir sanal ortam oluşturur ve bağımlılıkları kurar; ardından tarayıcınızda http://127.0.0.1:5000 açılır.

Linux / macOS

./start.sh

Elle kurulum

python -m venv .venv
.venv\Scripts\activate            # Linux/macOS: source .venv/bin/activate
pip install -r requirements.txt
python app.py

İnternet bağlantısı yalnızca ilk pip install için gerekir (Flask, Pillow, waitress). İnternetsiz bir makine için, bağlı bir bilgisayarda pip download -r requirements.txt -d packages çalıştırın ve hedef makinede pip install --no-index --find-links packages -r requirements.txt ile kurun.


Hızlı başlangıç

Yeni depo formuyla ana sayfa

  1. Depo oluşturun. Ana sayfada bir ad ve LabVIEW proje klasörünüzün yolunu (ör. C:\LabVIEW\Line1) girip Create repository düğmesine basın.
  2. LabVIEW'da her zamanki gibi çalışın ve kaydedin.
  3. Commit yapın. Changes & Commit sayfasını açın, özetleri kontrol edin, bir mesaj yazın ve Commit and back up düğmesine basın. İlk commit projenin tamamını saklar.
  4. İnceleyin. History → bir commit → Block diagram diff yolunu ya da herhangi iki sürüm için Compare sayfasını kullanın.
  5. Sürüm çıkın. Bir commit'i etiketleyin (ör. v1.1) ve önceki etiketten bir CHANGELOG üretin.

VIVER'ın çalıştığı makinede proje klasörü yok mu? Bir klasörü (sürükle-bırak) ya da ZIP dosyasını tarayıcıdan commit etmek için Upload sayfasını kullanın.


Neler değişiklik sayılır?

LabVIEW bir VI'ı sadece açıp kaydettiğinizde, kullandığı bir subVI veya typedef değiştiğinde ya da yeniden derlediğinde dosyayı yeniden yazar. VIVER değişen her VI'ı bölüm bölüm karşılaştırır ve üç karardan birini verir:

KararAnlamıGösterim
İçerik değiştiBlok diyagramındaki düğümler, kablolar veya sabit değerleri, ön panel kontrolleri, connector pane, bağımlılıklar ya da önemli VI özellikleri değişmişDeğişikliği adlandıran turuncu rozet, ör. Block diagram ~1 · Constant "Which Button?"
Görsel / yerleşimYalnızca konumlar, boyutlar, kablo yolları, ön panel görünümü, ikon, açıklama, bir typedef güncellemesi (kaynak .ctl değişmiş) veya varsayılan değerlerGri rozet
Yalnızca yeniden kaydedildiYukarıdakilerin hiçbiri — yalnızca revizyon sayacı, derlenmiş kod, iç numaralar, kaydederken görünen çerçeve ya da küçük yazı tipi ölçüsü farkları"N VI yalnızca yeniden kaydedildi" grubunda toplanır (yine de commit'e dahildir)

Her değişiklik ayrıca filtrelerde ve CHANGELOG kapsamında kullanılan bir kategoriye aittir:

Kategoriİçerik
Blok diyagramı mantığıdüğümler, kablolar, sabitler, değişkenler, connector pane, bağımlılıklar, önemli VI özellikleri
Blok diyagramı yerleşimiyerleşim, kablo yolları, yorumlar
Ön panelkontroller ve göstergeler, görünüm, typedef güncellemeleri, varsayılan değerler
Timed Loop / XNode iç ayarlarıLabVIEW'un kendiliğinden yeniden ürettiği ayarlar (FPGA'da yaygın) — varsayılan olarak kapalı
Diğerikon, açıklama, diğer VI ayarları
Yalnızca yeniden kaydedildiyukarıya bakın

Güvenlik ilkesi: VIVER emin olmadığı bir farkı asla gizlemez. Açıklayamadığı her şey gösterilir (en azından "görsel/yerleşim" olarak), okunamayan VI'lar her zaman okunamadı olarak raporlanır.


CHANGELOG oluşturma

CHANGELOG sekmesini açın (ya da bir commit veya karşılaştırma sayfasında Generate CHANGELOG.md düğmesine basın):

Kapsam seçimli CHANGELOG formu

Üretilen CHANGELOG.md şunları içerir:

  1. Özet — sayılar, ardından her VI için bir satırlık Changed VIs tablosu (ör. Constant "y" modified (value 3 → 9)); VI adları kendi bölümlerine bağlanır.
  2. Aralıktaki commit'ler, yazar ve mesajlarıyla.
  3. Değişen her VI için bir bölüm — numaralı değişiklik listesi ve önceki ile yeni blok diyagramını içeren tek bir SVG. Değişiklikler farklı case çerçevelerindeyse her çerçeve için ayrı SVG oluşturulur. Yalnızca çerçeve taşımaları (🟪) en az önemli oldukları için en sonda listelenir.
  4. Kapsam dışı ve yalnızca yeniden kaydedilmiş VI'ların ve diğer dosyaların (metin dosyaları için metin farkıyla) daraltılmış listeleri.

Çıktı: CHANGELOG.md + changelog-images/. ZIP olarak indirin ya da proje klasörüne kaydedip commit edin. GitHub, GitLab ve çoğu Markdown görüntüleyici SVG'leri doğrudan gösterir.

Komut satırından:

python tools/viver_commit.py Line1 --changelog v1.0..main -o CHANGELOG.zip --scope logic,fp

Güvenlik ve yedekler

VIVER'a kaynak kodunuzu emanet ediyorsunuz, bu yüzden bilinçli olarak temkinli davranır. Her depo için Settings → Safety & backups altında:

SeçenekVarsayılanNe yapar?
Anlık kopyadan okuaçıkYeni veya değişmiş her dosya önce özel bir anlık kopyaya alınır. Kopya yalnızca dosya 2 saniyedir değişmemişse ve kopyalanırken değişmediyse kabul edilir; ardından VIVER yalnızca kopyayı okur, karşılaştırır ve saklar. LabVIEW'un o anda kaydettiği bir dosya uyarıyla atlanır ve commit reddedilir — yarım yazılmış bir dosya asla yedeğe girmez.
Proje klasörüne asla yazmakapalıGeri yükleme, "Discard all changes", CHANGELOG'u projeye kaydetme ve dal değiştirme dosyalarınızı değiştirmez. Eski sürümler Restore to another folder ile ayrı bir klasöre geri yüklenir.
Her commit'te projenin tam ZIP'ikapalıHer commit için, doğrulanmış yedeklerden oluşturulan, yazıldıktan sonra test edilen, <depo>-<tarih>-<commit>.zip adlı, VIVER olmadan açılabilen ek bir ZIP. Klasörü (ör. başka bir disk veya ağ paylaşımı) ve kaç tane tutulacağını siz seçersiniz.

Her zaman açık olanlar:

  • Proje dosyaları yalnızca salt okunur açılır; VI çözümlemesi proje klasöründe değil, saklanan kopyalar üzerinde çalışır.
  • Saklanan her dosya sürümü SHA-256 ile tanımlanır. Geri yükleme, dışa aktarma ve ZIP işlemleri her dosyayı yazmadan önce doğrular; diske yazılan dosyalar geri okunup kontrol edilir, önce geçici bir adla yazılır ve ancak sonra yerine taşınır.
  • Yerinde geri yüklemeden önce proje klasörünün mevcut durumu data/restore-backups/ içine ZIP olarak kaydedilir.
  • Verify backups (Ayarlar) bir deponun tüm geçmişini yeniden okur ve saklanan her dosyayı sağlama toplamına karşı kontrol eder.

Primitive adları

VI dosyaları LabVIEW'un yerleşik fonksiyonlarını (Add, Equal?, Index Array …) yalnızca bir kaynak numarasıyla saklar. Adlar LabVIEW'un içindedir. VIVER bunları aynı bilgisayardaki LabVIEW kurulumunun fonksiyon paletlerinden okur (<LabVIEW>\menus\**\*.mnu):

  • İlk açılışta C:\Program Files\National Instruments\LabVIEW* altındaki en yeni kurulum algılanır ve adlar arka planda içe aktarılır (yaklaşık yarım dakika). LabVIEW başlatılmaz, hiçbir dosya değiştirilmez.
  • Primitive names sayfasında başka bir kurulum seçebilir, arama yapabilir ve adları düzenleyebilirsiniz.
  • Hiçbir palette bulunmayan primitive'ler (gizli veya eskimiş olanlar) #numara olarak gösterilir; diyagramda çift tıklayıp ad verebilirsiniz. Elle verilen adların üzerine asla yazılmaz.

Primitive adları sayfası


Komut satırı ve LabVIEW entegrasyonu

tools/viver_commit.py, çalışan bir VIVER sunucusuyla konuşur ve yalnızca Python standart kütüphanesini kullanır:

python tools/viver_commit.py --list                       # depoları listele
python tools/viver_commit.py Line1 --status               # commit edilmemiş değişiklikler
python tools/viver_commit.py Line1 -m "Before build 1.4" -a LabVIEW
python tools/viver_commit.py Line1 --changelog v1.0..main -o CHANGELOG.zip

Her build'den önce otomatik commit için, build specification'ınızın pre-build VI'ından komutu System Exec.vi ile çağırın. Diğer araçlar için JSON uç noktaları (/api/r/<repo>/status, /api/r/<repo>/commit, /api/r/<repo>/changelog) mevcuttur.


Yapılandırma

Ortam değişkenleri:

DeğişkenVarsayılanAçıklama
VIVER_DATA./dataVeritabanı, yedek nesneleri, önbellek, CHANGELOG'lar
VIVER_HOST127.0.0.1VIVER'ı ağınızdan erişilebilir yapmak için 0.0.0.0 kullanın
VIVER_PORT5000Port
VIVER_PASSWORD—Ayarlanırsa her sayfa bu parolayı ister (HTTP Basic)
VIVER_URLhttp://127.0.0.1:5000Komut satırı aracının kullandığı sunucu adresi

VIVER'ı ağ üzerinden bir ekiple paylaşırken VIVER_HOST=0.0.0.0 ile birlikte mutlaka VIVER_PASSWORD da ayarlayın. Proje klasörü özelliği, VIVER'ın çalıştığı makinedeki klasörleri okur; başka bilgisayarlardaki ekip arkadaşları tarayıcıdan yükleme yapabilir ya da paylaşılan bir ağ klasörü kullanabilir.

Yok sayılan dosyalar: varsayılan olarak .lvlps, .aliases, builds/, .git/ ve geçici dosyalar. Kendi kurallarınızı depo ayarlarına ya da proje klasöründeki bir .viverignore dosyasına ekleyin (her satıra bir kural, ör. *.log, data/).

Her şey nerede saklanıyor?

data/
  viver.db           depolar, commit'ler, dallar, etiketler (SQLite)
  objects/ab/cd…     sıkıştırılmış dosya içerikleri — her dosyanın her sürümü
  cache/             çözümlenmiş VI modelleri ve fark sonuçları (silinebilir)
  changelogs/        üretilen CHANGELOG'lar
  commit-zips/       commit başına proje ZIP'leri (etkinse ve başka klasör seçilmediyse)
  restore-backups/   her yerinde geri yüklemeden önce alınan proje klasörü ZIP'i
  snapshot-tmp/      proje klasörü okunurken kullanılan kısa ömürlü anlık kopyalar

data/ klasörünü yedeklemek tüm geçmişi yedekler.


SSS

VI karşılaştırmak için LabVIEW gerekli mi? Hayır. VIVER VI dosyalarını kendisi (pylabview ile) çözümler. LabVIEW yalnızca, kuruluysa, primitive adlarının kaynağı olarak kullanılır.

VIVER internet erişimi istiyor mu? Yalnızca ilk pip install için. Uygulama hiçbir ağ bağlantısı kurmaz; sayfaları 127.0.0.1 üzerinden kendi tarayıcınıza sunar. Tüm betikler, stiller ve yazı tipleri yereldir.

VIVER VI dosyalarıma zarar verebilir mi? Proje dosyalarını salt okunur açar. Yazma yalnızca bir sürümü açıkça geri yüklediğinizde olur; yazılan her dosya sağlama toplamıyla doğrulanır ve önce önceki durumun yedeği alınır. Never write to the project folder açıkken VIVER oraya hiç yazmaz.

Ne kadar disk alanı kullanır? Her farklı dosya içeriği bir kez, sıkıştırılmış olarak saklanır. 3 VI'ı değişen 500 VI'lık bir projeyi commit etmek yalnızca o 3 dosyayı ekler.

Git kullanmaktan farkı ne? VIVER, merge iş akışları olan büyük ekiplerde Git'in yerini almaz — merge özelliği yoktur. Ek araç gerektirmeden basit commit'ler, gerçek yedekler ve okunabilir VI farkları ile değişiklik günlükleri isteyen LabVIEW geliştiricileri ve küçük ekipler için tasarlanmıştır. Projeyi ayrıca Git'te de tutabilirsiniz; VIVER kendi geçmişini data/ içinde saklar.

Hangi LabVIEW sürümleri destekleniyor? pylabview en iyi LabVIEW 2014–2020 dosyalarıyla test edilmiştir; daha yeni sürümlerin dosyaları (testlerimizde 2020/2021) genellikle çalışır, ancak bazı bloklar çözülemeyebilir. Çözümlenemeyen VI'lar yine de sürümlenir ve yedeklenir, okunamadı olarak raporlanır.


Bilinen kısıtlamalar

  • Kablo yolları sadeleştirilmiştir. Bağlantılar doğrudur, ancak kablolar LabVIEW'daki kıvrımlarla değil dik açılarla yeniden çizilir.
  • Cluster sabitleri içerikleri gösterilmeden "değer değişti" olarak raporlanır; enum, string, sayı, boolean, path ve basit diziler eski → yeni değeri gösterir.
  • SubVI'lar adlı kutular olarak çizilir, ikonlarıyla değil (VI'ın kendi ikonu başlıkta gösterilir).
  • Derlenmiş kod: Separate compiled code from source file kapalıysa LabVIEW her kayıtta dosyayı değiştirir; bu VI'lar değişmiş görünür ama yalnızca yeniden kaydedildi olarak sınıflandırılır. Bu seçeneğin açık tutulması önerilir.
  • Parola korumalı blok diyagramları test edilmedi.
  • Merge yok. Dallar denemeler ve geri dönüş noktaları içindir.

Proje yapısı

app.py                    Flask uygulaması (sayfalar + JSON API)
viver/storage.py          içerik adresli depo, commit, dal, anlık kopya, geri yükleme, dışa aktarma, ZIP, doğrulama
viver/vi_parser.py        pylabview çıktısından blok diyagramı modelini kurar
viver/vi_diff.py          iki VI modelini eşleştirir, farkları çıkarır ve sınıflandırır
viver/service.py          model / fark önbelleği
viver/changelog.py        CHANGELOG.md üretimi
viver/svgrender.py        önceki + yeni blok diyagramı tek SVG'de (CHANGELOG görselleri)
viver/render.py           svgrender'ın kullandığı ortak çizim kodu
viver/palettes.py         LabVIEW paletlerinden primitive adları
viver/mdlite.py           CHANGELOG önizlemesi için küçük Markdown çevirici
static/diagram.js         SVG blok diyagramı çizici (tarayıcı)
static/vidiff.js          fark ve görüntüleyici sayfaları
templates/                HTML sayfaları
tools/viver_commit.py     komut satırı istemcisi
third_party/pylabview     VI çözümleyici (MIT)
docs/                     ekran görüntüleri ve örnek bir CHANGELOG

Lisans, ticari markalar ve teşekkür

VIVER MIT Lisansı ile yayınlanmıştır. Jessica Creighton ve Mefistotelis'in pylabview kütüphanesini (MIT) içerir. Tüm üçüncü taraf lisansları için paketteki THIRD_PARTY_NOTICES.md dosyasına bakın.

VIVER bağımsız bir projedir; National Instruments (NI) veya Emerson ile bağlantılı değildir, onlar tarafından desteklenmez ya da sponsorluk almaz. LabVIEW ve NI, National Instruments Corporation'ın ticari markalarıdır. Diğer ürün adları yalnızca uyumluluğu belirtmek için kullanılmıştır.

Claude'un yardımıyla geliştirildi. VIVER, Claude'un yardımıyla tasarlanıp geliştirildi.

Ekran görüntüleri ve örnek CHANGELOG, açık kaynaklı LabVIEW Icon Editor, JKI State Machine ve OpenG projelerinden VI'lar içerir; yalnızca örnek amaçlı kullanılmıştır, sahiplerine aittir ve kendi lisanslarına tabidir.