[Feature Request] Add "Show Free Content Only" filter
Nobody has claimed this yet.
- Dominant language
- C
- Stars
- 14.1k
- Forks
- 2.2k
- Avg merge
- 7h 35m
- Merged PRs (30d)
- 51
Description
[Please note that this issue has been revised to incorporate the concerns and points raised in the comments.]
1. The Core Licensing Challenge
1.1 Package Manager Compliance
However, non-free packages managed natively by conventional package managers (such as apt) are strictly forbidden in free distros. This restriction exists because these operating systems must comply with the Free System Distribution Guidelines (GNU FSDG).
While traditional package managers offer a clear way to isolate proprietary software, RetroArch’s built-in ecosystem lacks an in-app mechanism to prevent non-free content from appearing in its online updaters. Adding a dedicated toggle to filter out non-free listings would greatly benefit the free software community.
Filtering non-free software is straightforward in conventional Linux environments done with repositories. For instance, the apt package libretro-snes9x operates under a custom, source-available, non-commercial license. This renders it non-free according to the Free Software Foundation (FSF)'s Free Software Definition—specifically violating Freedom 0, which guarantees the freedom to run the program for any purpose.
Because of this licensing conflict:
- The package is readily available in Ubuntu (verified via its package search), which includes a non-free repository called multiverse alongside its free repositories.
- The
libretro-snes9xpackage relies onlibretro-core-info, which includes the snes9x_libretro.info metadata file (display_name = "Nintendo - SNES / SFC (Snes9x)"). As a result, RetroArch displays the coreNintendo - SNES / SFC (Snes9x)via Main Menu → Online Updater → Core Downloader.
- The
- The
libretro-snes9xpackage is intentionally omitted (abandoned) in the Ubuntu-derived free distro Trisquel (verified via its package search), which complies with the GNU FSDG by maintaining only free repositories and excluding non-free channels entirely.- Conversely, because the non-free package is omitted, snes9x_libretro.info is excluded from
libretro-infobecause it containslicense = "Non-commercial". Consequently, RetroArch does not listNintendo - SNES / SFC (Snes9x)in the Core Downloader.
- Conversely, because the non-free package is omitted, snes9x_libretro.info is excluded from
1.2 RetroArch's Inbuilt Core Downloader
In older versions like retroarch 1.7.3 on Trisquel 11.0.1, the Show 'Core Downloader' setting (Settings → User Interface → Menu Visibility → Show 'Core Downloader) was unavailable—even when manually editing its corresponding setting menu_show_core_updater = "true" in retroarch.cfg. However, Show 'Core Downloader is now present in retroarch 1.18.0 on Trisquel 12.
Benefits with 'Core Downloader'
At the time of this writing, traditional operating system repositories offer a severely limited selection—providing only 12 libretro package options through Ubuntu's standard apt manager. In stark contrast, bypassing package managers and utilizing RetroArch's native Core Downloader unlocks a vast library of exactly 236 precompiled cores specifically built for GNU/Linux environments.
Issues with 'Core Downloader'
Once Settings > User Interface > Menu Visibility > Show 'Core Downloader' has been enabled, you can download non-free cores like Snes9x via Main Menu > Online Updater > Core Downloader > Nintendo - SNES / SFC (Snes9x) even in free distros like Trisquel GNU/Linux.
Screenshot from Trisquel 12:
Because no native option currently exists to hide non-free items, free software activists and users maintaining strict compliance with free distros risk accidentally installing restricted software through the user interface (even though the license is listed next to the core in the list), while the lack of separation also degrades the overview of strictly free-only content. Additionally, free distributions adhering to the GNU Free System Distribution Guidelines (FSDG) do not want this mixed availability within their ecosystems, not for the sake of system stability or technical reliability, but for the preservation of user freedom.
2. Proposed Implementation Details
2.1. SPDX Identifiers in .info Files
See: * https://github.com/libretro/libretro-super/issues/2075
This will simplify the next step: enabling RetroArch functions to show or hide nonfree cores.
2.2. Hard-coded Setting
For packaged versions of RetroArch (such as those for strict free-software distributions), a hard-coded setting should make it impossible to enable nonfree content. This functions similarly to older packaging approaches—for example, in RetroArch 1.7.3 on Trisquel 11.0.1, where the Show 'Core Downloader' setting (Settings → User Interface → Menu Visibility → Show 'Core Downloader') was unavailable and ignored manual overrides of menu_show_core_updater = "true" in retroarch.cfg.
2.3. Soft-coded Setting
For users of official builds (such as the nightly AppImage release), a dedicated filtering configuration within the application menus can provide the option to toggle nonfree content:
- Proposed setting name:
Show Free Content Only - Location:
Main Menu → Online Updater → Updater Settings - Setting action: Restricts downloadable items to those distributed under a certified free software license.
2.1 Functional Scope
When toggled on, the feature cross-references available items against accepted licenses under the Free Software Definition, ensuring restrictive source-available or non-commercial files are omitted from the download lists.
This filtering is made possible because core .info files already contain designated license information.
For example bsnes is distributed under GPLv3 while Snes9x is distributed under Non-commercial:
- https://github.com/libretro/libretro-super/blob/master/dist/info/bsnes_libretro.info
license = "GPLv3"
- https://github.com/libretro/libretro-super/blob/master/dist/info/snes9x_libretro.info
license = "Non-commercial"
3. Scope of Impact
3.1 Behavioral Breakdown
Main Menu → Online Updater → Core Downloader- Current state: Lists a mix of both free and non-free emulator cores.
- With setting enabled: Filters out non-free cores dynamically.
3.2 Ecosystem Benefits
This addition bridges the gap for users of 100% free operating systems, allowing them to utilize RetroArch's core management features conveniently without compromising their system's software policy or requiring manual external vetting.
4. Downstream Distribution Strategy
Should this feature request be successfully implemented, the next step will be to formally petition the maintainers of various 100% free GNU/Linux distributions. Specifically, the goal is to ask them to configure their packaging pipelines so that the Show Free Content Only setting is activated by default within the retroarch package distributed through their official software repositories.
5. Actionable Roadmap: Filing New GitHub Issues for Upstream Metadata and Filtering
To address missing metadata and ensure complete compliance across all download channels, new GitHub issues should be submitted to the official RetroArch repositories. Specifically, these issues will request the following improvements:
- Add new
.infofiles containing proper license fields, as these.infofiles are currently missing for content downloaded via:- RetroArch:
Main Menu → Online Updater → Content Downloaderwhich downloads from https://buildbot.libretro.com/assets/cores/ - RetroArch:
Main Menu → Online Updater → Core System Files Downloaderwhich downloads from https://buildbot.libretro.com/assets/system/
- RetroArch:
- Modify the application to automatically filter out and exclude any non-free content when users navigate these specific menus.
Upstream issue
- Trisquel GNU/Linux: retroarch: Hide "Core Downloader" to prevent nonfree cores from being installed
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with RetroArch's Online Updater, Core Downloader, and Updater Settings entry points, then inspect the core .info metadata such as bsnes_libretro.info and snes9x_libretro.info and the related libretro-super issue. Done means a configurable free-content-only filter excludes non-free cores from the Core Downloader, with the proposed hard-coded packaging behavior and related downloader scope resolved.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- c
- Domain
- frontend
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100