Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rewrite, improve, update and correct the documentation #102

Draft
wants to merge 18 commits into
base: master
Choose a base branch
from

Conversation

Korne127
Copy link

@Korne127 Korne127 commented Aug 5, 2024

This is still a work in progress. However, I now got most of the major changes done, and since I might still take a while for the rest and am a bit afraid that someone else might want to start doing the same, I decided to open the current state as a draft pull request.


When I started looking into how to deploy AppImages a few weeks ago, I had big troubles understanding the documentation:

  • There was very much duplicated information which made it hard to find a specific detail that was only mentioned in one of the duplicated parts and generally to read through the documentation.

  • There was very much outdated information, from commonly recommending the deprecated linuxdeployqt tool, to the deprecated AppRun.c file, not even mentioning the new go-appimagetool, many invalid and outdated links, old Linux versions (one even being eleven years (!) old), etc.

  • The same terms were sometimes used for very different concepts, e.g. "manual packaging" for

    1. manually creating the entire AppDir that's then converted into an AppImage by appimagetool,
    2. manually creating the AppDir structure to use with higher level tools that include the shared libraries and
    3. giving the path of executables, desktop and icon files to linuxdeploy via command line arguments

    which obviously led to much confusion.

  • There was much conflicting information, mostly due to duplicated information, which has been outdated in some parts and updated in others, or the same terms used for different concepts.

  • There was missing information that was expected in other places, e.g. which resolutions are valid for icon files.

  • There was information scattered across places or in the wrong places, e.g. several pages contained some details about desktop files, but no page in the packaging guide clearly explained everything related to it and how to create them.

  • There were weird structure decisions, e.g. placing a software overview, mostly about low-level software that the average user should not use, in the introduction section instead of the reference section.

  • There was no single detailed comparison about the differences between the individual tools and approaches to create an AppImage, resulting in a lot of confusion which one(s) to use and how to create AppImages.

  • Some things were just explained badly, e.g. the pages about using make to create an AppDir lacked the most important information on how to do so, and the linuxdeploy page made it very hard to understand how to use it without make.

I think much of this is not that noticeable when you know your way around AppImages well enough. Sure, you might notice many things aren't up to date and that some things are duplicated, but I think you can generally read through it, understand what's meant, fill in the missing information and don't really realize how hard it is to understand all of that if you don't have that prior experience and knowledge.

I also think that much of this comes from the fact that the AppImage ecosystem has evolved a lot in the past years. There are many things that have considerably improved, e.g. going from having to package the entire AppDir by yourself and use appimagetool directly, over tools like linuxdeployqt that package all shared libraries from an existing AppDir structure, to linuxdeploy, which can get all necessary data with command line arguments and requires no pre-existing structure.
I also noticed that some old parts were expecting the reader to repackage existing packages, probably out of a time where AppImages haven't been commonly used, while other parts were mainly directed to the application authors.
I can imagine that the focus was on developing better solutions and improving the AppImage packager and user experience. And it's understandable that, with many parts duplicated, you don't always find the time to really go through the documentation and update everything correctly when something changes, slowly leading to a worse documentation state.

All of this is to say, I hope that you don't take this as an insult. I do appreciate the work you put into AppImages and the whole ecosystem and I understand that the focus has been on other things, but I do think that the documentation is in a bad state.

And this also led to frustration by other users. See for example https://discourse.appimage.org/t/does-appimage-include-all-shared-library-dependencies-by-default/509/6, where someone is frustrated with the documentation as they don't find a guide on how to automatically package shared libraries, or ruffle-rs/ruffle#12401, where someone didn't even know about the other available tools that help with this, which is the core thing the documentation should explain in my opinion.


Therefore I started to rewrite, improve, update and correct the documentation.
I started with the linuxdeploy page, which I had personally had a lot of struggle with to understand previously. From there on, I worked my way through the documentation (mostly the packaging guide), and went on to improve the structure, add a comparison of creation tools & approaches, deliver better explanations, update the outdated information and add additional information.

Here is an overview of my changes:

New sections that contain collected information

  • One unified section for all AppImage creation tools has been added.
    • Its main page contains one central table which lists the advantages, disadvantages and differences between the different methods.
    • It contains one page for each AppImage creation tool (some of which have been collected from many places throughout the documentation), explaining how to use it.
      • This also means that a new page for go-appimagetool has been added (it had previously not been mentioned).
      • Much additional information and better explanations have also been added to most of these pages.
      • The linuxdeploy page has been rewritten, improved and updated. It’s now much easier to understand how to use it.
    • The section also contains a better overview on what the AppImage creation tools actually do, which helps to understand why they should be used.
  • The information about the different packaging approaches (packaging as application author and repackaging existing binaries) has been collected in one section and rewritten, with additional information and a better explanation of the differences between the approaches.
  • One unified section on how to create the AppDir structure has been added.
    • Its main page provides an overview of the different ways to do it, the reason why one would want to do it and the additional possibility of manually packaging everything.
    • This also means that the concepts of manually creating the AppDir structure (to give it to a tool) and manually packaging everything (without a tool) have been separated and the difference is well-explained.
  • A new page about desktop entry files and icon files has been created. Information from several files has been merged together with much additional information.

Other sections that have been rewritten

  • The packaging automation section (formerly called hosted services) has been rewritten and updated.
    • Its main page now contains a new introduction about the advantages of packaging automation and why it should be used.
    • A new tutorial on GitHub Actions has been added to it.
    • The existing (outdated) parts have been updated.
  • The sections about which dependencies are bundled and which Linux distribution version the binaries should be compiled on in the concept page have been partially rewritten.
    • Misleading headlines have been changed and a better explanation of why AppImages should usually be compiled on older systems, and which exceptions and other options exist, has been added.
  • The packaging guide introduction has been rewritten to give a better introduction of what the guide explains.

Updated & improved sections

  • The AppDir specification has been updated.
    • Information about the AppRun file has been updated and added.
    • More information about the desktop entry and icon files has been added.

Split up sections

  • The software overview section has been split up. Most of it has been moved into the reference section, but some parts moved into other sections in which the respective software had already been mentioned. A better introduction has been added to it as well.

Minor improvements

  • The table formatting has been improved. Tables now have automatic line breaks (instead of scroll bars) and are easier to edit. (This is minor for the existing documentation, but the overview table wouldn’t have been possible without it).
  • Many other sections and pages that haven’t been explicitly mentioned have gotten some improvements and additional information.

For more details, each commit contains an in-depth message of all changes I have made within it.

Also, this pull request documents the features introduced in linuxdeploy/linuxdeploy#288, so it depends on that being merged.


As I said in the beginning, this is currently a work in progress. I still have a lot of todos and there are quite some sections I haven't really gone through yet at all.
But I still thought that now is a good time to create this draft PR, as most of the major restructuring is done and it's easy to see my desired end result. I'll probably still take a while to finish this (especially as I basically worked the entire last week from waking up until going to bed on this, and will continue slower as it's now known that I'm working on it).

Previously, tables with much text in a row had had scroll bars to scroll through all the text instead of automatic line breaks.
This is due to an open issue in the sphinx read the docs theme (readthedocs/sphinx_rtd_theme#1505).
A workaround has been implemented to fix this until the issue is resolved.

Additionally, grid tables have been replaced by list tables. This allows explicitly setting the width of the columns and makes it easier to change the tables in the future.
The linuxdeploy user guide has been rewritten, improved and updated.

In general, the explanation of how linuxdeploy can be used has been massively improved. There is now a clear explanation of the two distinct ways and its easier to understand how to use linuxdeploy without make. The misleading term "Manual packaging" has been removed as well.

Additionally, there are many smaller improvements, namely:
- Documentation on the command line arguments --appstream-file, --appdir, --plugin and --output has been added. (This depends on linuxdeploy/linuxdeploy#288 being merged).
- The introduction has been improved and now explains the core ideas better.
- Additional information about the command line arguments --icon-file and --executable as well as about plugins has been added (and wrong information has been corrected).
- An incorrect link to a different section has been corrected.
- TODOs about further improvements that also affect other sections have been added.
The packaging guide overview has been rewritten, improved and updated.
A table that gives an overview of the different methods to create AppDirs and the corresponding AppImages has been added. It lists their advantages, disadvantages and differences.

Additionally, TODOs to remove the (outdated) rest of the overview and to make a section for each AppImage creation method have been added.
Information about each appimage creation tool has been collected, created and unified into one folder.

The linuxdeploy and pkg2appimage files have been moved into the new folder. They have been improved: Additional information from the new overview has been included and the introductions have been improved.
The appimage-builder and electron-builder sections in the old overview have been removed and replaced by new files in the new folder. They have also been improved with additional information from the new overview.
A file about go-appimagetool has been created. It contains information from the new overview as well as further information on how to use it.

In the overview, links to these new files have been added (as well as a TODO to make these links more consistent). Additionally, a minor part of the new overview table has been improved.

These files have been (preliminarily) added to the packaging guide toctree. The already existing files have been removed from their respective prior toctrees.
The information about the different packaging approaches (packaging as application author and converting existing packages) has been rewritten and collected in a single section. This section has been placed in the overview.

The new section replaces the previous Packaging from source and Converting existing binary packages sections. It contains all relevant information from them as well as additional information and a better explanation of the differences between the approaches.

Other files about converting binary packages and packaging from source have been removed as well. A TODO has been added to the remaining Packaging native binaries file to move everything relevant (about linuxdeploy or creating the AppDir structure) into new files and then removing it as well. Additionally, a link to one of the removed sections has been replaced.
The packaging automation section (formerly called hosted services) has been rewritten, improved and updated.

The (previously almost empty) main page on packaging automation has been rewritten from scratch.
A new introduction on the advantages of packaging automation and why it should be used instead of manual packaging has been written.
Additionally, a new section about GitHub Actions with an extensive example has been added.
The sections about Travis CI and OBS in the overview have been removed and their information has been moved into the main packaging automation page, together with additional information about the history and state of Travis CI.
The Travis CI page has been removed. Its convenience functions section has been moved to the main packaging automation page as well.

The redundant section about Travis CI in the Packaging native binaries page has also been removed.

The Open Build Service page has been improved as well:
- Outdated parts (e.g. an almost eleven years (!) old openSUSE version or non-existing links) have been updated.
- A recommendation related to testing has been moved into the testing section, which has been linked. The testing section has been updated accordingly.
- Grammar mistakes and indentation errors have been fixed.
- TODOs to check whether the section is still up to date have been added.

Additionally, the section about manual AppDir creation in the overview has been removed as all of its content is duplicated and has been included in the new overview table.
All information about creating the AppDir structure has been collected, rewritten and improved and moved into a new Creating the AppDir structure section.

The section consists of a main page that provides an overview of the different ways to do it, the reason why one would want to do it and the additional possibility of manually packaging everything. It also contains new sub-pages about 1. manually creating the AppDir structure, 2. Using make to create the AppDir structure and 3. manually packaging *everything*.
Links to this new section have been added on several pages.

The Manual packaging page has been removed. It had previously mixed the information about manually creating the AppDir structure (to give it to a tool) and manually packaging everything (without a tool). This has been fixed; all information from it has been separated and put (rewritten and improved) into the new section.
The Packaging native binaries page has been removed as well. Information about creating the AppDir structure has been moved into the new section, information about linuxdeploy has been moved into its section (both rewritten and improved) and information about desktop entries has been added to a new todo file.

The linuxdeploy page has been majorly updated as well:
The parts about make have been removed as that's explained in the new section. To account for that, the explanation of --appdir has been improved.
Sections on how to download linuxdeploy, on the appimage plugin variables and on an iterative workflow have been added.
The page has generally been improved and additional information has been added.

Additionally, the overview has been improved:
Its introduction has been improved to better explain what the AppImage creation tools actually do. It now also mentions AppDir structure creation and links to the new section. Furthermore, it now provides more information on how to include additional resources.
A new page about desktop entry files and icon files has been created.

To do that, the Desktop information page in References, as well as the temporary desktop file file, have been removed and replaced by it. Their content has been rewritten and moved into the new page, together with much additional information.

The linuxdeploy page, AppDir specification and Manually creating an AppDir section have all been improved as well with additional information and new links (mostly to the new sections).
The different pages about the AppImage creation tools have been moved into a common section.
They've been dereferenced from the packaging guide toctree and moved into a new section toctree.

The previous overview page has been renamed into AppImage creation tools and now serves as the main page of this new section. It has also been adapted accordingly (with minor text changes, changed reference names and a toctree).
Other pages have been adapted to use the new reference and section names.

Additionally, some formatting mistakes have been fixed and the desktop entry & icon files section has been slightly improved.
The packaging guide introduction has been rewritten and improved.
Among other things, additional information about the content of the packaging guide has been added.
The AppDir specification has been updated, mostly about the AppRun file, but also about desktop entry and icon files.
The AppRun section from the software overview page has been moved into the AppDir specification and has been updated.
Other additional information has been added to it as well. The wording has also been improved.

Other related pages have been updated accordingly:
The page about manually creating an AppDir structure has been updated in regards to AppRun, whose section has been removed.
The page about manually creating the entire AppDir has also been updated accordingly. A new section about the rest of the AppDir structure has been added and the specification has been linked.
Additional information has been added to both pages, and their wording has been improved.
The software overview page in the introduction section has been split up, partially moved into the references section and rewritten.

The sections about appimaged and AppImageLauncher have been moved into the desktop integration tool section and linked. The corresponding subsections there (that had already existed) have been updated accordingly with more information and improved wording.

The section about the NX Software center has been moved into the FAQ. The how to download AppImages part has been improved with additional information, among other things about AppImageHub.

The sections about linuxdeploy and linuxdeployqt have been removed, and the AppImage creation tool section has been linked instead.

The rest of the page has been moved into the references section (whose page order has been improved).
A new introduction, which explains the purpose of the page and links to other relevant sections, has been written. Outdated parts have been updated and additional information has been added. The wording has also been improved and made more consistent.
The concept page has been improved:
Additional information has been added and the wording and spelling has been improved.
But most importantly, the sections about which dependencies are bundled and which Linux distribution version the binaries should be compiled on, have been greatly improved and partially rewritten. Misleading headlines have been changed and a better explanation of why AppImages should usually be compiled on older systems, and which exceptions and other options exist, has been added.

The AppImage creation tools section (both the main page and the specific tool pages) has been updated and corrected accordingly.
Information about which distribution versions to compile on has been added to the pages and wrong & unnecessary information has been removed.
@Samueru-sama
Copy link

I support this, recently there was this discussion asking about the static and deploy everything tools: https://github.com/orgs/AppImage/discussions/1343

Btw a small nitpick, the part that says:

can also include these expected core libraries. This considerably increases the AppImage size (by at least 30MB)

Can be changed to say instead by at least 10 MiB and I've found cases where it is even less than that.

@Korne127
Copy link
Author

@Samueru-sama I'm sorry for the late answer, I was really busy the last days.
Thanks for the notice! I'll definitely update the documentation about the new / different runtimes, especially as currently, all information about the different runtimes is not well documented and rather hard to understand. As I said, this is still a work in progress, and while I took a pause, I'll continue on this soon. Thanks for bringing it to my attention. :)

On the other part, I took that information from the appimage-builder documentation. But thanks for the feedback; I'll change the part to say that it's usually a big increase, but can also be smaller, depending on which libraries are called.

@Korne127
Copy link
Author

@probonopd Hey, did you see this PR yet? I noticed that you were also working on the documentation in #103. While luckily, this doesn't interfere with my PR as it's a new section, I would have expected some kind of reaction or response to this.

@probonopd
Copy link
Member

Hi @Korne127, thanks for this massive undertaking.

Hi @TheAssassin is there any way to get this documentation rendered out for easier review (without overwriting the current one, s that I can open them side by side)?

@probonopd
Copy link
Member

Hi @Korne127

This considerably increases the AppImage size (by at least 30MB)

Where did you get this number from? If I remember correctly, the results i got were around 1/3rd that number. How did you test?

@Korne127
Copy link
Author

@probonopd One way to look at the result would be to just clone my version and execute it:

git clone https://github.com/Korne127/docs.appimage.org.git
cd docs.appimage.org
mkdir venv
python3 -m venv venv
source venv/bin/activate
pip3 install -r requirements.txt
make html

And then the files are build in build/html, you just need to double-click them to open in a browser. I also discovered there is a make.sh script doing the (I think) five last steps for you.

@Korne127
Copy link
Author

Korne127 commented Aug 16, 2024

Where did you get this number from?

I took them from the appimage-builder documentation. If the numbers are wrong and your tests consistently produced different results, I'll adapt it.

(But keep in mind this is still a WIP and I haven't gone over some pages at all yet. I also plan to go through the project READMEs and updated them accordingly, e.g. if they link to a now unexacting link in the documentation.)

@probonopd
Copy link
Member

Note to self,

sudo apt-get update
sudo apt-get install -y python3-pip python3.10-venv git
git clone https://github.com/Korne127/docs.appimage.org.git
cd docs.appimage.org
mkdir venv
python3 -m venv venv
source venv/bin/activate
pip3 install -r requirements.txt
make html
open html/index.html

works nicely for me. Maybe we should even document it ;)

The introduction section has been generally improved and updated:
- Spelling and grammar mistakes have been corrected.
- Section links have been added in multiple places.
- A TODO about duplicated information has been added.
- Outdated information about distributions, CIs and the excludelist has been corrected. Outdated informations about the way to create AppImages with the AppImage creation tools has been updated as well.
The motivation and advantages pages in the introduction section have been merged into a new motivation-advantages page, which has been rewritten.
The new page now contains the information of both previous pages, which had the same structure and a lot of duplicated information.

Some parts in the previous pages have hidden key parts among big amounts of less important information. This has been fixed: The new page has been rewritten to highlight the important AppImage advantages in short paragraphs, putting them before other secondary information.

The index has been changed accordingly and a new section link has been added.
The former Running AppImages page in the user guide section has been split up into a new Inspect AppImage content page and a new Desktop integration page.
This has been done because the former page didn't contain information on how to run AppImages (those had been moved into the Quickstart page much earlier), but just information on these two completely independent topics.

The Inspect AppImage content page has been updated to include the ways to inspect the content of an AppImage safely with external tools. It has also been rewritten and regrouped to better explain the different methods, their advantages and disadvantages.

The Desktop integration page has been rewritten to better explain the concept of desktop integration, what exactly the individual tools do and their differences. An additional download link has been added as well.

Additionally, the config has been adapted to allow for double dashes to be displayed in headlines, and the index has been changed accordingly.
The FUSE Troubleshooting page has been improved, corrected and rewritten.
The structure has been greatly improved: Similar sections have been merged, the order of the sections have been improved, important information has been added to the overview, duplicated information has been removed, a part in a wrong place has been moved to the right place and text styles have been unified.
The content has been improved as well: The texts have been shortened and made easier to understand, and some explanations have also been improved.
Additionally to that, wrong information has been corrected, additional information has been added and outdated information has been updated. This has been done by adding all important information from the AppImage wiki (https://github.com/AppImage/AppImageKit/wiki/FUSE) to this page.
All user guide pages have been improved, updated and corrected:

The texts in the user guide pages have been massively improved. Among other things, information has been specified, things have been explained in a better and more detailed way, wording has been improved, links to other sections with more information have been added, sections with duplicated information have been merged and the overview and content descriptions have been improved & updated to contain everything.
Several other things like terminal commands have been improved as well to always work.

Additionally to that, the macOS similarity page has been updated with better comparisons that are easier to understand for normal end users, a link to the AppImage creation tools has been added and wrong information has been corrected.

Several substitutions have also been added to reduce duplicated texts; they replace previously existing similar or worse texts.

Furthermore, spelling, grammar and formatting errors have been fixed, outdated links have been updated and credits have been added.
@Korne127
Copy link
Author

I finally continued on this, and went through the whole introduction and user guide pages and improved, rewrote, updated and corrected them all. I've spent most of my free time in the past week in that process. 😅 (I also merged two pages that basically provided the same kind of information in the same structure with big parts duplicate.) To view the exact changes and things I did, see the commit messages.
I think I'm about done 80%? There is still quite something on my to do list, I've gone through most pages now. Hopefully I'll finish this sometimes soon, because I think this is desperately needed.

Also, I noticed something important: The FUSE page in the AppImage wiki (https://github.com/AppImage/AppImageKit/wiki/FUSE) has generally the same structure behind its documentation page, but has been much more up-to-date (although it also missed some information).
Nevertheless, I think that there are many places in which things are documented: The AppImage wiki, the official documentation, the README files of many projects, other wikis that exist for these projects, etc. And because of that, information just gets updated in one place, which leads to more and more wrong or outdated information piling up.
I think we should place all up-to-date information in one place again (that's essentially what this PR does), and then remove the other wikis / keep their content to a minimum and always link to that one documentation. So when it gets updated, no matter where someone initially searches, they always get the full up-to-date information.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants