- The application library which programs get ported to.
- The frontend application which runs programs ported to libretro.
- A Linux distribution that boots into RetroArch within less than 5 seconds. Serves as a turnkey solution for turning commodity PC hardware into plug-and-play game consoles.
Libretro’s design goals
Libretro is the library programming interface. Programs get ported to this library and can then be run with any libretro-compatible frontend.
Our reference frontend is RetroArch. The two projects are not the same, and this is reflected in the licensing as well. RetroArch sticks to GPL version 3 whereas the libretro API is a MIT-licensed API.
Some of the design goals for libretro:
- Allow a non-kitchensink approach to crossplatform portability.
- Allow a non-dependency heavy approach to crossplatform portability. Stick to just one header containing definitions for the necessary audio/video/input callbacks.
- Care about being backwards compatible. Libretro’s ABI( Application Binary Interface) has never been broken in years, and old libretro frontends from years ago in most cases can still use libretro cores being created today.
- By its very design enables programs to be ported to singular dynamic libraries which can then be loaded in and out of frontend applications thanks to the libretro API.
- Forces you by its design to rethink what code belongs to ‘core land’ and what should belong to ‘frontend land’. Libretro cores ideally should have minimal to no dependencies on any system/OS-specific APIs so that the same libretro cores can work on any libretro-compatible frontend.
- Designed with games, emulators and multimedia in mind. Libretro core ports resemble ports being done to standalone game consoles or mobile where the primary input device is not a keyboard and mouse (although libretro supports those as well). Does not concern itself with external WIMP GUIs (since they are not portable), or anything that would tie itself to mainly desktop PC-usage. Libretro cores ideally have to work seamlessly on mobile, desktop PC and game consoles.
- Requires you to link your libretro-ported program to a libretro frontend, leaves the libretro frontend creation part up to you or lets you select one of the mature libretro frontends already available.
RetroArch’s design goals
RetroArch is the official reference frontend to the libretro library. Previously it was meant as a small and simple libretro frontend implementation so that it was left up to other frontend implementors to create a feature-rich alternative to it. With changing expectations by endusers and lots of requests, it has since outgrown those boots and turned into a feature-rich frontend for emulators, games and other content.
Its design goals are as follows:
- Provide a rich, feature-complete frontend for the libretro API that shows what libretro can do.
- Stick to a predominantly C-based codebase that tries to be both forwards and backwards-compatible.
- Try to support as many platforms / operating systems as possible.
- Try to keep binary size to a minimum while still being feature-rich.
- Try to avoid hard dependencies as much as possible, and in cases they can’t be avoided, bake them into the main program, but retain the ability to optionally compile in or out aspects of the code.
- Strive for advanced power-user features while still being accessible for inexperienced beginner endusers.
RetroArch’s privacy/philosophy/enduser-respecting guidelines
It’s in the best interests of RetroArch as the reference frontend to remain a no-strings attached enduser project. Therefore, we draw a strict line on the following issues:
- RetroArch as the reference frontend to libretro will always remain free. Free as in libre, AND free as in beer.
- We don’t believe in spying on you and/or viewing you as a commodity to be exploited and tracked. Therefore, if you use a version of RetroArch that has ads in it, it does not come from us.
- We will never engage in deliberate and shady ‘rebranding’ of existing open source projects to make it appear as if the ‘work/port’ is somehow distinct from the main source and as if it is its own entity.
- Unsolicited e-mails regarding monetization middleware will be ignored.
- We provide all the means to any and all devs to make their own builds/packages from source – unlike others everything we do is immediately committed to Github so whatever you can fetch from source on our Github repositories is exactly the current state of development. Unlike others, everything we commit can be guaranteed to be built by others.
Note – these stances are final. We feel very strongly in them.
Lakka’s design goals
Lakka is the turnkey solution for the libretro and RetroArch projects. It turns commodity PC hardware and hobbyist devboards into game consoles powered by the libretro API, running RetroArch.
- Lakka is a Linux distribution based on OpenELEC. Unlike OpenELEC, it still supports PC hardware dependent on BIOS support, and 32-bit Intel x86 support.
- Lakka aims to support hardware platforms that are both ARM and Intel x86-based.
- Lakka is a very small distribution that is less than 100MB in size. It aims to be dependency-light and not make itself dependent upon big libraries, toolkits, compositors or desktop/windowing environments.
- If the hardware allows for it, Lakka makes use of DRM graphics drivers for the best possible performance. If the hardware allows for it, Lakka will run without an X11 server.
- Lakka aims to boot into a working game console OS environment within less than 5 seconds.
- Lakka can be principally controlled with only a gamepad, a keyboard and mouse can be used but should never be required.
- Lakka is open-source and free, both in terms of free beer and in terms of freedom.
- Lakka sticks to a libretro-only ecosystem. Anything that is available for play on RetroArch and libretro, should be available to Lakka.
- Perfect for giving your old discarded laptop or HTPC a second lease on life by repurposing it as a retro games console.