<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://blog.muntashir.dev/feed.xml" rel="self" type="application/atom+xml" /><link href="https://blog.muntashir.dev/" rel="alternate" type="text/html" /><updated>2025-12-19T00:13:16+00:00</updated><id>https://blog.muntashir.dev/feed.xml</id><title type="html">Muntashir’s Blog</title><subtitle>The blog of a computer engineer from a third-world country</subtitle><author><name>Muntashir Al-Islam</name></author><entry><title type="html">My New Favorite Desktop Operating System</title><link href="https://blog.muntashir.dev/2025/12/18/fedora-workstation/" rel="alternate" type="text/html" title="My New Favorite Desktop Operating System" /><published>2025-12-18T21:33:00+00:00</published><updated>2025-12-18T21:33:00+00:00</updated><id>https://blog.muntashir.dev/2025/12/18/fedora-workstation</id><content type="html" xml:base="https://blog.muntashir.dev/2025/12/18/fedora-workstation/"><![CDATA[<p>Last year, during the Black Friday sale, I bought a Lenovo Thinkpad P14s laptop replacing my old Dell laptop that I bought in 2017. The new laptop is somewhat powerful with its Core Ultra 7 CPU with 32 GB RAM and RTX 500 Ada discrete graphics along with Intel Iris Xe graphics, which is thought to be the first proper iGPU built by Intel. It came with Windows 11 Pro installed by default, which is disappointing considering all the CPU and memory are effectively wasted on running useless Windows background processes. However, a year later, the laptop no longer has a warranty (I do have extended warranty, but the provider doesn’t care about the OS installed), and I’ve also managed to get some time during the holidays to experiment with my laptop.</p>

<p>When I was running the Windows, I set up Windows Subsystem for Linux version 2 with Arch Linux to get the benefits of a Unix system which I am more familiar with for historical reasons. The very first laptop that I owned was passed onto me by one of my elder brothers back in 2014. It was a HP laptop running Pentium III processor, not a laptop you should own in 2014. It used to be a work laptop and had 512 MB upgraded RAM, but the workplace decided to take back the RAM and it only had 256 MB RAM. It came with Windows XP installed, but it no longer performed well with the reduced available memory. In fact, I couldn’t run any sane applications on the laptop. So, after a brief investigation, I found out that Lubuntu (a lightweight version of Ubuntu that comes with LXDE desktop by default) is a suitable candidate for this laptop. This was effectively my very first experience with a Unix desktop. A year later, I got a more capable laptop from a government scholarship program. This was a Dell laptop with Haswell processor (much better than Pentium III!). The first thing I did was replaced Windows 8.1 (I think) with Ubuntu 14.04 LTS as I was more familiar with Unix systems than Windows (not to mention the ugly look of Windows 8.1). But before that I’ve also tried to install Windows 7 (the last good Windows), but it refused to install because it says the hardware is too new! Then, I was into all sorts of things like Hackintosh and Croissant projects and ended up having Hackintosh (OS X El Capitan, I think) as my main setup. Hackintosh continued to be my main set up until I bought the Thinkpad last year. I also had Artix Linux as my secondary set up, too, but never Windows.</p>

<p>After getting the new laptop, I’ve felt that Windows is not really a worthy operating system, and Microsoft knows it themselves: they offer a set of tools (basically an official collection of third-party tools) collectively known as PowerToys. Even then, PowerToys cannot fix all the problems of Windows, especially, Windows 11. The very first annoyance was the HUGE taskbar it has which absolutely no customizabilty. So, the first thing I did was installed ExplorerPatcher to revert back to the Window 10 version of the taskbar. Of course, for a computer programmer (and now a researcher) like me, good support for workspace is required which is virtually absent in Windows by default. PowerToys helped a little, but there are limits on what kind of shortcuts it can create or handle. Just think about it: I came from macOS which offers one of the best workspace experiences to Windows 11 where even basic window switching is absent and requires a third-party tool. I wonder how Microsoft is surviving in the desktop operating system business with this historic worse operating system!</p>

<p>Last week, I was looking for a good Unix alternative to Windows that is stable (sorry, Arch Linux!) enough to be used as an everyday operating system. There were several candidates: Ubuntu 24.04 LTS, Fedora Workstation 43, Pop!_OS 24.04. I was particularly looking for options with great support for Thinkpad laptops (you know, power management is a big issue) and NVIDIA graphics (especially the latter since I work in a field where I frequently need to utilize the graphics card) as well as disk encryption and secure boot. I personally hate Ubuntu (I have it in my lab computer already), so I basically had two choices: Fedora Workstation and Pop!_OS. I choose Fedora Workstation because it is more mature and time-tested (and also because <a href="https://www.youtube.com/watch?v=mfv0V1SxbNA">Linus himself has promoted it</a>).</p>

<p>Fedora Workstation comes with GNOME Shell by default which is suitable for me for many reasons. For example, it has concepts of workspace very similar to (or even better than) macOS, its keybindings and gestures are usable and very similar to macOS’, offers a distraction-free mission control experience, and offers plenty of extensions to extend those. KDE Plasma is nice, but it’s way too bloated in my experience. GNOME does have its problems, but I think over the years the team has done a very good job in improving usability of the desktop. You might think window managers like dwm and bspwm might be good for handling workspace, but they are only good if you have a desktop computer. You’ll run into all sorts of issues because these window managers are not really scalable and good luck connecting to a projector in presentation mode!</p>

<p>Atomic desktops have also become increasing popular, but they are not mainstream yet and therefore, not something I wanted to install as my daily driver.</p>

<h2 id="installing-fedora-workstation">Installing Fedora Workstation</h2>

<p>[Obviously, I’m not writing a guide to install an operating system, rather I’m writing my impressions on installing an operating system.]</p>

<p>I went to the official website and followed instructions to download the ISO file, verify integrity and so on. But it lacked any information on how to make it bootable. So, I installed Rufus and used their <code class="language-plaintext highlighter-rouge">dd</code> method in UEFI mode. But it failed to boot with a message “Secure boot violation”. Then I realized that I needed to enable “Microsoft 3rd-party UEFI CA” in BIOS to boot the live desktop. After that it worked!</p>

<p>Then I ran into another issue: the installer itself doesn’t offer any option to format your partitions in the installer window nor does it watch for changes in partition table. So, I needed to use the <strong>Disks</strong> app to create partitions as I was dual booting (I wanted to make sure I can still use Windows if something goes wrong). So, I created a LUKS encrypted Btrfs partition (to allow snapshots, useful for a parition where you are installing your operating system) and used the default EFI partition for <code class="language-plaintext highlighter-rouge">/boot/efi</code>. But the problem didn’t end here. Since the root partition was encrypted, the installer was complaining that it required another partition for <code class="language-plaintext highlighter-rouge">/boot</code>. So, I created another small unecrypted parition (~2GB) for <code class="language-plaintext highlighter-rouge">/boot</code>, and it proceeded to the actual installation.</p>

<p>Then it failed with the following message:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>'NoneType' object has no attribute 'path'
</code></pre></div></div>

<p>Disappointing! But I tried rebooting anyway (you know after years of experience with installing operating systems), and it worked! I was successfully able to boot into my brand new operating system!</p>

<figure>
  <img loading="lazy" src="https://blog.muntashir.dev/images/Screenshot%20From%202025-12-18%2013-39-22.png" alt="Fedora Workstation" />
</figure>

<h2 id="post-installation">Post-installation</h2>

<p>The very first thing I did was <a href="https://github.com/Comprehensive-Wall28/Nvidia-Fedora-Guide?tab=readme-ov-file#installing-nvidia-drivers-on-fedora-workstation-and-its-spins">installing the NVIDIA drivers</a> (after all, all efforts will be null and void if it doesn’t have proper support for NVIDIA). The set up was trivial (basically installing some non-free software and kernel extensions). However, since I have <strong>Secure boot</strong> enabled, I needed some extra steps to generate a MOK signing key to sign the kernel extensions.</p>

<p>After that, I set up the powermanagement for my laptop which means simply installing and setting up <code class="language-plaintext highlighter-rouge">tlp</code> and <code class="language-plaintext highlighter-rouge">tlp-rdw</code>.</p>

<p>That’s it. Post-installation is complete!</p>

<h2 id="migrating-away-from-windows">Migrating Away from Windows</h2>

<p>As my Fedora set up is complete. Now, it’s time to move away from the vicious Windows. The partion consumed almost 450 GB for no reason. So, it’s a big gain for me as well and wanted to do this strategically: I wanted to remap the parition to <code class="language-plaintext highlighter-rouge">/home</code>. To do this, I needed to complete the migration first, and I wanted to do this without booting into Windows (I have tolerated that operating system far too long!).</p>

<p>The quickest way to achieve this is to see what software I installed there and which once I need to migrate. This is a little bit complicated for some software but easy for the most part.</p>

<p>The most problematic was migrating away from the browsers. I used <a href="https://github.com/ungoogled-software/ungoogled-chromium">Ungoogled Chromium (UGC)</a> as my primary browser and Mullvad as a secondary. Both browsers have a lot of bookmarks that needs to be migrated. So, I looked online for guides on how to do this, and it appears to be fairly simple. But I had four profiles in UGC, it it took sometime to migrate them using <a href="https://rongjiecomputer.github.io/chrome/bookmark-recovery/#windows">this excellent tool</a>.</p>

<p>Then, I had a few files stored in Documents, Downloads which I needed to copy to some place for later migration. I also had some configurations at <code class="language-plaintext highlighter-rouge">~/.ssh</code> which I needed to migrate. Finally, I also had several projects stored in WSL2 Arch distro. For this, I needed to copy the VDIX file to mount it later for copying the essential files.</p>

<p>Once the migration is complete. I formatted the partition in ext4 with LUKS (since this is a data partition, I didn’t bother with Btrfs), copied contents of <code class="language-plaintext highlighter-rouge">/home</code> to the root of the parition, set up <code class="language-plaintext highlighter-rouge">/etc/fstab</code> to use this parition as <code class="language-plaintext highlighter-rouge">/home</code> and renamed <code class="language-plaintext highlighter-rouge">/home</code> to <code class="language-plaintext highlighter-rouge">/home.bk</code> in case something goes wrong. (I still had my pen drive bootable for this reason.)</p>

<p>I rebooted and the migration was a sucess!</p>

<p>I copied all data back to their respective folders in my Fedroa installation and cleaned up those files including the VDIX file.</p>

<h2 id="getting-the-most-out-of-fedora-workstation">Getting the Most Out of Fedora Workstation</h2>

<p>Now that the setup is finished. I wanted to actually look into the GNOME Shell desktop to see how it compares with my requirements and expectations, and I have to say I’m very satisfied even with the default interface! GNOME team, it seems, have finally done a good job with their desktop!</p>

<p>As some of you know, I use <a href="https://disroot.org">disroot.org</a>’s NextCloud for CalDAV and CardDAV syncing, and I was surprised to discover that GNOME desktop supports NextCloud specifically by default (including WebDAV, but it doesn’t have proper caching, needed to use <code class="language-plaintext highlighter-rouge">rclone</code> instead). Windows doesn’t even have support for CalDAV or CardDAV (actually they do not even have a calendar in first place).</p>

<p>Other essential software, such as Firefox, LibreOffice, Calendar, Calculator, Contacts, were already installed in the system. I only needed to install a few more that I use, such as <a href="https://bitwarden.com/">BitWarden</a>, <a href="https://freetubeapp.io/">FreeTube</a>, Inkscape, <a href="https://github.com/Nheko-Reborn/nheko">nheko</a> (Matrix client), Oracle VirtualBox (needed as an instructor for Computer Security course), Telegram, Thunderbird, UGC, <a href="https://vscodium.com/">VSCodium</a>, Android Studio, and Ghidra.</p>

<p>Unfortunately, I didn’t find a single offline music player for my taste. So, I ended up installing <a href="https://apps.kde.org/elisa/">Elisa</a> and <a href="https://codeberg.org/edestcroix/Recordbox/">Recordbox</a>. And I did all this using GNOME’s Software application. I’ve never thought this could be done in Linux (other than Ubuntu’s Snap, of course, which I detest). Somebody <a href="https://andreyor.st/posts/2023-11-19-linux-music-players/">wrote a whole article</a> on the usability of music players in Linux (TL;DR; not good).</p>

<p>The GNOME Shell desktop is good, but some extensions were required to make it more productive, especially, if you’re using a keyboard and a mouse or touchpad. I used <a href="https://github.com/domferr/tilingshell">Tiling Shell</a> as a tiling manager instead of GNOME’s default (which is not very powerful), Window List for listing the windows at the bottom of the screen, and Auto Move Windows that allows assigning specific workspace for each application. There are a few other interesting extensions for window/workspace management that I have installed: <a href="https://github.com/ihpled/deja-window">Deja Window</a> which is useful for restoring window states and <a href="https://github.com/kyledross/MaximizeWindowIntoNewWorkspace">Maximize Window Into New Workspace</a> which creates a new workspace when you maximize a window (a very useful feature found in macOS).</p>

<p>I also wanted display the network speed in the status bar. So, I installed <a href="https://github.com/mgalgs/gnome-shell-system-monitor-next-applet">system-monitor-next</a> extension and only enabled the network portion.</p>

<p>Finally, since I own an Android phone and mostly work on my laptop. I wanted to display the notifications to my laptop. For this, I used <a href="https://github.com/GSConnect/gnome-shell-extension-gsconnect/">GSConnect</a> with <a href="https://f-droid.org/packages/org.kde.kdeconnect_tp/">KDE Connect</a>.</p>

<p>So, here at last, I found an operating system that balances features, customization, and usability together, in certain areas far better than macOS, and fully free and open source (well, mostly, since I still needed to install the NVIDIA drivers)! This is definitely my favorite operating system!</p>]]></content><author><name>Muntashir Al-Islam</name></author><category term="linux" /><summary type="html"><![CDATA[I spent the past three days setting up my new favorite operating system, which, in my opinion, is a great replacement for both Windows and macOS from my years of experience of using, especially, the latter.]]></summary></entry><entry><title type="html">September’25 Updates</title><link href="https://blog.muntashir.dev/2025/10/18/september-updates/" rel="alternate" type="text/html" title="September’25 Updates" /><published>2025-10-18T19:53:00+00:00</published><updated>2025-10-18T19:53:00+00:00</updated><id>https://blog.muntashir.dev/2025/10/18/september-updates</id><content type="html" xml:base="https://blog.muntashir.dev/2025/10/18/september-updates/"><![CDATA[<p>This month (October) has been a busy month for me (I mean more than usual). I’ve had certain timeline set up for the next release, but due to my busy-ness, I don’t think I will be able to meet my goals for the next release any time soon.</p>

<p>Last time I’ve announced that I was working on ADB-based backups, and last month, I was able to integrate it fully into the existing backup model. This required a major rewrite of the backup/restore feature, but I think it would be beneficial to the large number of ADB users that App Manager has.</p>

<p>Recently, somebody has created <a href="https://github.com/MuntashirAkon/AppManager/issues/1754">a feature request on GitHub</a> regarding a ADB-based network firewall implementation. From Android 13, it is possible to utilize the Berkeley Packet Filter (BPF) to cut network connections from an application. You can also do this using ADB shell or terminal with root:</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>cmd connectivity set-package-networking-enabled <span class="o">[</span><span class="nb">true</span>|false] <span class="o">[</span>package-name]
</code></pre></div></div>

<p>The underlying implementation fetches the UID of the package name and then add the UID and rule to a BPF map for filtering the packets for the UID (for shared applications, multiple applications packages may be blocked as they share the same UID). But the issue with BPF rules is that the rules do not persist across reboot. This means you’d need to reapply the rules after restarting your device which is inconvenient. A possible solution to the problem, of course, is reapplying the rules on reboot, which again, is not convenient since ADB mode is also lost after a reboot. So, to effectively implement this feature, we need to find a way to monitor Wi-Fi connections on reboot and connect to wireless debugging automatically once the device is connected to Wi-Fi. I’ve already implemented a prototype last night, and it’s working correctly on my test device (Pixel 9). On Android TV, ADB over TCP persists across reboots, so we may also able to do something similar on Android TVs too. After the feature becomes stable enough, I think it would be possible to implement BPF-based firewall for devices that support it that would persist across reboots.</p>

<p>IP tables based blocking and VPN-based packet filtering remain the most used filtering technology in Android due to the availability of many open source firewall tools (and closed source ones most of which are just clones of the former). However, these sort of blocking, as I’ve argued before, are not very effective, and from Android 12, their effectiveness has been further reduced. This has happened because Android 12 has integrated eBPF (extended BPF), and since then the internals of the AOSP has been modified to use eBPF instead of the traditional IP tables approach. If you don’t know about BPF, let me explain it in simple words: BPF is a kernel-level packet filtering mechanism that has the ability to decide which packet (any data transmitted from or to the internet has to go through a few layers, packet is one of them) goes to where or which packets it needs to drop. This allows a system whitelisted program in Android to directly send/receive packets without going through the typical route used by ip tables or VPNs. This means that the vendor can arbitrarily allow their vendor (and system) apps to bypass ip tables and VPNs which is not good thing for user privacy since for these applications, all the protections (for example, anti-censorship protections) become useless. This is where the BPF rules may help. The underlying implementation of the above mentioned command modifies the BFP map albeit temporarily overriding the existing UID rules if already present. This effectively allows us to temporarily override the rules even for the whitelisted apps. But in some cases, the rules may be refreshed even without a reboot. I’m still currently investing the implementation, so I don’t have the exact details.</p>

<p>Finally, for the APK updater, I’ve already created a backend for it. But there are still a lot of challenges, such as effective handling of extensions and errors, what to display to the user, implementing the update policies, and so on. This will take some time and probably available for testing at the first quarter of 2026.</p>

<blockquote>
  <p><strong>Note:</strong> You may have to enable the <strong>chain3</strong> first before you can block networking for an app. To enable chain3, run this command:</p>
  <div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>cmd connectivity set-chain3-enabled <span class="nb">true</span>
</code></pre></div>  </div>
  <p>This is only an on/off switch. The configurations are in the BPF map regardless of this option. Therefore, they are applied immediately when you enable chain3.</p>
</blockquote>]]></content><author><name>Muntashir Al-Islam</name></author><category term="app_manager" /><summary type="html"><![CDATA[App Manager development update: delayed release for v4.1.0, ADB backup integration, and a new kind of firewall for Android]]></summary></entry><entry><title type="html">August’25 Updates</title><link href="https://blog.muntashir.dev/2025/09/04/august-updates/" rel="alternate" type="text/html" title="August’25 Updates" /><published>2025-09-04T22:14:00+00:00</published><updated>2025-09-04T22:14:00+00:00</updated><id>https://blog.muntashir.dev/2025/09/04/august-updates</id><content type="html" xml:base="https://blog.muntashir.dev/2025/09/04/august-updates/"><![CDATA[<p>The next release of App Manager (that is, v4.0.6) is delayed because I was very busy with work last week. I’ll try to release it in the next week as I need to take care of a few more things.</p>

<p>At first, I’d like to talk about one of my concerns that has been in mind for a while. Despite what many politicians want you to believe, the world is in a grave financial crisis, and there is no easy way out of it. What we’re seeing at present seems to be a replay of the financial crises in the 1970s, except the world is more connected than before, thanks to the Internet, and this has its own set of disadvantages like we saw during the Covid period when the world ran into an absolute chaos. However, unlike the Covid period, people’s ability and motivation to continue hobbies are going to be challenged, especially if they are not financially productive, and this can have an adverse effect in the open source community where many projects (including App Manager and the related projects) are developed and maintained by hobbyists like me. Notice that App Manager costs me nothing other than time (which is still quite costly in the developed world), but there are many projects that are quite costly in terms of money and resources. Most concerning of all: some of them play a significant role in areas of utmost importance (like the Internet itself or defense, compared to App Manager which is not that important as a project) and are being developed by maintainers quite thanklessly without any form of compensation. This is going to be an acid test for the open source community, and I believe the landscape will see a significant alteration in the future.</p>

<p>Of late, I’ve been working on the backup/restore feature of App Manager. As some of you know, I’ve already created the framework for converting a App Manager backup to and from a regular ADB backup a long time ago, but handling ADB backup and restore itself is not that straightforward using the Android APIs, but it’s not impossible, and since a lot of the users are now using App Manager in ADB mode, I think I’ll give it one more shot. If I can implement this correctly, the feature will be available v4.1.0, otherwise we’ll continue to test it in the debug versions.</p>

<p>Lastly, I’m still looking for contributors for the ADL project. If you’re interested, please send me an email with your Matrix username. Thanks.</p>]]></content><author><name>Muntashir Al-Islam</name></author><category term="app_manager" /><summary type="html"><![CDATA[App Manager development update: delayed release, acid test for open source community, and integrating ADB backups in App Manager.]]></summary></entry><entry><title type="html">July’25 Updates</title><link href="https://blog.muntashir.dev/2025/08/03/july-updates/" rel="alternate" type="text/html" title="July’25 Updates" /><published>2025-08-03T23:18:00+00:00</published><updated>2025-08-03T23:18:00+00:00</updated><id>https://blog.muntashir.dev/2025/08/03/july-updates</id><content type="html" xml:base="https://blog.muntashir.dev/2025/08/03/july-updates/"><![CDATA[<blockquote>
  <p>In order to provide a convenient option for non-Telegram users to follow the updates, they will also be posted on my personal blog. Past updates will also be gradually added there. You can subscribe to my blog posts via RSS or follow my personal Mastodon/X account. Transparency reports will also be posted to App Manager’s official Mastodon/X accounts. An archive of the reports will be maintained in a GitHub gist for now.</p>
</blockquote>

<p>I think many testers already know this: I’ve implemented a new type of profile that allows filtering apps by the set of filters offered by the Finder feature. This feature is going to be very useful for recurrent activities like force-stopping all the user apps that are currently running. Again, the possibilities are endless. Although the regular apps-based profile is kind of a subset of this profile, I decided to implement them separately to keep the apps-based profile very simple and fast to execute (since filter-based profiles are inherently slower than apps-based profile). The feature will be available to stable users from v4.1.0 (release date not fixed yet). The filters in the main page are also being migrated to use the Finder-style filters so that the users can generate and use their own set of filters instead of the predefined ones. Finder itself along with this exclusive filtering options will be available to stable users in a future release.</p>

<p>I have done some progress on the updater implementation and can share some of the ideas to the readers for both transparency and scrutiny. But at first, let’s take a look at the issues that we need to handle in order to implement a unified updater:</p>
<ol>
  <li>App Manager app itself has limited internet features, and we intend to keep it this way</li>
  <li>It’s necessary to enforce a static single source assignment, that is, once an installed app is assigned to a source, subsequent updates should also be sourced from that source</li>
  <li>It’s also necessary to establish the levels of trust and the priority of sources should be assigned based on the trust</li>
  <li>It’s crucial that the users can amend 2-3 depending on their threat model.</li>
</ol>

<p>These are very challenging issues, and addressing them completely is nearly impossible. But I’ve designed a protocol and a framework to address those issues in an optimal way. In this protocol, App Manager effectively acts as an updater client that retrieves updates from the sources which are basically extensions to App Manager. The update process itself works in two independent steps. In the first step, App Manager queries the sources for new updates (based on the source assignment). Upon receiving such a query, the sources check for updates and return a list of updates to App Manager. In the second step, App Manager ask the sources to download some (or all) of those updates which the sources download (or retrieve from caches) and return a list of URIs that App Manager has access to. App Manager later retrieves those updates and installs them. This design has several advantages:</p>
<ol>
  <li>Each source remains separate and can be installed or removed independently</li>
  <li>For each source, it’s possible to assign a trust level and handle per source security (HPKP, GPG, etc.)</li>
  <li>Each source only uses the minimum number of permissions to function which reduces the attack surface even if some of the security mechanisms are bypassed</li>
  <li>It’s easy to provide per extension updates compared to the monolithic approach where any simple changes to any sources requires a new update</li>
  <li>Using modern Android platform features, it’s easy to persist single source assignments beyond App Manager.</li>
</ol>

<p>To clarify the level of trust a bit more, it’s necessary to support only the legitimate sources instead of arbitrary source and assign each a priority which are actually more challenging than the rests, because the definition of legitimate sources remains unclear to me, and without an exact definition, it’s almost impossible to assign priorities as well. I initially came up with a priority list for the app stores, but I didn’t explain why they were prioritized this way. Therefore, it is necessary to define leigitimate sources and factors that are needed to be taken into account to assign priorities. Again, this is a challenging problem, and for now, I’ll rely on my own instinct for it. For the same reason, App Manager will not support any third-party updater extensions. The updater will rely on a signature permission to interact with the sources, and therefore, the extensions must be signed using the same key used to sign App Manager.</p>]]></content><author><name>Muntashir Al-Islam</name></author><category term="app_manager" /><summary type="html"><![CDATA[App Manager update: Introducing a new filter-based profile type leveraging Finder features in upcoming v4.1.0; ongoing migration of main page filters to this flexible system; progress on a unified updater framework designed to securely manage app updates from trusted sources with strict source assignment and customizable trust levels.]]></summary></entry><entry><title type="html">June’25 Updates</title><link href="https://blog.muntashir.dev/2025/07/06/june-updates/" rel="alternate" type="text/html" title="June’25 Updates" /><published>2025-07-06T20:49:00+00:00</published><updated>2025-07-06T20:49:00+00:00</updated><id>https://blog.muntashir.dev/2025/07/06/june-updates</id><content type="html" xml:base="https://blog.muntashir.dev/2025/07/06/june-updates/"><![CDATA[<p>There hasn’t been a release last month because there were no significant changes to the project that requires a new release. Last month, I along with IzzySoft have tried to make App Manager reproducible and has largely been successful. All the debug releases are now reproducible, and the stable releases too shall be reproducible from the next release (v4.0.5).</p>

<p>The highly anticipated “Finder” feature is nearing completion, and I think, I can launch it at the end of this month or the next. This feature required some thorough planning in order to make it future-proof and usable for most users (and much more usable for advanced users). Initially, only a handful of features will be enabled for the stable releases, and gradually all the anticipated features will be released. The reason for this kind of rolling release is because we no longer have the beta testing system that we used to have, yet a certain level of confidence is required in order to release a feature like this. Similar to profiles, the possibilities with this feature is endless, some of which may remain unknown for some time. There are also a few small but exciting improvements that are coming up (which shall be revealed in due time) in the upcoming releases.</p>

<p>Regarding the app store functionality, I’ve given it a thought and concluded that rolling out an entire app store is time consuming and largely unnecessary for the time being. Instead, we can launch an update functionality instead. The update functionality, unlike F-Droid or Obtainium, will adhere to the Android principles at the same time offering a level of privacy and security that will be suitable for a wide range of individuals (as always, in developing App Manager, I’ve always focused on offering a diversified threat model so that it can accommodate most users). You can find some information regarding the design at this link: <a href="https://github.com/MuntashirAkon/AppManager/issues/464">https://github.com/MuntashirAkon/AppManager/issues/464</a>. However, there are a few changes to the original design which will be revealed as I begin working on it.</p>

<p>That’s all. Thanks for reading.</p>]]></content><author><name>Muntashir Al-Islam</name></author><category term="app_manager" /><summary type="html"><![CDATA[App Manager development update: No release last month due to lack of significant changes; successful collaboration with IzzySoft made debug releases reproducible, with stable releases to follow from v4.0.5; highly anticipated 'Finder' feature nearing launch with phased rollout to ensure reliability without beta testing; plans shifted from building a full app store to implementing a privacy-focused update functionality aligned with Android principles, designed to suit diverse user threat models.]]></summary></entry><entry><title type="html">May’25 Updates</title><link href="https://blog.muntashir.dev/2025/06/01/may-updates/" rel="alternate" type="text/html" title="May’25 Updates" /><published>2025-06-01T05:39:00+00:00</published><updated>2025-06-01T05:39:00+00:00</updated><id>https://blog.muntashir.dev/2025/06/01/may-updates</id><content type="html" xml:base="https://blog.muntashir.dev/2025/06/01/may-updates/"><![CDATA[<p>It’s been five years since I’ve started developing App Manager, and it’s been an interesting experience. I’ve been part of a lot of communities before this, but Android community is probably the most diverse community so far. In Hackintosh community, for example, most people were highly technical, because you needed to know a lot about the hardware in order to build a hackintosh. It was particularly challenging for laptops since most of the hardware (e.g., PCI(e) devices) cannot be replaced unlike, say a desktop. With the introduction of Clover, and then <a href="https://github.com/acidanthera/OpenCorePkg">OpenCore</a>, the complexity has been greatly reduced, but it’s still challenging to work with a laptop, especially with the newer graphics cards which aren’t even support by the recent version of macOS (but some people are trying to find workaround). Anyway, the amount of dedication displayed by the hackintosh community is really impressive, and it’s also a showcase of how resilient software engineers can be when they encounter challenges. Then there was also the Croissant project (which has been renamed to something else that I have forgotten about) where I have made some initial contributions, but Chrome OS itself is a dead end, and Google knows it very well. The experiences I’ve gathered from these two communities, in particular, have largely enhanced my ability to sustain an open source project. My inspiration for documentation, for example, is the OpenCore project.</p>

<p>App Manager v4.0.3 had a terrible bug that caused App Manager to crash or freeze (depending on device/OS) if certain keywords are used during searching/filtering. The issue has been addressed in v4.0.4. Interestingly, this has resulted in the creation of <a href="https://github.com/MuntashirAkon/AppManager/issues/1605">29 duplicate issues</a> (so far). This demonstrates how important it is to look for similar issues before opening a new issue, or GitHub suggesting similar issue based on the title or issue content while the user is creating a new issue (similar to what we already have in many other websites). GitHub also has a terrible search option that tends to ignore older issues.</p>

<p>Shizuku has recently <a href="https://github.com/RikkaApps/Shizuku/commit/7bd50a24189446114d2fd669842bbdc720411142">altered its license terms</a> to make the project completely open source (as opposed to source available that it previously was). I absolutely welcome this change and thank <a href="https://github.com/vvb2060">vvb2060</a> for making this change. Some of you may now ask whether I’ve got any plan on supporting Shizuku. Let me explain this a bit.</p>

<p>Since v4.0.0, much of the compatibility layers in App Manager have been rewritten to allow a certain level of flexibility in terms of the mode of operations. From v4.0.1, it is also possible to alter the mode of operation to any UID of your choice provided they support reading and executing the start command. It is even possible albeit with certain modifications to run App Manager as a system app with permission whitelists or as a system level UID (latter is too risky). So, in a way, it is now possible to add Shizuku support in App Manager. At this point, I may need to spend some time with their API to understand how it works. My expectation would be a generic API (similar to <a href="https://github.com/open-keychain/openpgp-api">Open KeyChain</a>’s) that would allow connecting to any Shizuku-style applications, including any future Shizuku forks (since it is open source now) instead of Shizuku “official” app alone.</p>

<p>Lastly, Eid Mubarak to those who celebrate Eid-ul Adha.</p>]]></content><author><name>Muntashir Al-Islam</name></author><category term="app_manager" /><summary type="html"><![CDATA[Reflect on years of experience across diverse communities including Hackintosh and Chrome OS on App Manager's fifth anniversary; fixing critical search/filter bug in v4.0.4; welcoming Shizuku’s recent shift to full open source and exploring potential integration.]]></summary></entry><entry><title type="html">April’25 Updates</title><link href="https://blog.muntashir.dev/2025/05/03/april-updates/" rel="alternate" type="text/html" title="April’25 Updates" /><published>2025-05-03T22:44:00+00:00</published><updated>2025-05-03T22:44:00+00:00</updated><id>https://blog.muntashir.dev/2025/05/03/april-updates</id><content type="html" xml:base="https://blog.muntashir.dev/2025/05/03/april-updates/"><![CDATA[<p>So, I’ve started teaching as a Teaching Assistant. It is a new and interesting experience after spending over a decade in software and open source development. Also, in a foreign language that I’ve never spoken until 2021 when I got my first job abroad. This is yet another bad news for you, however. Because I now need to spend time on preparing for lectures, taking classes, grading along with my regular research and course work. I think many users have already noticed the seemingly “unstable” nature of the stable releases. This is because we now release all the changes made to the repository (well, except a few experimental features) without going through any kind of testing that we used to do. (This, in a way, makes the debug releases more “stable” than the stable release since they may get immediate fixes than the stable which is released last Friday of each month provided there are things to release.) Unfortunately, I cannot do any thing about it right now. My life is currently in a very difficult position where work-life balance does not exist: all work and no life.</p>

<p>A good news, though, is that the small amount of time I can manage for App Manager is largely spent on improving the user experience. This you may have already noticed if you have installed the latest version of App Manager.</p>

<p>Now and then, I receive requests for adding translations for docs in [placeholder] language. Please understand that translating docs is a very difficult task, and we do not approve such requests unless the existing translations for the language are very good and are backed by at least two person.</p>]]></content><author><name>Muntashir Al-Islam</name></author><category term="app_manager" /><summary type="html"><![CDATA[App Manager update: stable releases appear less tested due to direct repository changes and limited testing capacity; focus remains on improving user experience despite challenging work-life balance; translation requests for documentation require strong, multi-person support to ensure quality.]]></summary></entry><entry><title type="html">March’25 Updates</title><link href="https://blog.muntashir.dev/2025/03/31/march-updates/" rel="alternate" type="text/html" title="March’25 Updates" /><published>2025-03-31T22:37:00+00:00</published><updated>2025-03-31T22:37:00+00:00</updated><id>https://blog.muntashir.dev/2025/03/31/march-updates</id><content type="html" xml:base="https://blog.muntashir.dev/2025/03/31/march-updates/"><![CDATA[<p><em>Eid Mubarak to those who celebrate Eid Al Fitr!</em></p>

<ul>
  <li>Some of you are still sending email related to App Manager in the old email address. Those emails will be ignored, because those messages aren’t filtered. Also, please try to add a sane subject line (e.g., App Manager Crash Report, etc.) to your email. Otherwise, they will also not be filtered. I received thousands of emails per month from various sources (not just App Manager). So, unless the subject line looks important, most of them are ignored and deleted after some time. Finally, please use a sane email address as well. If you use lots of <code class="language-plaintext highlighter-rouge">x</code>s, for example, most spam filters will put it in the Spam folder ;)</li>
  <li>I have been making plans to improve the ADL project (which more-or-less follows UAD-NG project for now). Hopefully, the project will be more reliable in the future with verified and enhanced documentation. Android libraries project, on the other hand, still requires a lot of work on my end which I may be able to finish by this year.</li>
</ul>]]></content><author><name>Muntashir Al-Islam</name></author><category term="app_manager" /><summary type="html"><![CDATA[App Manager update: Reminder to use the correct email address; ongoing plans to improve the Android Debloat List (ADL) project with verified documentation, aiming for enhanced reliability.]]></summary></entry><entry><title type="html">February’25 Updates</title><link href="https://blog.muntashir.dev/2025/03/01/february-updates/" rel="alternate" type="text/html" title="February’25 Updates" /><published>2025-03-01T00:15:00+00:00</published><updated>2025-03-01T00:15:00+00:00</updated><id>https://blog.muntashir.dev/2025/03/01/february-updates</id><content type="html" xml:base="https://blog.muntashir.dev/2025/03/01/february-updates/"><![CDATA[<ul>
  <li>I’ve received some interesting feedbacks in the opinion poll. I’ll try to address a few of those, but before that, you should know that sorting or filtering is difficult to implement without affecting the overall loading speed of the Main page. Those who have been using App Manager from the very beginning knows how long it took to load this page without the caching mechanism that was implemented much later. However, for certain cases, caching needs to be bypassed. For example, a list of running applications cannot be cached as it is a real time information. Same goes for the size checks. For those cases, when the filter/sort is triggers, App Manager takes a snapshot of the running apps/size and apply the selected option. This is why you may see increased loading time when you use those options. Also, as the number of sorting and filtering options are increasing, it’s also necessary for a (not a complete) re-design of the list options to make it less overwhelming to a regular user. The reason for the poll to have limited voting options is also this. I want to understand which sorting options are most likely used by a user so that they can be more accessible than the others at the initial stage. It is also possible to update the options dynamically based on usage, but this will have a negative impact because when you use a feature regularly, you develop muscle memory. So, you may end up being annoyed with the dynamic options due to occasional changes in the layout. These are some of the trade-offs that needs to be considered when working on a complex feature that requires a simple front-end.</li>
  <li>Grouping apps on the Main page based on predefined groups is an interesting idea. But when you think about it analytically, you can find that groups cannot be overlapped, unlike say categories, tags, or profiles. So, it is necessary to research on how all these can be integrated. For example, groups can be just categories with where only one app is allowed across groups. Tags and categories are likely the same thing. Also, there may also be collections of tags or categories which can be just filters. In that regard, a single group/category/tag can also be regarded as a filter with just one item. These are some of the interesting concepts that require some deep thinking. Profiles is another topic.</li>
  <li>What is the biggest obstacle in publishing a new release? Writing changelogs. Though it may be surprising to many people, writing changelog often takes several hours to finish, because it’s necessary to take a look at the features implemented, improved or fixed, and then write it in a way that makes some sense. Then, certain platforms requires a certain amount of work as well. For example, F-Droid has a restriction on the number of characters a changelog may contain which is way too limited for an active project like App Manager. For the in-app changelog, it’s necessary that all the changes are documented properly since we expect people to read it most often. In other cases, such as GitHub, Telegram, Matrix, or website, it is expected that the users will just skim over the changes, but at the same time, they may be referred by other channels, forums, etc. So, they have to sufficiently descriptive but easy to read and understand. Finally, we also need to post the update via the social networks (Mastodon and X). Possibly developing a feature is less tiresome than this since they tend to be more rewarding and enjoyable.</li>
  <li>A few months ago, I talked about permissions in Android. App Manager currently does not have a permission model. This, as you may recall, is because Android itself has a very complex and distributed permission model. Unifying them is a challenge that App Manager needs to eventually address. My estimation is that such unification attempt may take at least 5-6 years if I do this alone (and I probably have to do this alone).</li>
  <li>My rooted phone broke down. I suspected it has something to do with the battery as it’s no longer charging. As a result, development of root-only features and bug fixes are paused until I can find a solution. I can use an emulator, but they aren’t convenient for testing certain aspects of root.</li>
  <li>We actually have everything necessary to implement ADB backup/restore for supported apps inside App Manager, only a user interface is necessary. However, the primary problem is the convenience, because whenever you run ADB backup, a popup will be displayed by the Android system asking for a password (which you should not set since encryption is handled by App Manager on its own) which can be very annoying. Then, the primary concept is to convert an ADB backup into regular App Manager backup and vice versa to allow restoring arbitrary backups made using App Manager which may not hold in all cases, especially the apps that only support key-value backup/restore. This is an interesting problem that I need to look into. ADB backup can also back up launcher widgets which App Manager cannot right now.</li>
  <li>The contributor of the month for February is <a href="https://github.com/Tharow">Theray Tharow</a>. Tharow was chosen for their outstanding code contribution to App Manager which include implementing the front- and back-end of the overlay management features. I hope more people will be interested in code contribution because this is where more contributions are needed.</li>
</ul>]]></content><author><name>Muntashir Al-Islam</name></author><category term="app_manager" /><summary type="html"><![CDATA[App Manager development insights: challenges in implementing sorting and filtering without impacting load speed; exploring app grouping, categories, tags, and profiles integration; the time-consuming task of writing detailed changelogs across platforms; long-term goal to unify Android’s complex permission model; pause on root feature development due to broken rooted phone; plans to improve ADB backup/restore UI despite system inconveniences; and February’s Contributor of the Month recognized for overlay management enhancements.]]></summary></entry><entry><title type="html">January’25 Updates</title><link href="https://blog.muntashir.dev/2025/02/09/january-updates/" rel="alternate" type="text/html" title="January’25 Updates" /><published>2025-02-09T05:20:00+00:00</published><updated>2025-02-09T05:20:00+00:00</updated><id>https://blog.muntashir.dev/2025/02/09/january-updates</id><content type="html" xml:base="https://blog.muntashir.dev/2025/02/09/january-updates/"><![CDATA[<ul>
  <li>In the past couple of weeks, a lot of improvements have been made to the existing features, and I am happy to announce that v4.0.0 will be released in the next week. Writing changelog for 5 different platforms is not an easy task, but I’m almost finished writing the in-app changelog which is, by far, the most complicated one. Testers have also done a good job in reporting potential issues and fixes were made promptly.</li>
  <li>As App Manager is built on the principles of open source, privacy and security, and (according to the last poll) almost 60% of the users are using App Manager for privacy, I’ll be focusing more on improving the most crucial projects that App Manager depend on in regards to privacy, such as <a href="https://github.com/MuntashirAkon/android-debloat-list">ADL</a> and <a href="https://github.com/MuntashirAkon/android-libraries">Android Libraries</a>. Advanced users and community members are encouraged to contribute to the ADL project since all the related projects are now more-or-less dead. ADL project, compared to App Manager, is a very small project and does not require any coding or programming skills. You may need to have some knowledge about <a href="https://en.wikipedia.org/wiki/JSON#Syntax">JSON</a> which is very easy to learn. I’d ask every one of you to try to contribute at least once a month to the ADL project to accelerate the process of listing and reviewing the bloatware in Android. Once we can bring it to a stable position, the maintenance would be quite easy.</li>
</ul>]]></content><author><name>Muntashir Al-Islam</name></author><category term="app_manager" /><summary type="html"><![CDATA[App Manager v4.0.0 releasing next week with major feature enhancements; call for community contributions to the ADL project to strengthen Android bloatware detection.]]></summary></entry></feed>