<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Bharat Dev Burman</title>
    <description>The latest articles on DEV Community by Bharat Dev Burman (@crazo7924).</description>
    <link>https://dev.to/crazo7924</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2129808%2F4710a9cb-a047-4aa6-9948-ef77b1c106b6.jpeg</url>
      <title>DEV Community: Bharat Dev Burman</title>
      <link>https://dev.to/crazo7924</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/crazo7924"/>
    <language>en</language>
    <item>
      <title>Beyond the Mute Button: How a Broken LED Led to My First Linux Mainline Kernel Commit</title>
      <dc:creator>Bharat Dev Burman</dc:creator>
      <pubDate>Fri, 17 Jul 2026 19:41:20 +0000</pubDate>
      <link>https://dev.to/crazo7924/beyond-the-mute-button-how-a-broken-led-led-to-my-first-linux-mainline-kernel-commit-2ail</link>
      <guid>https://dev.to/crazo7924/beyond-the-mute-button-how-a-broken-led-led-to-my-first-linux-mainline-kernel-commit-2ail</guid>
      <description>&lt;p&gt;Every Linux user has &lt;em&gt;that&lt;/em&gt; one thing. That tiny, lingering hardware quirk that doesn’t break the OS, but softly mocks you from the keyboard every single day. For me, it was the hardware audio mute LED on my HP Victus laptop. When I muted the volume, the light refused to turn on. It was a purely cosmetic malfunction, but to a systems developer, a broken LED is an unresolved puzzle.&lt;/p&gt;

&lt;p&gt;What started as a minor weekend irritation turned into a deep dive through the layers of Linux audio architecture, Secure Boot cryptography, and enterprise-grade security policies. Ultimately, it culminated in a native kernel patch accepted into the mainline Linux kernel in record time by one of the community's legendary maintainers.&lt;/p&gt;

&lt;p&gt;Here is the story of my first upstream Linux kernel commit.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Fragile Illusion of User-Space Fixes
&lt;/h2&gt;

&lt;p&gt;Like anyone encountering a hardware quirk, I initially looked for a quick workaround. I found that a few users had written custom ACPI scripts using a tool called &lt;code&gt;hda-verb&lt;/code&gt; to manually toggle the codec pins.&lt;/p&gt;

&lt;p&gt;On paper, it worked. But in practice, it was a fragile illusion:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;No State Persistence:&lt;/strong&gt; The scripts didn't remember the last state across sleep cycles, reboots, or sudden audio source switches.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Security Wall (Fedora vs. Ubuntu):&lt;/strong&gt; The existing workarounds were tailored for Ubuntu-family distributions. Ubuntu utilizes &lt;strong&gt;AppArmor&lt;/strong&gt; , which can be configured to let &lt;code&gt;hda-verb&lt;/code&gt; execute via &lt;code&gt;sudo&lt;/code&gt; without much friction. However, I run &lt;strong&gt;Fedora&lt;/strong&gt; , which uses &lt;strong&gt;SELinux&lt;/strong&gt;. SELinux treats user-space manipulation of low-level hardware audio codecs with extreme suspicion. Trying to safely bypass the SELinux nuances to let a user-space script poke at an ALSA audio codec was like trying to cut bread with a chainsaw—it was structurally unsafe and inherently flawed.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It became obvious: fixing this properly meant leaving user-space behind. The logic belonged exactly where hardware management is supposed to live: inside the &lt;strong&gt;Linux Kernel&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Diving Into the Kernel &amp;amp; Codec Architecture
&lt;/h2&gt;

&lt;p&gt;I pulled the kernel source and began investigating the Realtek audio codec architecture (&lt;code&gt;sound/pci/hda/patch_realtek.c&lt;/code&gt;). The goal was to write a native C patch that mapped the specific subsystem ID of my HP Victus laptop to the correct alc245 mute LED helper functions already present in the kernel's sound subsystem.&lt;/p&gt;

&lt;p&gt;Instead of overriding policies or forcing permissions, a kernel-level implementation handles the LED state cleanly within the ALSA subsystem itself. Whenever the master playback volume is muted, the driver natively communicates with the Realtek codec to trigger the GPIO pin connected to the physical LED. No scripts, no extra processes, and no broken state loops.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Secure Boot &amp;amp; &lt;code&gt;fedpkg&lt;/code&gt; Gauntlet
&lt;/h2&gt;

&lt;p&gt;Writing the C patch was only half the battle. To verify that this fix would behave flawlessly for an everyday Linux user, I had to test it under standard consumer conditions—which meant keeping &lt;strong&gt;Secure Boot enabled&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Modern Linux distributions protect the integrity of the kernel under Secure Boot by refusing to load unsigned custom modules or unverified kernel builds. To replicate a regular user environment without compromising security, I had to set up a full Machine Owner Key (MOK) infrastructure:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Generated a custom cryptographic &lt;strong&gt;MOK key pair&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enrolled the MOK public key into the system's UEFI firmware via the custom blue MOK management screen upon reboot.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Configured the Fedora package build system (&lt;code&gt;fedpkg&lt;/code&gt;) to compile a custom RPM package of the kernel.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Signed the resulting kernel build with my enrolled MOK key.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Seeing the custom kernel boot cleanly with Secure Boot active—and witnessing the mute LED light up natively for the very first time—was an incredibly satisfying milestone. The patch worked perfectly.&lt;/p&gt;




&lt;h2&gt;
  
  
  17 Hours: The Nuremberg Connection
&lt;/h2&gt;

&lt;p&gt;With a clean, verified patch in hand, it was time to brave the strict etiquettes of the Linux Kernel Mailing List (LKML). I formatted the patch precisely according to kernel documentation, composed a concise commit message, and fired it off using &lt;code&gt;git send-mail&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The email left my machine at around &lt;strong&gt;12:13 AM IST&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The patch landed in the inbox of &lt;strong&gt;Takashi Iwai&lt;/strong&gt; , the legendary maintainer of the Linux sound subsystem, located over in Nuremberg, Germany. I shut down my laptop expecting a long, agonizing wait filled with potential review iterations, formatting critiques, or silence. After all, kernel maintainers manage thousands of incoming patches alongside incredibly demanding schedules, and we both are humans who need sleep, food breaks, and time away from terminal screens.&lt;/p&gt;

&lt;p&gt;What happened next blew my mind.&lt;/p&gt;

&lt;p&gt;About &lt;strong&gt;17 hours&lt;/strong&gt; after I hit send, a notification popped up. Takashi Iwai had reviewed, verified, and accepted the patch with a wonderfully brief, classic kernel maintainer sign-off:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Applied to for-next branch. Thanks.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Takashi"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A 17-hour turnaround from an absolute stranger (he isn't) across the globe, cutting through time zones, personal routines, and heavy maintainer queues to pull my code into the official subsystem branch.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Mainline and Beyond
&lt;/h2&gt;

&lt;p&gt;A few weeks later, the merge window opened, and the commit officially entered the &lt;strong&gt;mainline Linux kernel&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But the story didn't end there. Because the patch fixed a genuine hardware defect on widely distributed consumer hardware, &lt;strong&gt;Sasha Levin&lt;/strong&gt; (another prominent kernel maintainer) picked it up and backported it into the active &lt;strong&gt;stable 6.x series&lt;/strong&gt; kernel updates.&lt;/p&gt;

&lt;p&gt;Today, anyone tracking the stable Linux kernel updates on an HP Victus laptop gets a working hardware mute LED completely out of the box—no custom scripts, no broken state, and no SELinux conflicts.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;p&gt;My first upstream commit taught me that the Linux kernel community, despite its intimidating reputation, is incredibly efficient when you respect the process, test rigorously against modern constraints (like Secure Boot), and solve structural problems at the right layer of the stack.&lt;/p&gt;

&lt;p&gt;If there is a hardware bug bugging you today, don't just patch it in user-space. Dig into the source. The view from the mainline is entirely worth it.&lt;/p&gt;




&lt;p&gt;Link to the commit:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=72919c57a055f6d7b79d66731dc398e9b433f47c" rel="noopener noreferrer"&gt;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=72919c57a055f6d7b79d66731dc398e9b433f47c&lt;/a&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>kernel</category>
      <category>mainline</category>
      <category>story</category>
    </item>
    <item>
      <title>Kotlin Multiplatform vs Flutter: Showdown time!</title>
      <dc:creator>Bharat Dev Burman</dc:creator>
      <pubDate>Fri, 17 Jul 2026 19:18:01 +0000</pubDate>
      <link>https://dev.to/crazo7924/kotlin-multiplatform-vs-flutter-showdown-time-1gl9</link>
      <guid>https://dev.to/crazo7924/kotlin-multiplatform-vs-flutter-showdown-time-1gl9</guid>
      <description>&lt;p&gt;In the ever-evolving landscape of cross-platform mobile development, two major contenders have emerged, each with a distinct philosophy: Kotlin Multiplatform (KMP) and Flutter. While both aim to solve the challenge of building applications for multiple platforms with a single codebase, they approach it from different angles, leading to a fascinating "showdown" in terms of features, performance, and development experience.&lt;/p&gt;

&lt;p&gt;Let's dive into a head-to-head comparison to help you understand which technology might be the best fit for your next project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kotlin Multiplatform: Native Fidelity with Shared Logic
&lt;/h2&gt;

&lt;p&gt;Kotlin Multiplatform, championed by JetBrains, takes a unique approach. Instead of providing its own rendering engine and UI framework, KMP focuses on sharing business logic, data models, networking, and other non-UI code across various platforms (Android, iOS, Web, Desktop). The key differentiator is that it allows for native UI development on each platform.&lt;/p&gt;

&lt;h3&gt;
  
  
  How it works:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You write your core application logic in Kotlin.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This shared Kotlin code is then compiled to native binaries for iOS (via Kotlin/Native) and JVM bytecode for Android.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For the UI, you leverage the native UI frameworks: Jetpack Compose for Android and SwiftUI/UIKit for iOS. With the advent of Compose Multiplatform, developers can now share UIs across platforms as well, bringing KMP closer to Flutter's full-stack cross-platform capabilities.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  KMP Advantages:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Native Performance and Look &amp;amp; Feel: By utilizing native UI frameworks, KMP ensures that your application looks and feels truly native on each platform. This can lead to superior performance and a more seamless user experience, as it directly taps into the platform's rendering capabilities.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Maximum Flexibility: KMP offers granular control over what you share. You can share just a small piece of critical logic, an entire domain layer, or even the UI with Compose Multiplatform. This flexibility is invaluable for projects that need to maintain a highly customized native experience.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Seamless Integration with Existing Native Codebases: For projects with existing Android or iOS apps, KMP can be gradually adopted to share new features or specific modules, without requiring a complete rewrite. This "incremental adoption" is a significant benefit.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Access to Native APIs: KMP provides direct and easy access to all platform-specific APIs and libraries, allowing you to leverage the full power of each operating system.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Kotlin Ecosystem: Developers familiar with Kotlin for Android development will find KMP a natural extension of their skillset.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  KMP Disadvantages:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Steeper Learning Curve for iOS Developers: While Android developers will find KMP familiar, iOS developers will need to learn Kotlin if they are working on the shared logic. For UI, they will still work with Swift/Objective-C and SwiftUI/UIKit.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Separate UI Development (Traditionally): Until recently, KMP primarily focused on shared logic, meaning you still had to write separate UIs for Android and iOS. While Compose Multiplatform addresses this, it's a newer addition and might require a learning curve for some.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Smaller Community and Library Ecosystem (Compared to Flutter): While growing rapidly, KMP's community and the number of ready-to-use third-party libraries are still smaller than Flutter's.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  KMP Use Cases:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Applications where a native look and feel and maximum performance are paramount.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Projects that need to share complex business logic across platforms while retaining platform-specific UIs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Existing native applications looking to gradually introduce cross-platform features without a full rewrite.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;SDKs and libraries that need to be consumed by both Android and iOS applications.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Augmented Reality, IoT, Wearables, and automotive applications where deep native integration is often required.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Flutter: Unified UI and Rapid Development
&lt;/h2&gt;

&lt;p&gt;Flutter, backed by Google, offers a complete cross-platform solution, including its own rendering engine (Skia) and a rich set of customizable widgets. Its philosophy is to write once, run anywhere, encompassing both business logic and UI.&lt;/p&gt;

&lt;h3&gt;
  
  
  How it works:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You write your entire application in Dart, a language optimized for client-side development.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Flutter's engine then compiles this Dart code into native ARM code for both Android and iOS, bypassing the need for a JavaScript bridge often found in other cross-platform frameworks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The UI is built entirely with Flutter's own widgets, which are rendered directly by the Skia (and now Impeller) engine, ensuring consistency across platforms.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Flutter Advantages:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Single Codebase for UI and Logic: This is Flutter's biggest draw, significantly accelerating development and reducing maintenance overhead.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fast Development with Hot Reload/Restart: Flutter's hot reload feature allows developers to see changes in real-time without losing the application's state, dramatically speeding up the iteration process.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rich Widget Catalog and Expressive UI: Flutter provides a comprehensive and customizable set of widgets that can be combined to create beautiful and complex UIs. Its declarative UI approach is often praised for its simplicity and power.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Consistent UI Across Platforms: Because Flutter renders its own UI, you get pixel-perfect consistency across Android and iOS, which can be a double-edged sword (see disadvantages).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Strong Community and Ecosystem: Flutter boasts a large and active community, along with a vast array of third-party packages and libraries, making it easier to find solutions and support.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Excellent Documentation and Tooling: Google provides extensive documentation and robust development tools (like DevTools) for Flutter.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Flutter Disadvantages:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Larger App Size: Flutter apps tend to be larger in file size due to the inclusion of the Flutter engine and its widgets within the app bundle.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Non-Native Look and Feel (Potentially): While Flutter strives to mimic native components with its Material Design and Cupertino widgets, it's still a custom rendering. This can sometimes lead to a subtle difference from a truly native application, especially as platform design trends evolve.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dart Language: While easy to learn, Dart is less widespread than Kotlin or Swift, which might present a learning curve for developers new to the language.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Limited Access to Deep Native Features (Comparatively): While Flutter provides plugins for accessing many native features, interacting with highly specific or bleeding-edge platform APIs might require writing custom platform channels.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Flutter Use Cases:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Applications prioritizing rapid development and a consistent UI across platforms.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Startups and small teams with limited resources who need to quickly launch an MVP on both Android and iOS.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Apps with custom UI designs that are not heavily reliant on strict native aesthetics.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Internal business applications or prototypes where time-to-market is critical.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Projects aiming for web and desktop support in addition to mobile.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Showdown: Who Wins?
&lt;/h2&gt;

&lt;p&gt;There's no single "winner" in the Kotlin Multiplatform vs. Flutter showdown. The best choice depends entirely on your project's specific needs, team expertise, and long-term goals.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Kotlin Multiplatform (KMP)&lt;/th&gt;
&lt;th&gt;Flutter&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Code Sharing&lt;/td&gt;
&lt;td&gt;Logic-centric, with optional shared UI (Compose Multiplatform)&lt;/td&gt;
&lt;td&gt;Full code sharing (UI and Logic)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UI Approach&lt;/td&gt;
&lt;td&gt;Native UI (Jetpack Compose, SwiftUI/UIKit) or Shared UI (Compose Multiplatform)&lt;/td&gt;
&lt;td&gt;Custom widget-based UI rendered by Skia&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performance&lt;/td&gt;
&lt;td&gt;Potentially higher (closer to native)&lt;/td&gt;
&lt;td&gt;Excellent, near-native performance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Look &amp;amp; Feel&lt;/td&gt;
&lt;td&gt;Truly native (when using platform UIs)&lt;/td&gt;
&lt;td&gt;Highly consistent, can mimic native but is custom-rendered&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Development Speed&lt;/td&gt;
&lt;td&gt;Fast for shared logic; UI still requires platform-specific knowledge (unless using Compose Multiplatform)&lt;/td&gt;
&lt;td&gt;Very fast with hot reload and single codebase&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Learning Curve&lt;/td&gt;
&lt;td&gt;Easier for Android devs, more for iOS devs (for shared logic)&lt;/td&gt;
&lt;td&gt;New language (Dart), but easy to pick up; consistent framework&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Community/Ecosystem&lt;/td&gt;
&lt;td&gt;Growing rapidly, but smaller than Flutter&lt;/td&gt;
&lt;td&gt;Large, mature, and highly active&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;App Size&lt;/td&gt;
&lt;td&gt;Generally smaller (especially with only shared logic)&lt;/td&gt;
&lt;td&gt;Generally larger&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Native API Access&lt;/td&gt;
&lt;td&gt;Direct and seamless&lt;/td&gt;
&lt;td&gt;Via plugins; custom platform channels for deeper access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Integration with Existing Apps&lt;/td&gt;
&lt;td&gt;Excellent for incremental adoption&lt;/td&gt;
&lt;td&gt;Possible, but can be more involved&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Choose Kotlin Multiplatform if:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You prioritize native performance and a truly native user experience.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You have an existing native codebase and want to gradually introduce cross-platform modules.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Your team has strong Kotlin and native mobile development expertise.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Your application requires deep integration with platform-specific APIs and hardware.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You are building an SDK or library that needs to be consumed by both Android and iOS apps.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Choose Flutter if:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You need to develop a mobile application quickly and efficiently for both Android and iOS.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You want a single codebase for both UI and business logic, maximizing code reuse.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You prioritize consistent UI and branding across all platforms.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Your team is comfortable learning Dart or has existing Dart expertise.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You are building an MVP or a consumer-facing app where rapid iteration is key.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;In conclusion, both Kotlin Multiplatform and Flutter are powerful tools for cross-platform development, each with its unique strengths. The "winner" in your specific scenario will be the one that best aligns with your project requirements, team capabilities, and strategic vision. The current trend suggests that while Flutter continues to dominate for full-stack cross-platform development, Kotlin Multiplatform, especially with Compose Multiplatform, is becoming an increasingly compelling option for those seeking the best of both native and cross-platform worlds.&lt;/p&gt;

</description>
      <category>comparison</category>
      <category>flutter</category>
      <category>kotlinmultiplatform</category>
      <category>mobileappdevelopment</category>
    </item>
    <item>
      <title>Revolutionizing the Android Build: An In-Depth Look at the Soong Build System</title>
      <dc:creator>Bharat Dev Burman</dc:creator>
      <pubDate>Thu, 05 Jun 2025 06:32:39 +0000</pubDate>
      <link>https://dev.to/crazo7924/revolutionizing-the-android-build-an-in-depth-look-at-the-soong-build-system-3jgg</link>
      <guid>https://dev.to/crazo7924/revolutionizing-the-android-build-an-in-depth-look-at-the-soong-build-system-3jgg</guid>
      <description>&lt;p&gt;The Android Open Source Project (AOSP) is a massive undertaking, comprising millions of lines of code across various languages. Building such a complex system efficiently and reliably is a monumental task. For years, the Android build relied heavily on GNU Make, but with the increasing complexity and scale of the platform, a more modern, robust, and performant solution was needed. This led to the introduction of the Android Soong build system, a significant leap forward in how Android is compiled.&lt;/p&gt;

&lt;h2&gt;
  
  
  From Make to Soong: The Evolution of Android Builds
&lt;/h2&gt;

&lt;p&gt;Prior to Android 7.0 (Nougat), the build process was primarily orchestrated by Android.mk files, which leveraged GNU Make. While Make was a staple for many years, its limitations became apparent as Android grew. Makefiles can become intricate and difficult to maintain, especially with conditional logic and complex dependencies. Incremental builds, crucial for developer productivity, were often unreliable, frequently necessitating a full rebuild to ensure correctness.&lt;/p&gt;

&lt;p&gt;Soong was introduced to address these challenges, aiming to provide a faster, more declarative, and maintainable build experience. It doesn't entirely replace all existing tools but rather integrates with them to create a streamlined workflow. At its core, Soong leverages the Kati GNU Make clone tool (for legacy Android.mk files during the transition) and the highly efficient Ninja build system as its backend.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Heart of Soong: Android.bp Files
&lt;/h2&gt;

&lt;p&gt;The most visible change with Soong is the shift from Android.mk files to Android.bp files. These Android.bp files are declarative descriptions of "modules" to be built, similar in syntax and semantics to Bazel BUILD files. This declarative nature is a key advantage, making build configurations more readable and less prone to errors compared to the imperative style of Makefiles.&lt;/p&gt;

&lt;p&gt;Here's what defines an Android.bp file:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Modules: The basic unit of building in Soong is a module. Each module starts with a module type (e.g., cc_binary, java_library, android_app) followed by a set of properties in a name: value format. Every module must have a unique name property.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Declarative Syntax: Android.bp files focus on what needs to be built and its dependencies, rather than how it should be built. The build logic itself is implemented in Go within Soong's internal components.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No Explicit If-Statements (mostly): Unlike Android.mk files that allowed complex conditional logic using ifeq, Android.bp files primarily rely on pre-defined distinctions like processor architecture or debug/release builds. Custom case distinctions are handled by the Go-based Soong modules themselves, promoting a cleaner and more structured build graph.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Globs and Variables: Android.bp supports glob patterns for file lists (e.g., src/**/*.java) and allows for top-level variable assignments, enhancing flexibility and reducing redundancy.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Comments: Both C-style /* */ and C++ style // comments are supported for better readability.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How Soong Works Under the Hood
&lt;/h2&gt;

&lt;p&gt;The Soong build system operates in a multi-stage process:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Parsing Android.bp Files: Soong parses all Android.bp files across the AOSP tree. This involves reading the declarative module definitions and their properties.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generating Ninja Build Files: Based on the parsed Android.bp files and the internal build logic (written in Go), Soong generates a highly optimized build.ninja file. Ninja is designed for speed and efficiency, particularly for incremental builds, by creating a precise dependency graph and executing build commands in parallel.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Kati for Legacy Android.mk: During the transition period, Kati acts as an intermediary, processing Android.mk files and generating additional .ninja files that integrate with the overall Ninja build graph. This allows for a gradual migration without requiring a complete rewrite of the entire AOSP at once.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ninja Execution: Finally, the Ninja build system takes the generated .ninja files and executes the actual build commands, compiling source code, linking libraries, and creating the final Android images and artifacts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;soong_ui as the Orchestrator: The soong_ui script acts as the primary driver for the entire build process, orchestrating the different stages and managing auxiliary tools.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Advantages of the Soong Build System
&lt;/h2&gt;

&lt;p&gt;The shift to Soong brings several significant advantages to Android platform development:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Improved Build Performance: By leveraging Ninja, Soong significantly speeds up build times, especially for incremental builds. This is crucial for developers who frequently make small changes and need quick feedback.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enhanced Reliability of Incremental Builds: Soong's precise dependency tracking and Ninja's efficient execution minimize the need for full rebuilds, making incremental builds more reliable and consistent.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Declarative and Readable Configuration: Android.bp files offer a cleaner, more understandable syntax compared to complex Makefiles, reducing the learning curve for new developers and improving maintainability.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stronger Type Checking: Soong's Go-based implementation allows for stronger type checking of variables and properties, catching errors earlier in the development cycle.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Better Scalability: The modular and declarative nature of Soong, combined with Ninja's parallelism, makes the build system more scalable to the ever-growing size and complexity of Android.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pathway to Bazel: The Android.bp file format is intentionally similar to Bazel's BUILD files, indicating a potential future direction for the Android build system to fully embrace Bazel, a highly scalable and reliable build system used by Google.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Challenges and the Road Ahead
&lt;/h2&gt;

&lt;p&gt;While Soong offers substantial improvements, the transition from Make has not been without its challenges. The migration of a massive codebase from one build system to another is a complex undertaking. Developers have had to adapt to the new Android.bp syntax and understand the underlying principles of Soong.&lt;/p&gt;

&lt;p&gt;Furthermore, dependencies between legacy Android.mk modules and new Android.bp modules can sometimes be intricate. While Android.mk modules can depend on Android.bp modules, the reverse is not always straightforward.&lt;/p&gt;

&lt;p&gt;Looking ahead, Google is actively exploring the integration of Bazel as the ultimate build system for AOSP. Soong serves as a crucial stepping stone in this evolution, providing a modern foundation that is more compatible with a Bazel-like philosophy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The Android Soong build system represents a pivotal advancement in Android platform development. By moving away from the limitations of Make and embracing a more declarative, performant, and scalable approach with Android.bp files and Ninja, Soong has significantly improved the efficiency and reliability of building the world's most popular mobile operating system. As Android continues to grow and evolve, Soong lays the groundwork for even more sophisticated build capabilities, ultimately contributing to a faster and more seamless development experience for the entire Android ecosystem.&lt;/p&gt;

</description>
      <category>android</category>
      <category>aosp</category>
      <category>buildsystem</category>
      <category>buildtool</category>
    </item>
    <item>
      <title>Try this instead of pip for your python projects</title>
      <dc:creator>Bharat Dev Burman</dc:creator>
      <pubDate>Thu, 06 Mar 2025 17:11:31 +0000</pubDate>
      <link>https://dev.to/crazo7924/try-this-instead-of-pip-for-your-python-projects-1d6m</link>
      <guid>https://dev.to/crazo7924/try-this-instead-of-pip-for-your-python-projects-1d6m</guid>
      <description>&lt;p&gt;I discovered this shiny new tool called &lt;code&gt;uv&lt;/code&gt; while trying to have my python dependencies managed better just like &lt;code&gt;yarn&lt;/code&gt; for node projects.&lt;/p&gt;

&lt;p&gt;It is not just fast but &lt;em&gt;blazing&lt;/em&gt; fast.&lt;/p&gt;

&lt;p&gt;This tool made me work much faster and spent less time staring at the screen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://x.com/charliermarsh/status/1758216803275149389" rel="noopener noreferrer"&gt;Checkout the post on X&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>uv</category>
      <category>dependencymanagement</category>
    </item>
    <item>
      <title>My Journey with Android</title>
      <dc:creator>Bharat Dev Burman</dc:creator>
      <pubDate>Fri, 11 Oct 2024 10:33:01 +0000</pubDate>
      <link>https://dev.to/crazo7924/my-journey-with-android-59g6</link>
      <guid>https://dev.to/crazo7924/my-journey-with-android-59g6</guid>
      <description>&lt;p&gt;My journey began with getting my first smartphone back in 2015. It was a Xiaomi Redmi 2 and had its bootloader already unlocked. This was very enticing as it opened some doors for me to experiment with that device.&lt;/p&gt;

&lt;p&gt;Then I found &lt;a href="https://xdaforums.com/" rel="noopener noreferrer"&gt;XDA developers&lt;/a&gt; – a forum dedicated to share and collaborate aftermarket operating system development based on AOSP. I quickly learnt that it was the base of all the Android powered smart devices.&lt;/p&gt;

&lt;p&gt;After that, I came across the Linux kernel and how Android is based on it. On visiting the &lt;a href="https://source.android.com" rel="noopener noreferrer"&gt;AOSP's website&lt;/a&gt;, I was mesmerized with the size and complexity of the code base and how the entirety of it is built. I also discovered something called as the Team Win Recovery Project, TWRP for short.&lt;/p&gt;

&lt;p&gt;After getting my second smartphone, the Redmi note 4(x), I experimented further and I got addicted. Now this was bad as it took away my free time meddling with my phone. But it didn't stop me and went ahead with my next smartphone: Samsung Galaxy A30.&lt;/p&gt;

&lt;p&gt;I wanted to get a headstart on the development so I voided it's warranty and unlocked the bootloader. Samsung is a different league altogether as it they also use to their own chipset (Exynos) and security measures (Knox) which was a hindrance. I nevertheless managed to port LineageOS. I felt great and then I joined a public Telegram group chat dedicated to this device and exchange knowledge. I eventually got fed up of this distraction and swapped my phone with my Moms’ – a Lenovo mobile. She was happy to get an upgrade in performance.&lt;/p&gt;

&lt;p&gt;That Lenovo mobile was actually more irritating as it was older than the Galaxy A30 and had a mediatek chipset. I started to understand why Qualcomm Snapdragon is way better. It unfortunately broke and I used an even older Sony Xperia as having a phone became a necessity.&lt;/p&gt;

&lt;p&gt;Time for another device – this time a Realme phone. I created and maintained a forum for this device. I also officially maintained the TWRP recovery for this device. The &lt;a href="https://t.me/Realme85G_Narzo305G_Official" rel="noopener noreferrer"&gt;chat still exists&lt;/a&gt; till date with 700+ odd members. I handed over the responsibility to someone else to focus on college.&lt;/p&gt;

&lt;p&gt;All of this might have taken away my precious time on something I do for free but I'm proud of my achievements.&lt;/p&gt;

&lt;p&gt;That's what matters – to think about the good stuff and not crib about what one couldn't do.&lt;/p&gt;

</description>
      <category>journey</category>
      <category>android</category>
      <category>aosp</category>
      <category>learning</category>
    </item>
    <item>
      <title>Make mistakes; It's fine</title>
      <dc:creator>Bharat Dev Burman</dc:creator>
      <pubDate>Fri, 19 Apr 2024 13:50:48 +0000</pubDate>
      <link>https://dev.to/crazo7924/make-mistakes-its-fine-31p5</link>
      <guid>https://dev.to/crazo7924/make-mistakes-its-fine-31p5</guid>
      <description>&lt;p&gt;It's alright to make mistakes. Everyone does. But it's very important to learn from them and change your approach on how you solve problems.&lt;/p&gt;

&lt;p&gt;Programmatically, writing Unit Tests is a must. It helps you prevent overlooking certain edge cases and sometimes the obvious like nullity.&lt;/p&gt;

</description>
      <category>mistakes</category>
      <category>learning</category>
    </item>
    <item>
      <title>Hello, World!</title>
      <dc:creator>Bharat Dev Burman</dc:creator>
      <pubDate>Mon, 18 Mar 2024 02:31:07 +0000</pubDate>
      <link>https://dev.to/crazo7924/hello-world-2jf6</link>
      <guid>https://dev.to/crazo7924/hello-world-2jf6</guid>
      <description>&lt;p&gt;Hello, World!&lt;/p&gt;

&lt;p&gt;I am, at the time of writing, a student pursuing Masters degree in Computer Science, and an origami artist. This art was the actual reason for getting interested with the field of Mathematics and over the course of time.&lt;/p&gt;

&lt;p&gt;I have published a research paper in the IEEE journal, an amazing feat to achieve when I was just 20 years old.&lt;/p&gt;

</description>
      <category>selfintroduction</category>
      <category>firstblog</category>
    </item>
  </channel>
</rss>
