فرمت اجرایی و مرتبط
در رایانش، فرمت اجرایی و مرتبط (ELF، که قبلاً به نام Extensible Linking Format نامیده می‌شد) یک استاندارد فرمت فایل برای فایل‌های اجرایی، کد هدف (object code)، کتابخانه‌های اشتراکی و تخلیهٔ هسته (core dump) است. اولین بار با ویژگی‌هایی برای رابط دودویی نرم‌افزار (ABI) سیستم عامل یونیکس نسخه یSystem V Release 4 (SVR4) منتشر شد، و بعد تر در استاندارد رابط ابزار که به سرعت مورد قبول فروشندگان مختلف سیستم های یونیکس قرار گرفت. در سال ۱۹۹۹، به عنوان فرمت استاندارد فایل باینری برای سیستم‌های یونیکس و شبه یونیکس بر روی پردازنده‌های x86 توسط پروژه 86open انتخاب شد.
از نظر طراحی، فرمت ELF انعطاف‌پذیر، قابل گسترش و مستقل از سکو است. به عنوان مثال endiannessهای مختلف و اندازه‌های آدرس را پشتیبانی می‌کند، بنابراین هیچ پردازنده مرکزی (CPU) خاص یا معماری مجموعه دستورالعمل را حذف نمی‌کند. این عامل باعث شده‌است که توسط بسیاری از سیستم عامل‌ها در بسیاری از سکوهای سخت‌افزاری مورد استفاده واقع شود.
هر فایل ELF از یک سرصفحه ELF (هدر ELF) ساخته شده‌است و به دنبال آن داده‌های فایل آمده‌است. داده‌ها می‌توانند شامل موارد زیر باشند:
بخش‌ها (segments)حاوی اطلاعاتی هستند که برای زمان اجرای فایل مورد نیاز است، در حالی که بخش‌ها (sections) حاوی اطلاعات مهم برای اتصال(linking) و جابجایی هستند. هر بایت در کل فایل می‌تواند حداکثر متعلق به یک قسمت (section) باشد و اصطلاحاً بایت‌های یتیم زمانی به وجود می‌آیند که بایتی متعلق به هیچ بخش نباشد.
هدر ELF تعریف می‌کند که از آدرس‌های ۳۲ بیتی استفاده شده‌است یا ۶۴ بیتی. هدر حاوی سه فیلد است که از ۳۲ بیتی یا ۶۴ بیتی بودن تأثیر می‌پذیرند و شروع فیلدهای دیگری را که آنها را دنبال می‌کنند، تعیین می‌کنند. هدر ELF به ترتیب برای ۳۲ بیت و ۶۴ بیت، ۵۲ یا ۶۴ بایت طول دارد. جدول هدر برنامه به سیستم می‌گوید چگونه یک تصویر پردازش ایجاد کند.
هدر برنامه در محل نشانگر فایل e_phoff یافت می‌شود و شامل ورودی‌های e_phnum است که هر کدام با اندازه e_phentsize هستند. طرح بندی در ELF ۳۲ بیتی نسبت به ELF 64 بیتی کمی متفاوت است، زیرا p_flags به دلیل ایجاد هماهنگی در مکان ساختاری متفاوت قرار دارند. هر ورودی به صورت زیر تشکیل شده‌است:
فرمت ELF جایگزین فرمت‌های اجرایی قدیمی در محیط‌های مختلف شده‌است. این فرمت، فرمت‌های a.out و COFF را در سیستم عامل‌های شبه یونیکس جایگزین کرده‌است:
ELF همچنین مورد تصویب برخی از سیستم‌های عامل غیر یونیکس بوده‌است، مانند:
همچنین برخی از کنسول‌های بازی از ELF استفاده می‌کنند:
سایر سیستم عامل‌های فعال در PowerPC که از ELF استفاده می‌کنند:
برخی از سیستم عامل‌های تلفن همراه و دستگاه‌های تلفن همراه از ELF استفاده می‌کنند:
برخی از تلفن‌ها می‌توانند فایل‌های ELF را از طریق استفاده از یک پچ که کد مونتاژ را به سیستم عامل اصلی اضافه می‌کند، اجرا کنند که این ویژگی با عنوان "ELFPack" در فرهنگ مودینگ زیرزمینی، شناخته شده‌است. فرمت فایل ELF همچنین با Atmel AVR (8 بیتی)، AVR32 و با معماری میکروکنترلر Texas Instruments MSP430 مورد استفاده قرار می‌گیرد. برخی از پیاده‌سازی‌های Firmware Open همچنین می‌توانند فایل‌های ELF را بارگذاری کنند، به ویژه پیاده‌سازی‌های اپل که در تقریباً تمامی دستگاه‌های PowerPC که توسط خود شرکت تولید شده‌اند، مورد استفاده قرار می‌گیرند.
پایگاه استاندارد لینوکس (LSB) بعضی از ویژگی‌های فوق را برای معماری‌هایی که مشخص شده‌اند، می‌افزاید. به عنوان مثال، برای System V ABI، مکمل AMD64 وجود دارد.
86open یک پروژه برای شکل‌گیری توافق عمومی بر روی یک فرمت فایل باینری رایج برای سیستم عامل‌های یونیکس و شبه یونیکس روی کامپیوترهای رایج سازگار با معماری x86 بود تا توسعه دهندگان نرم‌افزار تشویق شوند که به این معماری روی بیاورند. ایده اولیه این بود که بر روی یک زیر مجموعه کوچک از Spec 1170، یک پیشین برای مشخصات یونیکس تک و کتابخانه GNU C (glibc) استانداردسازی شود تا باینری‌های غیر اصلاح شده بتوانند در سیستم عامل‌های یونیکس x86 اجرا شوند. این پروژه در ابتدا "Spec 150" نامگذاری شد.
فرمتی که در نهایت انتخاب شد، ELF بود، به ویژه ELF پیاده‌سازی شده برای لینوکس که پس از آن تبدیل شده بود به استاندارد de facto که توسط همه فروشندگان و سیستم عامل‌های مرتبط پشتیبانی می‌شد.
این گروه در سال ۱۹۹۷ بحث‌های ایمیلی را آغاز کرد و برای اولین بار در ۲۲ اوت ۱۹۹۷ با یکدیگر در دفتر ملاقات کرد.
کمیته فرماندهی مارک ایوینگ، دیون جانسون، ایوان لیبوویچ، بروس پرونس، اندرو روچ، برین اسپارکس و لینوس توروالدز بودند. دیگر افراد در این پروژه عبارت اند از: کیت بستیک، چاک کرانور، مایکل دیویدسون، کریس جی. دمتریو، اولریش دپپر، دون دوگگر، استیو گینزبورگ، جان دانیل هال، رون هولت، اردن هابارد، دیو جانسن، کین جانستون، اندرو جوزی، رابرت لیپ، بلا لوبکین، تیم مارسلند، گرگ پیج، رونالدو جو رکورد، تیم راکله، جوئل سیلور اشتاین، چیا پی تیین و اریک تران.
سیستم‌های عامل و شرکت‌های موجود عبارت بودند از BeOS، BSDI، FreeBSD، اینتل، لینوکس، NetBSD , SCO و SunSoft, Inc..
این پروژه پیشرفت کرد و در اواسط سال ۱۹۹۸، SCO شروع به توسعه lxrun کرد که یک لایه سازگاری با منبع باز بود که قادر به اجرای باینری‌های لینوکس در OpenServer , UnixWare و Solaris بود. SCO حمایت رسمی خود را از lxrun در LinuxWorld در ماه مارس ۱۹۹۹ اعلام کرد. Sun Microsystems در اوایل سال ۱۹۹۹ به‌طور رسمی از lxrun برای سولاریس پشتیبانی کرد و بعد به پشتیبانی یکپارچه از فرمت دودویی لینوکس از طریق پرداخت.
با استفاده از BSDهایی که به مدت طولانی لینوکس را پشتیبانی می‌کنند (از طریق یک لایه سازگاری) و فروشندگان اصلی x86 Unix با پشتیبانی از فرمت اضافه شده‌است، این پروژه تصمیم گرفت که ELF لینوکس فرمت انتخاب شده توسط صنعت باشد و «اعلام کند که خودش حل شده» در ۲۵ ژوئیه ۱۹۹۹.
FatELF یک فرمت دودویی گسترش یافتهٔ ELF است که قابلیت‌های باینری fat را اضافه می‌کند. ّFatELF برای لینوکس و سایر سیستم عامل‌های مشابه یونیکس بشمار می‌رود. علاوه بر انتزاع معماری پردازنده (ترتیب بایت، اندازهٔ word، دستورالعمل CPU و غیره)، در software-platform abstraction مزیت بالقوه ای وجد دارد مانند باینری‌هایی که از نسخه‌های متعددی از کرنل ABI پشتیبانی می‌کنند. تا سال ۲۰۱۴، پشتیبانی از FatELF در خط اصلی کرنل لینوکس یکپارچه نیست.