Yürütülebilir ve Bağlanabilir Biçim - Executable and Linkable Format - Wikipedia

ELF
Dosya adı uzantısı
Yok, .axf, .çöp Kutusu, .elf, , .prx, .puf, .ko, .mod ve .yani
sihirli sayı0x7F 'E' 'L' 'F'
Tarafından geliştirilmişUnix Sistem Laboratuvarları[1]:3
Biçim türüİkili, çalıştırılabilir, nesne, paylaşılan kitaplık, çekirdek dökümü
İçin konteynerBirçok çalıştırılabilir ikili format
Bir ELF dosyasının iki görünümü vardır: program başlığı, segmentler çalışma zamanında kullanılır, oysa bölüm başlığı, bölümler ikilinin.

İçinde bilgi işlem, Yürütülebilir ve Bağlanabilir Biçim (ELF, eski adı Genişletilebilir Bağlantı Biçimi), ortak bir standarttır dosya formatı için çalıştırılabilir Dosyalar, nesne kodu, paylaşılan kitaplıklar, ve çekirdek dökümleri. İlk olarak spesifikasyonda yayınlanmıştır. uygulama ikili arabirimi (ABI) Unix adlı işletim sistemi sürümü System V Sürüm 4 (SVR4),[2] ve daha sonra Araç Arayüzü Standardında,[1] farklı satıcılar arasında hızla kabul edildi Unix sistemleri. 1999'da, Unix için standart ikili dosya biçimi olarak seçildi ve Unix benzeri sistemler açık x86 tarafından işlemciler 86açık proje.

Tasarım gereği ELF formatı esnektir, genişletilebilir ve çapraz platform. Örneğin farklı endiannesses ve adres boyutları, böylece herhangi bir belirli Merkezi işlem birimi (CPU) veya komut seti mimarisi. Bu, birçok farklı kişi tarafından benimsenmesine izin verdi. işletim sistemleri birçok farklı donanımda platformlar.

Dosya düzeni

Her ELF dosyası bir ELF başlığından ve ardından dosya verilerinden oluşur. Veriler şunları içerebilir:

  • Sıfır veya daha fazlasını açıklayan program başlık tablosu bellek bölümleri
  • Sıfır veya daha fazla bölümü açıklayan bölüm başlık tablosu
  • Program başlık tablosundaki veya bölüm başlığı tablosundaki girişlerle başvurulan veriler
Ana girişlerin vurgulanmış olduğu bir ELF dosyasının yapısı

Segmentler, aşağıdakiler için gerekli bilgileri içerir: Çalışma süresi dosyanın yürütülmesi, bölümler bağlantı ve yer değiştirme için önemli veriler içerir. Hiç bayt tüm dosya en fazla bir bölüme ait olabilir ve herhangi bir bölüme ait olmayan artık baytlar oluşabilir.

00000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 |ELF ............|

00000010 02 00 3e 00 01 00 00 00 c5 48 40 00 00 00 00 00 |..> ...... H @ .....|

ELF dosya başlığının örnek hexdump[3]

Dosya başlığı

ELF başlığı, kullanılıp kullanılmayacağını tanımlar 32 bit veya 64 bit adresler. Başlık, bu ayardan etkilenen ve onları izleyen diğer alanları dengeleyen üç alan içerir. ELF başlığı, 32 bit ve 64 bit ikili dosyalar için sırasıyla 52 veya 64 bayt uzunluğundadır.

ELF başlığı[4]
OfsetBoyut (bayt)AlanAmaç
32 bit64 bit32 bit64 bit
0x004e_ident [EI_MAG0] vasıtasıyla e_ident [EI_MAG3]0x7F bunu takiben ELF(45 4c 46) içinde ASCII; bu dört bayt, sihirli sayı.
0x041e_ident [EI_CLASS]Bu bayt, 1 veya 2 sırasıyla 32 veya 64 bit formatı belirtmek için.
0x051e_ident [EI_DATA]Bu bayt, 1 veya 2 küçük veya büyük belirtmek endianness, sırasıyla. Bu, ofset ile başlayan çok baytlı alanların yorumlanmasını etkiler 0x10.
0x061e_ident [EI_VERSION]Ayarlanır 1 ELF'nin orijinal ve güncel sürümü için.
0x071e_ident [EI_OSABI]Hedef işletim sistemini tanımlar ABI.
DeğerABI
0x00Sistem V
0x01HP-UX
0x02NetBSD
0x03Linux
0x04GNU Hurd
0x06Solaris
0x07AIX
0x08IRIX
0x09FreeBSD
0x0ATru64
0x0BNovell Modesto
0x0COpenBSD
0x0DOpenVMS
0x0ENonStop Çekirdek
0x0FAROS
0x10Fenix ​​OS
0x11CloudABI
0x12Stratus Teknolojileri OpenVOS

Genellikle şu şekilde ayarlanır 0 hedef platformdan bağımsız olarak.[kaynak belirtilmeli ]

0x081e_ident [EI_ABIVERSION]Ayrıca ABI sürümünü belirtir. Yorumlanması hedef ABI'ye bağlıdır. Linux çekirdeği (en az 2.6'dan sonra) bunun tanımı yoktur,[5] bu nedenle statik bağlantılı çalıştırılabilir dosyalar için yok sayılır. Bu durumda, EI_PAD ofset ve boyutu 8.

glibc 2.12+ durumunda e_ident [EI_OSABI] == 3 bu alanı ABI sürümü olarak değerlendirir. dinamik bağlayıcı:[6] dinamik bağlayıcının özelliklerinin bir listesini tanımlar,[7] ikramlar e_ident [EI_ABIVERSION] paylaşılan nesne (yürütülebilir veya dinamik kitaplık) tarafından talep edilen bir özellik seviyesi olarak ve bilinmeyen bir özellik istenirse yüklemeyi reddeder, örn. e_ident [EI_ABIVERSION] bilinen en büyük özellikten daha büyüktür.[8]

0x097e_ident [EI_PAD]şu anda kullanılmayan, sıfırlarla doldurulmalıdır.
0x102e_typeNesne dosya türünü tanımlar.
DeğerTür
0x00ET_NONE
0x01ET_REL
0x02ET_EXEC
0x03ET_DYN
0x04ET_CORE
0xFE00ET_LOOS
0xFEFFET_HIOS
0xFF00ET_LOPROC
0xFFFFET_HIPROC
0x122e_machineHedefi belirtir komut seti mimarisi. Bazı örnekler:
DeğerISA
0x00Belirli bir talimat seti yok
0x01AT&T WE 32100
0x02SPARC
0x03x86
0x04Motorola 68000 (M68k)
0x05Motorola 88000 (M88k)
0x06Intel MCU
0x07Intel 80860
0x08MIPS
0x09IBM_System / 370
0x0AMIPS RS3000 Little-endian
0x0B - 0x0Dgelecekte kullanılmak üzere rezerve edilmiştir
0x0EHewlett-Packard PA-RISC
0x0Fgelecekte kullanılmak üzere rezerve edilmiştir
0x13Intel 80960
0x14PowerPC
0x15PowerPC (64 bit)
0x16S390, S390x dahil
0x28KOL (ARMv7 / Aarch32'ye kadar)
0x2ASuperH
0x32IA-64
0x3Eamd64
0x8CTMS320C6000 Ailesi
0xB7ARM 64 bit (ARMv8 / Aarch64)
0xF3RISC-V
0x101WDC 65C816
0x144e_versionAyarlanır 1 ELF'nin orijinal versiyonu için.
0x1848e_entryBu, hafıza adresidir. giriş noktası işlemin yürütülmeye başladığı yerden. Bu alan, daha önce tanımlanan formata bağlı olarak 32 veya 64 bit uzunluğundadır.
0x1C0x2048e_phoffProgram başlık tablosunun başlangıcını gösterir. Genellikle dosya başlığını hemen takip ederek ofseti 0x34 veya 0x40 sırasıyla 32 ve 64 bit ELF yürütülebilir dosyaları için.
0x200x2848e_shoffBölüm başlığı tablosunun başlangıcına işaret eder.
0x240x304e_flagsBu alanın yorumlanması hedef mimariye bağlıdır.
0x280x342e_ehsizeNormalde 64 bit için 64 Bayt ve 32 bit biçim için 52 Bayt olmak üzere bu başlığın boyutunu içerir.
0x2A0x362e_phentsizeBir program başlığı tablosu girişinin boyutunu içerir.
0x2C0x382e_phnumProgram başlık tablosundaki girişlerin sayısını içerir.
0x2E0x3A2e_shentsizeBir bölüm başlığı tablosu girişinin boyutunu içerir.
0x300x3C2e_shnumBölüm başlığı tablosundaki girişlerin sayısını içerir.
0x320x3E2e_shstrndxBölüm adlarını içeren bölüm başlığı tablosu girişinin dizinini içerir.
0x340x40ELF Başlığının Sonu (boyut)

Program başlığı

Program başlık tablosu, sisteme bir işlem görüntüsünün nasıl oluşturulacağını söyler. Dosya ofsetinde bulunur e_phoffve şunlardan oluşur e_phnum girişler, her biri büyüklükte e_phentsize. Düzen biraz farklıdır 32 bit ELF vs 64 bit ELF, çünkü p_flags hizalama nedenleriyle farklı bir yapı konumunda. Her giriş şu şekilde yapılandırılmıştır:

Program başlığı[9]
OfsetBoyut (bayt)AlanAmaç
32 bit64 bit32 bit64 bit
0x004p_typeSegmentin türünü tanımlar.
DeğerİsimAnlam
0x00000000PT_NULLProgram başlığı tablo girişi kullanılmıyor
0x00000001PT_LOADYüklenebilir segment
0x00000002PT_DYNAMICDinamik bağlantı bilgileri
0x00000003PT_INTERPTercüman bilgileri
0x00000004PT_NOTEYardımcı bilgiler
0x00000005PT_SHLIBayrılmış
0x00000006PT_PHDRprogram başlık tablosunun kendisini içeren segment
0x00000007PT_TLSİş Parçacığı Yerel Depolama şablonu
0x60000000PT_LOOSaşağıya bakınız
0x6FFFFFFFPT_HIOS
0x70000000PT_LOPROC
0x7FFFFFFFPT_HIPROC

PT_LOOS -e PT_HIOS (PT_LOPROC -e PT_HIPROC), işletim sistemine (işlemciye) özgü anlamlar için kapsayıcı ve ayrılmış bir aralıktır.

0x044p_flagsSegmente bağlı işaretler (64 bit yapı için konum).
0x040x0848p_offsetDosya görüntüsündeki segmentin ofseti.
0x080x1048p_vaddrSegmentin bellekteki sanal adresi.
0x0C0x1848p_paddrFiziksel adresin ilgili olduğu sistemlerde, segmentin fiziksel adresi için ayrılmıştır.
0x100x2048p_fileszDosya görüntüsündeki segmentin bayt cinsinden boyutu. 0 olabilir.
0x140x2848p_memszBellekteki segmentin bayt cinsinden boyutu. 0 olabilir.
0x184p_flagsSegmente bağlı işaretler (32 bit yapı için konum).
0x1C0x3048p_align0 ve 1 hizalama belirtmeyin. Aksi takdirde, 2'nin pozitif, integral kuvveti olmalıdır. p_vaddr eşitleme p_offset modül p_align.
0x200x38Program Başlığı Sonu (boyut)

Bölüm başlığı

OfsetBoyut (bayt)AlanAmaç
32 bit64 bit32 bit64 bit
0x004sh_nameBir dizeye uzaklık .shstrtab Bu bölümün adını temsil eden bölüm.
0x044sh_typeBu başlığın türünü tanımlar.
DeğerİsimAnlam
0x0SHT_NULLBölüm başlığı tablo girişi kullanılmıyor
0x1SHT_PROGBITSProgram verisi
0x2SHT_SYMTABSembol tablosu
0x3SHT_STRTABDize tablosu
0x4SHT_RELAEkli yer değiştirme girişleri
0x5SHT_HASHSembol karma tablosu
0x6SHT_DYNAMICDinamik bağlantı bilgileri
0x7SHT_NOTENotlar
0x8SHT_NOBITSVeri içermeyen program alanı (bss)
0x9SHT_RELYer değiştirme girişleri, eklenti yok
0x0ASHT_SHLIBAyrılmış
0x0BSHT_DYNSYMDinamik bağlayıcı sembol tablosu
0x0ESHT_INIT_ARRAYYapıcılar dizisi
0x0FSHT_FINI_ARRAYYıkıcılar dizisi
0x10SHT_PREINIT_ARRAYÖn oluşturucular dizisi
0x11SHT_GROUPBölüm grubu
0x12SHT_SYMTAB_SHNDXGenişletilmiş bölüm endeksleri
0x13SHT_NUMTanımlanmış türlerin sayısı.
0x60000000SHT_LOOSİşletim sistemine özel başlayın.
.........
0x0848sh_flagsBölümün özniteliklerini tanımlar.
DeğerİsimAnlam
0x1SHF_WRITEYazılabilir
0x2SHF_ALLOCYürütme sırasında hafızayı işgal eder
0x4SHF_EXECINSTRYürütülebilir
0x10SHF_MERGEBirleştirilebilir
0x20SHF_STRINGSBoş sonlandırılmış dizeler içerir
0x40SHF_INFO_LINK'sh_info' SHT dizinini içerir
0x80SHF_LINK_ORDERBirleştirdikten sonra düzeni koru
0x100SHF_OS_NONCONFORMINGStandart olmayan işletim sistemine özel işlem gerekli
0x200SHF_GROUPBölüm, bir grubun üyesi
0x400SHF_TLSBölüm iş parçacığı yerel verilerini tut
0x0ff00000SHF_MASKOSİşletim sistemine özgü
0xf0000000SHF_MASKPROCİşlemciye özel
0x4000000SHF_ORDEREDÖzel sipariş gereksinimi (Solaris)
0x8000000SHF_EXCLUDEReferans verilmedikçe veya tahsis edilmedikçe bölüm hariç tutulur (Solaris)
0x0C0x1048sh_addrHafızadaki bölümün sanal adresi, yüklenen bölümler için.
0x100x1848sh_offsetDosya görüntüsündeki bölümün ofseti.
0x140x2048sh_sizeDosya görüntüsündeki bölümün bayt cinsinden boyutu. 0 olabilir.
0x180x284sh_linkİlişkili bir bölümün bölüm dizinini içerir. Bu alan, bölümün türüne bağlı olarak birkaç amaç için kullanılır.
0x1C0x2C4sh_infoBölüm hakkında ek bilgi içerir. Bu alan, bölümün türüne bağlı olarak birkaç amaç için kullanılır.
0x200x3048sh_addralignBölümün gerekli hizalamasını içerir. Bu alan ikinin kuvveti olmalıdır.
0x240x3848sh_entsizeSabit boyutlu girdiler içeren bölümler için her girdinin bayt cinsinden boyutunu içerir. Aksi takdirde bu alan sıfır içerir.
0x280x40Bölüm Başlığının Sonu (boyut)

Araçlar

  • kendini okumak bir veya daha fazla ELF dosyası hakkında bilgi görüntüleyen bir Unix ikili yardımcı programıdır. Bir ücretsiz yazılım uygulama tarafından sağlanır GNU Binutils.
  • elfutils alternatif araçlar sağlar GNU Binutils tamamen Linux için.[10]
  • elfdump Solaris altında bulunan bir ELF dosyasında ELF bilgilerini görüntülemek için bir komuttur ve FreeBSD.
  • objdump ELF dosyaları ve diğer nesne biçimleri hakkında çok çeşitli bilgiler sağlar. objdump kullanır İkili Dosya Tanımlayıcı kitaplığı ELF verilerini yapılandırmak için arka uç olarak.
  • Unix dosya yardımcı program, ELF dosyaları hakkında bazı bilgileri görüntüleyebilir. komut seti mimarisi yeri değiştirilebilen, yürütülebilir veya paylaşılan bir nesne dosyasındaki kodun amaçlandığı veya üzerinde bir ELF çekirdek dökümü üretildi.

Başvurular

Unix benzeri sistemler

ELF formatı, çeşitli ortamlarda eski yürütülebilir formatların yerini aldı. a.out ve COFF formatları Unix benzeri işletim sistemleri:

Unix dışı kullanım

ELF ayrıca Unix dışı işletim sistemlerinde de bazı kullanımlara tanık oldu, örneğin:

Oyun konsolları

Bazı oyun konsolları da ELF kullanır:

PowerPC

Çalışan diğer (işletim) sistemler PowerPC ELF kullanan:

Cep telefonları

Cep telefonları ve mobil cihazlar için bazı işletim sistemleri ELF kullanır:

Bazı telefonlar ELF dosyalarını bir yama bu ekler montaj kodu ana aygıt yazılımı olarak bilinen bir özellik olan ELFPack yeraltında modlama kültür. ELF dosya formatı aynı zamanda Atmel AVR (8 bit), AVR32[21]Ve birlikte Texas Instruments MSP430 mikro denetleyici mimarileri. Bazı uygulamaları Firmware'i Aç ELF dosyalarını da yükleyebilir, özellikle elma uygulamasının neredeyse tümünde kullanılan PowerPC şirketin ürettiği makineler.

Teknik Özellikler

Linux Standart Tabanı (LSB), belirtildiği mimariler için yukarıdaki özelliklerin bazılarını tamamlar.[22] Örneğin, System V ABI, AMD64 Supplement için durum budur.[23][24]

86açık

86açık ortak bir fikir birliği oluşturmak için bir projeydi ikili dosya formatı Unix ve Unix benzeri işletim sistemleri ortak olarak PC uyumlu x86 mimari, yazılım geliştiricilerini mimariye geçiş yapmaya teşvik etmek için.[25] İlk fikir, Spec 1170'in küçük bir alt kümesini standartlaştırmaktı. Tek UNIX Belirtimi ve değiştirilmemiş ikili dosyaların x86 Unix benzeri işletim sistemlerinde çalışmasını sağlamak için GNU C Kitaplığı (glibc). Proje başlangıçta "Spec 150" olarak adlandırıldı.

Sonunda seçilen format ELF, özellikle de ELF'nin Linux uygulamasıydı. fiili standart ilgili tüm satıcılar ve işletim sistemleri tarafından desteklenir.

Grup, e-posta tartışmalarına 1997 yılında başladı ve ilk olarak Santa Cruz Operasyonu 22 Ağustos 1997'de ofisler.

Yönlendirme komitesi Marc Ewing Dion Johnson, Evan Leibovitch, Bruce Perens Andrew Roach Bryan Wayne Sparks ve Linus Torvalds. Projedeki diğer kişiler Keith Bostic, Chuck Cranor, Michael Davidson, Chris G. Demetriou, Ulrich Drepper, Don Dugger, Steve Ginzburg, Jon "maddog" Salonu Ron Holt, Ürdün Hubbard, Dave Jensen, Kean Johnston, Andrew Josey, Robert Lipe, Bela Lubkin, Tim Marsland, Greg Page, Ronald Joe Record, Tim Ruckle, Joel Silverstein, Chia-pi Tien ve Erik Troan. Temsil edilen işletim sistemleri ve şirketler BeOS, BSDI, FreeBSD, Intel, Linux, NetBSD, SCO ve SunSoft.

Proje ilerledi ve 1998'in ortalarında SCO geliştirmeye başladı lxrun, açık kaynak uyumluluk katmanı Linux ikili dosyalarını çalıştırabilir OpenServer, UnixWare, ve Solaris. SCO, lxrun'un resmi desteğini şu adreste duyurdu: LinuxWorld Mart 1999'da. Sun Microsystems 1999 başlarında Solaris için lxrun'u resmi olarak desteklemeye başladı,[26] ve daha sonra Linux ikili biçiminin entegre desteğine geçildi Linux Uygulamaları için Solaris Container'lar.

Uzun süredir desteklenen Linux ikililerine sahip BSD'ler ile (bir uyumluluk katmanı ) ve ana x86 Unix satıcıları formata destek ekledikten sonra, proje Linux ELF'nin endüstri tarafından seçilen format olduğuna karar verdi ve 25 Temmuz 1999'da "[d] kendisini feshettiğini" ilan etti.[27]

FatELF: Linux için evrensel ikili dosyalar

FatELF ekleyen bir ELF ikili format uzantısıdır şişman ikili yetenekleri.[28] Hedefleniyor Linux ve diğeri Unix benzeri işletim sistemleri. CPU mimarisi soyutlamasına ek olarak (bayt sırası, Kelime boyutu, İşlemci komut seti vb.), yazılım platformu soyutlamasının potansiyel avantajı vardır, örneğin, birden fazla çekirdeği destekleyen ikili dosyalar ABI sürümler. 25 Nisan 2020 itibarıyla, FatELF ana hat Linux Kernel'e entegre edilmemiştir.[29][30][31]

Ayrıca bakınız

Referanslar

  1. ^ a b Araç Arayüzü Standardı (TIS) Yürütülebilir ve Bağlantı Biçimi (ELF) Belirtimi Sürüm 1.2 (Mayıs 1995)
  2. ^ System V Uygulama İkili Arayüzü Sürüm 4.1 (1997-03-18)
  3. ^ "Mevcut lexers - Pygments". pygments.org.
  4. ^ "ELF Başlığı". Sco.com. Temmuz 2000. Alındı 2014-02-07.
  5. ^ "LXR linux / include / linux / elf.h". linux.no. Alındı 27 Nisan 2015.
  6. ^ "glibc 2.12 duyuru".
  7. ^ "sourceware.org Git - glibc.git / blob - libc-abis".
  8. ^ "sourceware.org Git - glibc.git / blob - sysdeps / gnu / ldsodefs.h".
  9. ^ "Program Başlığı". Sco.com. Temmuz 2000. Alındı 2017-04-05.
  10. ^ "elfutils". sourceware.org. Alındı 30 Nisan 2017.
  11. ^ "İkili Biçimler".
  12. ^ "MinixReleases - Minix Wiki". Wiki.minix3.org. Arşivlenen orijinal 2013-03-30 tarihinde. Alındı 2014-01-19.
  13. ^ https://vmssoftware.com/pdfs/State_of_Port_20160906.pdf
  14. ^ "GCCSDK - RISC OS". Riscos.info. 2012-04-22. Alındı 2014-01-19.
  15. ^ "Windows 10 Insider Preview Build 14316'yı Duyuruyoruz". Windows Deneyimi Blogu. 2016-04-06. Alındı 2016-04-10.
  16. ^ Foley, Mary Jo. "Microsoft'un Linux için Windows Alt Sisteminin altında | ZDNet". ZDNet. Alındı 2016-08-19.
  17. ^ "Koruyucu Programcı Kılavuzu" (PDF). Hewlett Packard Enterprise. Arşivlenen orijinal (PDF) 2018-05-30 tarihinde. Alındı 2018-05-30. s. 44'den arşivlendi orijinal 2018-5-30 tarihinde
  18. ^ PlayStation Portable, şifrelenmiş ve yeniden konumlandırılmış ELF: PSP kullanın
  19. ^ Symbian OS çalıştırılabilir dosya biçimi
  20. ^ Rosen, Kenneth; Ev sahibi, Douglas; Klee, Rachel; Rosinski Richard (2007). UNIX: Tam Referans (2 ed.). McGraw Hill Profesyonel. s. 707. ISBN  9780071706988. Alındı 2017-06-08. Dinamik olarak bağlantılı kitaplıklar, paylaşılan nesneler (.so) olarak da adlandırılır.
  21. ^ "Bölüm 4: Nesne Dosyaları", System V Uygulama İkili Arayüzü, 2009-10-26, e_machine
  22. ^ "LSB Referanslı Özellikler". linuxfoundation.org. Alındı 27 Nisan 2015.
  23. ^ "Yürütülebilir ve Bağlantı Biçimi (ELF)". linuxfoundation.org. Alındı 27 Nisan 2015.
  24. ^ "Giriş". linuxfoundation.org. Alındı 27 Nisan 2015.
  25. ^ Leibovitch, Evan (1997-12-23). "86Sık Sorulan Soruları Aç". Arşivlenen orijinal 2007-03-11 tarihinde. Alındı 2007-06-06.
  26. ^ Kayıt, Ronald (1998-05-21). "SCO'da 86open durumuyla ilgili bülten". Arşivlenen orijinal 2008-12-08 tarihinde. Alındı 2008-05-06.
  27. ^ Leibovitch, Evan (1999-07-25). "The86open Projesi - Son Güncelleme". Arşivlenen orijinal 2007-02-27 tarihinde. Alındı 2007-05-06.
  28. ^ Gordon, Ryan. "fatelf-specation v1". icculus.org. Alındı 2010-07-25.
  29. ^ Gordon, Ryan. "FatELF: Belirsizliği daha çok sevdiğim ortaya çıktı". icculus.org. Alındı 2010-07-13.
  30. ^ Holwerda Thom (2009-11-03). "Ryan Gordon FatELF Projesini Durdurdu". osnews.com. Alındı 2010-07-05.
  31. ^ Brockmeier, Joe (23 Haziran 2010). "KENDİNE: Bir (iddia edilen) başarısızlığın anatomisi". Haftalık Linux Haberleri. Alındı 2011-02-06.

daha fazla okuma

Dış bağlantılar