{"id":37830,"date":"2019-10-31T22:20:00","date_gmt":"2019-10-31T19:20:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/koe-chto-eshhe-pakety-prilozhenij-haiku\/"},"modified":"2019-10-31T22:20:00","modified_gmt":"2019-10-31T19:20:00","slug":"koe-chto-eshhe-pakety-prilozhenij-haiku","status":"publish","type":"post","link":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/koe-chto-eshhe-pakety-prilozhenij-haiku","title":{"rendered":"Something else: Haiku application packages?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Something else: Haiku application packages?\" src=\"\/wp-content\/uploads\/2019\/09\/90604411e96ca7ef7b2d7dccac374d4e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>TL;DR<\/strong>: can Haiku receive proper support for application packages, such as application catalogs (like <code>.app<\/code> on Mac) and\/or application images (Linux <code>AppImage<\/code>)? I think this would be a worthy addition that is easier to implement compared to other systems, since most of the infrastructure is already in place.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/461141\/\">A week ago<\/a><\/noindex> I discovered Haiku, a surprisingly good system. And since I've been interested in application catalogs and images (inspired by the simplicity of Macintosh) for a long time, it\u2019s no wonder that the idea popped into my head\u2026<\/p>\n<p><\/p>\n<p>For full disclosure: I am the creator and author of AppImage, a Linux application distribution format aimed at the simplicity of Mac, giving complete control to application authors and end-users (if you want to know more\u2014see <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/AppImage\">wiki<\/a><\/noindex> and <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.appimage.org\/\">documentation<\/a><\/noindex>).<\/p>\n<p><\/p>\n<h2 id=\"chto-esli-my-sdelaem-appimage-dlya-haiku\">What if we create AppImage for Haiku?<\/h2>\n<p><\/p>\n<p>Let\u2019s ponder a bit, purely theoretically: what needs to be done to get <noindex><a rel=\"nofollow\" href=\"https:\/\/appimage.org\/\">AppImage<\/a><\/noindex>, or something similar, on Haiku? There\u2019s no rush to create something right away, as the system currently available in Haiku works surprisingly well, while an imagined experiment would still be interesting. It also showcases the sophistication of Haiku compared to Linux desktop environments, where such things can be incredibly difficult (I have the right to say this: I've been struggling with debugging for 10 years).<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Something else: Haiku application packages?\" src=\"\/wp-content\/uploads\/2019\/09\/f72209cb7c70702e614729f3b250c1b8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>On Macintosh System 1, each application was a separate file, &laquo;managed&raquo; in Finder. Using AppImage, I'm trying to recreate that same user experience on Linux.<\/em><\/p>\n<p><\/p>\n<p>First of all, what is AppImage? It\u2019s a system for the distribution of third-party applications (for example, <noindex><a rel=\"nofollow\" href=\"https:\/\/ultimaker.com\/software\/ultimaker-cura\">Ultimaker Cura<\/a><\/noindex>), allowing applications to be released whenever and however they want: there is no need to know the intricacies of various distributions, build policies, or build infrastructure, no need for support maintainers, and they don\u2019t dictate to users what (not) to install on their computers. AppImage should be understood as something akin to a package for Mac formatted <code>.app<\/code> inside a disk image <code>.dmg<\/code>. The main difference is that applications are not copied but remain within the AppImage at all times, similar to how Haiku packages <code>.hpkg<\/code> are mounted and never installed in the traditional sense.<\/p>\n<p><\/p>\n<p>AppImage has gained some appeal and popularity over its more than 10 years of existence: Linus Torvalds himself publicly endorsed it, and popular projects (for example, LibreOffice, Krita, Inkscape, Scribus, ImageMagick) have adopted it as the primary method for distributing continuous or nightly builds without interfering with users' installed or uninstalled applications. However, desktop environments and Linux distributions often still cling to the traditional, centralized distribution model based on packages and\/or promote their own corporate business and\/or engineering programs. <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Flatpak\">Flatpak<\/a><\/noindex> (RedHat, Fedora, GNOME) and <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Snappy_%28%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D0%B0%D0%BC%D0%B8%29\">Snappy<\/a><\/noindex> (Canonical, Ubuntu). It reaches <noindex><a rel=\"nofollow\" href=\"https:\/\/blogs.gnome.org\/hughsie\/2019\/07\/12\/gnome-software-in-fedora-will-no-longer-support-snapd\/\">the point of absurdity.<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h3 id=\"kak-vse-rabotaet\">How it works<\/h3>\n<p><\/p>\n<ul>\n<li>Each AppImage contains 2 parts: a small executable ELF (also known as <code>runtime.c<\/code>), followed by a filesystem image. <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/SquashFS\">SquashFS<\/a><\/noindex>.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Something else: Haiku application packages?\" src=\"\/wp-content\/uploads\/2019\/09\/c48bdc61fb08cdd9d2a2be10d4cfa5a5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>The SquashFS filesystem contains the payload in the form of the application and everything necessary to launch it, which cannot really be considered part of the default installation for every sufficiently fresh target system (Linux distribution). It also includes metadata, such as the application name, icons, MIME types, etc.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Something else: Haiku application packages?\" src=\"\/wp-content\/uploads\/2019\/09\/57285196436aaa5468f544942b39a608.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>When launched, the runtime uses FUSE and squashfuse to mount the filesystem, after which it processes the execution of a specific entry point (the so-called AppRun) inside the mounted AppImage.<br \/>\nThe filesystem is unmounted after the process completes.<\/li>\n<\/ul>\n<p><\/p>\n<p>Seems simple enough.<\/p>\n<p><\/p>\n<p>But these things complicate it all:<\/p>\n<p><\/p>\n<ul>\n<li>With such a variety of Linux distributions, nothing can responsibly be called &laquo;a part of the default installation for every fresh target system&raquo;. We are addressing this issue by building <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/AppImage\/pkg2appimage\/blob\/master\/excludelist\">excludelist<\/a><\/noindex>, which allows us to determine what will be packaged in the AppImage and what needs to be sourced elsewhere. However, we sometimes miss the mark, even though everything generally works well. For this reason, we recommend package creators to test AppImages on all target systems (distributions).<\/li>\n<li>Payload applications must be relocatable within the filesystem. Unfortunately, many applications have hardcoded absolute paths to resources in <code>\/usr\/share<\/code>. This needs to be fixed somehow. Additionally, we need to either export <code>LD_LIBRARY_PATH<\/code>, or fix <code>rpath<\/code> for the loader to locate the associated libraries. The first method has its drawbacks (which are circumvented through complex methods), while the second is simply cumbersome.<\/li>\n<li>The biggest UX trap for users is that they need to <noindex><a rel=\"nofollow\" href=\"https:\/\/discourse.appimage.org\/t\/how-to-run-an-appimage\/80\">set the executable bit<\/a><\/noindex> the AppImage file after downloading. Believe it or not, for some this is a real barrier. The need to set the executable bit is cumbersome even for experienced users. As a workaround, we suggested installing a small service that monitors AppImage files and sets their executable bit. In its pure form, it's not the best solution, as it won't work &laquo;out of the box&raquo;. Linux distributions don't provide this service, hence users have it &laquo;out of the box&raquo; all wrong.<\/li>\n<li>Linux users expect that a new application will have an icon in the launch menu. You can't tell the system: &laquo;Look, there's a new application, let's get to work&raquo;. Instead, according to the XDG specification, you need to copy the file <code>.desktop<\/code> to the appropriate location in <code>\/usr<\/code> for system-wide installation, or in <code>$HOME<\/code> for individual use. Icons of specific sizes, according to the XDG specification, need to be placed in designated locations in <code>usr<\/code> or <code>$HOME<\/code>, after which you must run commands in the working environment to update the icon cache, or hope that the desktop environment will recognize and automatically discover everything. The same goes for MIME types. As a workaround, the same service is suggested, which, in addition to setting the executable flag, will copy icons and other relevant files from AppImage to the required locations according to XDG when present. Upon deletion or relocation, the service is expected to clean up everything. Of course, there are differences in behavior across different desktop environments, in graphic file formats, their sizes, storage locations, and methods of cache updating, which creates the problem. In short, this method is a workaround.<\/li>\n<li>If the above is not enough, there is still no AppImage icon in the file manager. The Linux community has yet to reach a decision about the implementation of elficon (despite <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.kubuntu.org\/ELFIconSpec\">sparked<\/a><\/noindex> and <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/pld-linux\/elficon\">implementations<\/a><\/noindex>), making it impossible to embed the icon directly in the application. Thus, applications in the file manager do not have their own icons (regardless of whether it's AppImage or something else); they are only present in the launch menu. As a workaround, we use thumbnails\u2014 a mechanism originally designed for desktop managers to display reduced images as previews of graphic files. Consequently, the service for setting the executable bit also functions as a &laquo;thumbnailer&raquo;, creating and writing thumbnail icons to the appropriate places. <code>\/usr<\/code> and <code>$HOME<\/code>. This service also cleans up if the AppImage is deleted or moved. Because each desktop manager behaves slightly differently, for example, in the formats it accepts for icons, sizes, or locations, this can be quite painful.<\/li>\n<li>The application simply crashes during execution if errors occur (for instance, if there is a library that is not part of the base system and not included in the AppImage), and no one informs the user in the GUI about what is happening. We started to work around this by using <noindex><a rel=\"nofollow\" href=\"https:\/\/developer.gnome.org\/notification-spec\/\">notifications<\/a><\/noindex> on the desktop, which means we need to catch errors from the command line, convert them into user-friendly messages, and then display them on the desktop. And of course, each desktop environment handles these a little differently.<\/li>\n<li>At the moment (September 2019, \u2014 translator's note), I have not found a simple way to tell the system that the file <code>1.png<\/code> should be opened with Krita, and <code>2.png<\/code> \u2014 with GIMP.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Something else: Haiku application packages?\" src=\"\/wp-content\/uploads\/2019\/09\/347e54772a7312e27c83fef68be98e66.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>The storage place for cross-desktop specifications used in <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/GNOME\">GNOME<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/KDE\">KDE<\/a><\/noindex> and <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Xfce\">Xfce<\/a><\/noindex> is freedesktop.org. <\/em><\/p>\n<p><\/p>\n<p>Achieving a level of sophistication that is deeply integrated into the Haiku desktop environment is hindered, to say the least, due to the specifications <noindex><a rel=\"nofollow\" href=\"https:\/\/www.freedesktop.org\/wiki\/\">XDG from freedesktop.org<\/a><\/noindex> for cross-desktop, as well as implementations of desktop managers based on these specifications. For example, take a common system icon for Firefox: evidently, the authors of XDG did not consider that a user might have multiple versions of the same application installed.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Something else: Haiku application packages?\" src=\"\/wp-content\/uploads\/2019\/09\/d9743766c183f78e68a2669b09aa48d9.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Icons for different versions of Firefox.<\/em><\/p>\n<p><\/p>\n<p>I was curious about what the Linux world could learn from Mac OS X to avoid pitfalls in system integration. If you have the time and are working on something like this, definitely check out what Arno Gurdol, one of the early engineers of Mac OS X, said:<\/p>\n<p><\/p>\n<blockquote><p>We wanted the installation of the application to be as simple as dragging the application icon from somewhere (server, external drive) to your computer's disk. All information, including icons, version, processed file type, URL scheme type that the system needs to know for handling the application, is saved in the application package. This also includes information for 'centralized storage' in the Icon Services and Launch Services database. To maintain application performance, they are 'discovered' in several 'well-known' locations: in the system and user Applications directory, as well as automatically in some other places if the user navigates to the directory containing the application in Finder. In practice, this has worked very well.<\/p><\/blockquote>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/qQsnqWJ8D2c\">https:\/\/youtu.be\/qQsnqWJ8D2c<\/a><\/noindex><br \/>\n<em>Apple WWDC 2000 Session 144 \u2014 Mac OS X: Packaging Applications and Printing Documents.<\/em><\/p>\n<p><\/p>\n<p>There is nothing similar in the infrastructure of Linux work environments, so we seek workarounds for structural limitations in the AppImage project.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Something else: Haiku application packages?\" src=\"\/wp-content\/uploads\/2019\/09\/a2550cb690d92d1aeb4fccff7e7fa57b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Is Haiku rushing to help?<\/em><\/p>\n<p><\/p>\n<p>Moreover, Linux platforms as the basis for work environments are typically so under-specified that many things that would be straightforward in a consistent system with a full stack are frustrated by fragmentation and complexity in Linux. I dedicated an entire presentation to issues related to the Linux platform for work environments (experienced developers confirmed: this will remain the case for a very long time).<\/p>\n<p>\n<center><div class=\"youtube-placeholder\" data-id=\"SQ8OXf7o6UA\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/SQ8OXf7o6UA\/hqdefault.jpg\" alt=\"Play video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<p><em>My presentation on issues in Linux work environments in 2018<\/em><\/p>\n<p><\/p>\n<p>Even Linus Torvalds acknowledged that the idea of work environments failed precisely because of fragmentation.<\/p>\n<p><\/p>\n<p>It's nice to see Haiku!<\/p>\n<p><\/p>\n<h2 id=\"s-haiku-vse-stanovitsya-potryasayusche-prostym\">With Haiku, everything becomes incredibly simple.<\/h2>\n<p><\/p>\n<p>While the naive approach to 'porting' AppImage to Haiku involves simply trying to build (mainly runtime.c and the service) its components (which might even be possible!), it won't bring much benefit to Haiku. Most of these issues are already resolved in Haiku and conceptually justified. Haiku provides exactly the building blocks for system infrastructure that I have long searched for in Linux work environments and couldn't believe weren't there. Specifically:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Something else: Haiku application packages?\" src=\"\/wp-content\/uploads\/2019\/09\/29f583bd24bd06cd67311a5087243639.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Believe it or not, but many Linux users struggle with this. On Haiku, everything is done automagically!<\/em><\/p>\n<p><\/p>\n<ul>\n<li>ELF files without the executable bit automatically acquire it on double-clicking in the file manager.<\/li>\n<li>Applications can have built-in resources, such as icons, that are displayed in the file manager. There's no need to copy a bunch of images into special icon directories, so there's no need to clean them up after deleting or moving the application.<\/li>\n<li>There's a database to link applications with documents, eliminating the need to copy any files for that purpose.<\/li>\n<li>By default, libraries are searched for in the lib\/ directory next to the executable file.<\/li>\n<li>There are no numerous distributions and desktop environments; everything that works, works everywhere.<\/li>\n<li>There is no separate launcher module that differs from the Applications directory.<\/li>\n<li>Applications do not have absolute paths built into their resources; there are special functions to determine the location at runtime.<\/li>\n<li>The idea of compressed filesystem images is implemented: this is any hpkg package. They are all mounted by the kernel.<\/li>\n<li>Each file is opened by the application that created it, unless explicitly stated otherwise. How cool is that!<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Something else: Haiku application packages?\" src=\"\/wp-content\/uploads\/2019\/09\/335fedea2cc70e9d9e0c8f3dbcd41560.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Two png files. Note the different icons showing that they will open with different applications on double-click. Also, pay attention to the 'Open with:' drop-down menu, where the user can select a specific application. How simple!<\/em><\/p>\n<p><\/p>\n<p>It seems that many of the hacks and workarounds necessary for AppImage on Linux become unnecessary on Haiku, which, at its core, is simple and elegant, allowing it to meet most of our needs.<\/p>\n<p><\/p>\n<h2 id=\"nuzhny-li-haiku-pakety-prilozheniy-v-konce-koncov\">Do Haiku application packages really need to exist in the end?<\/h2>\n<p><\/p>\n<p>This leads to a big question. If creating a system like AppImage on Haiku turned out to be significantly easier than on Linux, would it be worth pursuing? Or does Haiku with its hpkg package system effectively eliminate the need for such an idea? Well, to answer that, we need to look at the motivation for the existence of AppImages.<\/p>\n<p><\/p>\n<h3 id=\"vzglyad-so-storony-polzovatelya\">User Perspective<\/h3>\n<p><\/p>\n<p>Let's consider our end user:<\/p>\n<p><\/p>\n<ul>\n<li>I want to install an application without prompting for an administrator (root) password. <em>On Haiku, there is no concept of an administrator; the user has full control, as it is a personal system!<\/em> (In principle, this could also be imagined in multi-user mode; I hope the developers maintain simplicity)<\/li>\n<li>I want to get the latest and best versions of applications without waiting for them to appear in my distribution (which most often means 'never', at least unless the whole operating system is upgraded). <em>In Haiku, this is 'solved' through floating releases. This means that there's the possibility of getting the latest and best versions of applications, but for that, you need to constantly update the rest of the system, effectively turning it into a 'moving target'.<\/em>.<\/li>\n<li>I would like to have multiple versions of the same application alongside each other, because you can't know what was broken in the latest version, or for example, as a web developer, I need to test my work under different browser versions. <em>Haiku solves the first problem but not the second. Updates can be rolled back, but only for the entire system; it is impossible (as far as I know) to run, for example, multiple versions of WebPositive or LibreOffice at the same time.<\/em><\/li>\n<\/ul>\n<p><\/p>\n<p>One of the developers writes:<\/p>\n<p><\/p>\n<blockquote><p>Essentially, the justification is this: the use case is so rare that optimizing for it does not make sense; handling it as a special case in HaikuPorts seems more than acceptable.<\/p><\/blockquote>\n<p><\/p>\n<ul>\n<li>I need to store applications where I like, not on the boot disk. I often run out of space on disks, so I need to connect an external drive or network folder to store applications (all versions that I have downloaded). If I connect such a drive, I need the applications to launch with a double click. <em>Haiku keeps old versions of packages, but I don't know how to move them to an external drive, or how to invoke applications from there afterward.<\/em><\/li>\n<\/ul>\n<p><\/p>\n<p>Developer's comment:<\/p>\n<p><\/p>\n<blockquote><p>Technically, this is already possible with the mount command. Of course, we will create a GUI for this as soon as we have enough interested users.<\/p><\/blockquote>\n<p><\/p>\n<ul>\n<li>I don't want millions of files scattered across the file system that I can't manage manually. I want one file per application that I can easily download, move, or delete. <em>On Haiku, this issue is resolved using packages <code>.hpkg<\/code>, which consolidate, for example, Python, from thousands of files into one. But if there is, for example, Scribus, which uses Python, then I have to deal with at least two files. And I need to ensure that I keep their compatible versions working together.<\/em><\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Something else: Haiku application packages?\" src=\"\/wp-content\/uploads\/2019\/09\/94ccb9d0b693b7411946b432f3d2f347.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Multiple versions of AppImages running side by side on one Linux<\/em><\/p>\n<p><\/p>\n<h3 id=\"vzglyad-so-storony-razrabotchika-prilozheniy\">A developer's perspective<\/h3>\n<p><\/p>\n<p>Let's look at it from a developer's perspective:<\/p>\n<p><\/p>\n<ul>\n<li>I want to have full control over the user experience. I don't want to depend on the operating system telling me when and how I should release applications. <em>In Haiku, developers can work with their own hpkg repositories, but this means that users will have to configure them manually, which makes this idea 'less appealing'.<\/em><\/li>\n<li>I have a download page on my website where I distribute <code>.exe<\/code> for Windows, <code>.dmg<\/code> for Mac, and <code>.AppImage<\/code> for Linux. Or maybe I want to monetize access to this page; anything is possible. What do I need to host there for Haiku? <em>Just a file <code>.hpkg<\/code> with dependencies only from HaikuPorts<\/em><\/li>\n<li>My software requires specific versions of other software. For example, it\u2019s known that Krita needs a patched version of Qt, or Qt that is precisely configured for a specific version of Krita, at least until the fixes are merged back into Qt. <em>You can package your own Qt for the application in the package <code>.hpkg<\/code>, but this is likely not welcomed.<\/em><\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Something else: Haiku application packages?\" src=\"\/wp-content\/uploads\/2019\/09\/7dcb146d08ebd570899d0d73b6517faa.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>A typical application download page. What should I put here for Haiku?<\/em><\/p>\n<p><\/p>\n<p>Will kits (existing as application directories like AppDir or <code>.app<\/code> in Apple style) and\/or images (in the form of heavily modified AppImages or <code>.dmg<\/code> from Apple) applications a useful addition to the workspace of Haiku? Or will it dilute the overall picture and lead to fragmentation, thus adding complexity? I'm torn: on one hand, the beauty and sophistication of Haiku lie in the fact that there's usually one way to do something, not many. On the other hand, much of the infrastructure for catalogs and\/or application packages is already in place, so the system calls for the remaining few percent to fall into place.<\/p>\n<p><\/p>\n<p>According to the developer <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/u\/f103a52f4b96?source=post_page-----1803a11f9748----------------------\">mr. waddlesplash<\/a><\/noindex><\/p>\n<p><\/p>\n<blockquote><p>On Linux they (<em>catalogs and application packages \u2014 note from the translator<\/em>) are likely a technical solution to system problems. At Haiku, we prefer to simply solve system issues.<\/p><\/blockquote>\n<p><\/p>\n<h2 id=\"a-vy-chto-dumaete\">What do you think?<\/h2>\n<p><\/p>\n<h3 id=\"prezhde-chem-otvetite\">Before you answer...<\/h3>\n<p><\/p>\n<p>Wait, let's do a quick reality check: in fact <em>application catalogs<\/em> \u2014 are already part of Haiku:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Something else: Haiku application packages?\" src=\"\/wp-content\/uploads\/2019\/09\/b9d3c8ce130d256bc645bd2ee28905a7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Application catalogs already exist on Haiku, but are not yet supported in the file manager.<\/em><\/p>\n<p><\/p>\n<p>They are just not as well-supported as, say, in the Macintosh Finder. How cool would it be if the QtCreator catalog had the name and icon 'QtCreator' in the top left corner, launching the application on double-click?<\/p>\n<p><\/p>\n<p>Earlier, I <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@probonopd\/historic-software-can-your-package-manager-handle-this-86563a46f8b5\">asked<\/a><\/noindex>:<\/p>\n<p><\/p>\n<blockquote><p>Are you sure you can run your decade-old applications today when all the app stores and distribution repositories might forget about them and their dependencies? Are you sure you can still access your current work in the future?<\/p><\/blockquote>\n<p>Is there already a response from Haiku, or can catalogs and application packages help here? I think they can.<\/p>\n<p><\/p>\n<p>According to Mr. waddlesplash:<\/p>\n<p><\/p>\n<blockquote><p>Yes, we have an answer to the question: we will simply support these applications as long as necessary until someone can properly read their file formats or provide one-to-one functionality. Our commitment to keeping BeOS R5 applications running on Haiku is direct proof of that...<\/p><\/blockquote>\n<p>That's right!<\/p>\n<p><\/p>\n<h3 id=\"kakoy-plan-deystviy-dolzhna-prinyat-haiku\">What course of action should Haiku take?<\/h3>\n<p><\/p>\n<p>I can envision a peaceful coexistence of hpkg, catalogs, and application images:<\/p>\n<p><\/p>\n<ul>\n<li>System software uses <code>.hpkg<\/code><\/li>\n<li>For the most frequently used software (especially for those needing scheduled floating releases), <code>.hpkg<\/code> (approximately 80% of all cases)<\/li>\n<li>Some are installed through <code>.hpkg<\/code>, applications will benefit from transitioning to an infrastructure with app catalogs (for example, QtCreator): they will be distributed as <code>.hpkg<\/code>, just like before.<\/li>\n<\/ul>\n<p><\/p>\n<p>mr. waddlesplash writes:<\/p>\n<p><\/p>\n<blockquote><p>If all that is needed is to view applications in <code>\/system\/apps<\/code>, instead, it is necessary to make catalogs in Deskbar more manageable for users since <code>\/system\/apps<\/code> it is not meant for users to regularly open and view it (unlike MacOS). For such situations, Haiku has a different paradigm, but this option should be acceptable.<\/p><\/blockquote>\n<p><\/p>\n<ul>\n<li>Haiku provides the infrastructure for running application images, nightly, continuous, and test builds of software, as well as for cases when a user wants to 'freeze it in time', for private and internal software, and other special use cases (about 20% of all). These images contain the necessary files to run the application. <code>.hpkg<\/code>, mounted by system tools, and after the application finishes \u2014 unmounted. (Perhaps, the file manager could place files <code>.hpkg<\/code> in application images, automatically or on user demand \u2014 just like when dragging an application to a network folder or external drive. It's pure poetry \u2014 haiku.) On the other hand, the user may want to install the contents of the image as files<code>.hpkg<\/code>, after which they will be updated and processed just like if they were installed through HaikuDepot\u2026 Brainstorm needed).<\/li>\n<\/ul>\n<p><\/p>\n<p>Quote from mr. waddlesplash:<\/p>\n<p><\/p>\n<blockquote><p>Running applications from external disks or network directories could potentially be useful. And adding the ability to configure more 'zones' for pkgman would definitely be a nice feature.<\/p><\/blockquote>\n<p>Such a system will leverage the advantages of hpkg, catalogs, and application images. They are good on their own, but together will be unbeatable.<\/p>\n<p><\/p>\n<h2 id=\"zaklyuchenie\">Conclusion<\/h2>\n<p><\/p>\n<p>For Haiku, there is infrastructure providing a simple and sophisticated user interface for PCs, far exceeding what is typically offered for Linux PCs. The package system <code>.hpkg<\/code> \u2014 one such example, but the other parts of the system are also infused with sophistication. However, Haiku would benefit from proper support for directories and application bundles. The best way to achieve this is worth discussing with people who know Haiku, its philosophy and architecture much better than I do. After all, I have been using Haiku for just over a week. Nevertheless, I think this fresh perspective will be useful for designers, developers, and architects of Haiku. At the very least, I am happy to serve as a 'sparring partner' for them. I have over 10 years of practical experience with directories and application bundles for Linux, and I would like to find applications for them in Haiku, for which I believe they are perfectly suited. The potential solutions I propose are by no means the only correct ones for the problems I have described, and if the Haiku team decides to find other, more elegant ones \u2014 I am all for it. Basically, I am already contemplating the idea of how to make the system. <code>hpkg<\/code> even more amazing, without changing the way it works. It turns out that the Haiku team has long been thinking about application sets when implementing the package management system, but unfortunately, (it seems to me) the idea has gone 'outdated'. Maybe it's time to revive it?<\/p>\n<p><\/p>\n<p>Try it yourself! After all, the Haiku project provides images for download from DVD or USB, created <noindex><a rel=\"nofollow\" href=\"https:\/\/download.haiku-os.org\/?source=post_page---------------------------\">daily.<\/a><\/noindex>.<br \/>\nHave questions? We invite you to our Russian-speaking <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/HaikuOS_RU_chat\">Telegram channel.<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Error Overview: <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/pvs-studio\/blog\/461255\/\">How to Shoot Yourself in the Foot with C and C++. A Collection of Haiku OS Recipes<\/a><\/noindex><\/p>\n<p><\/p>\n<p>From <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/Finnix\/\">author<\/a><\/noindex> translation: this is the eighth and final article in the series about Haiku.<\/p>\n<p><\/p>\n<p>List of Articles: <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/461141\/\">The first<\/a><\/noindex> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/461451\/\">The second<\/a><\/noindex> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/462815\/\">Third<\/a><\/noindex> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/463105\/\">Fourth<\/a><\/noindex> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/463803\/\">Fifth<\/a><\/noindex> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/464819\/\">Sixth<\/a><\/noindex> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/465241\/\">Seventh<\/a><\/noindex><\/p>\n<p class=\"for_users_only_msg\">Only registered users can participate in the survey. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Please log in<\/a><\/noindex>, please.<\/p>\n<h2 class=\"default-block__polling-title\">Is there a point in porting the hpkg system to Linux?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Yes<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    No<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Already implemented, I will write in the comments.<\/p>\n<\/li>\n<\/ul>\n<p>    20 users voted. 5 users abstained.<br \/>\n<br \/>Source: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/466301\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>TL;DR: \u043c\u043e\u0436\u0435\u0442 \u043b\u0438 Haiku \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0449\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 (\u043a\u0430\u043a .app \u0432 Mac) \u0438\/\u0438\u043b\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 (Linux AppImage)? \u041c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u044b\u043c \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0432\u043d\u0435\u0434\u0440\u0438\u0442\u044c \u043f\u0440\u043e\u0449\u0435, \u0447\u0435\u043c \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0443\u0436\u0435 \u0435\u0441\u0442\u044c. \u041d\u0435\u0434\u0435\u043b\u044e \u043d\u0430\u0437\u0430\u0434 \u044f \u043e\u0442\u043a\u0440\u044b\u043b \u0434\u043b\u044f \u0441\u0435\u0431\u044f Haiku, \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443. \u041d\u0443 \u0430 \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28393,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37830","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"TL;DR: \u043c\u043e\u0436\u0435\u0442 \u043b\u0438 Haiku.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/koe-chto-eshhe-pakety-prilozhenij-haiku\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u043e\u0435-\u0447\u0442\u043e \u0435\u0449\u0435: \u043f\u0430\u043a\u0435\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 Haiku? | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"TL;DR: \u043c\u043e\u0436\u0435\u0442 \u043b\u0438 Haiku.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/koe-chto-eshhe-pakety-prilozhenij-haiku\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:20:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:20:00+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Something else: Haiku application packages? | ProHoster","description":"TL;DR: can Haiku?","canonical_url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/koe-chto-eshhe-pakety-prilozhenij-haiku","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u043e\u0435-\u0447\u0442\u043e \u0435\u0449\u0435: \u043f\u0430\u043a\u0435\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 Haiku? | ProHoster","og:description":"TL;DR: \u043c\u043e\u0436\u0435\u0442 \u043b\u0438 Haiku.","og:url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/koe-chto-eshhe-pakety-prilozhenij-haiku","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:20:00+00:00","article:modified_time":"2019-10-31T19:20:00+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37830","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 19:26:35","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:20:22","updated":"2026-01-23 19:26:35","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/37830","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/comments?post=37830"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/37830\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media\/28393"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=37830"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=37830"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=37830"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}