Today I’m joined by Russell Keith-Magee. Russell is a Django core developer and the founder and maintainer of the BeeWare project. In the interview, we talk about his mission to help Python become a feasible option for writing and packaging mobile applications as well as his passion for open source projects. We also touch on his PyCon 2020 talk, which has since been recorded and uploaded to the PyCon YouTube channel.

So, without further ado, let’s get into it!

Ricky: Welcome to Real Python, Russell. Thanks for joining me for this interview. Let’s start the same way we always do. How’d you get into programming, and when did you start using Python?

Russell Keith Magee

Russell: My father has always been an early adopter of technology, and as a result, when I was eight or nine, he brought home one of the very first Commodore 64s imported into Australia.

As with many computers of that era, you couldn’t avoid programming with the Commodore 64 because when you turned it on, you were dropped directly into a BASIC programming environment.

There were also lots of children’s books around at the time that included program code you could type in. Those books would sell themselves as being SUPER EXCITING SPACE GAMES, but they were really just guess-the-random-number games with really good book art. However, that was enough to pique my interest.

Putting an exact date on when I started using Python is difficult. I remember coming across it in the late 1990s, around the Python 1.5 time frame, as a language being mostly used for Red Hat configuration management. My serious usage started around 2003, when I was starting to get into web programming. By the time I was a Django contributor, my day job became full-time Python—and it has been ever since.

Interestingly, my origin story and my Python background collided recently. Usborne, the publisher of some of my favorite Commodore-era programming books, open sourced the contents of their books, so I started a bit of a fun project to port the books to Python.

Ricky: Even though you’re one of Django’s core developers, would it be fair to say that you spend most of your open source time these days on the BeeWare project? For those who have yet to hear of BeeWare, what is it and what inspired you to start the project?

Russell: I have been involved with Django since 2005, and I joined the core team in early 2006. But I haven’t been very actively involved with the project since I stepped down as president of the Django Software Foundation at the end of 2016.

Since then, I’ve been mostly focused on the BeeWare project. BeeWare is a collection of tools and libraries for developing desktop and mobile applications. In the same way that Django makes it easy to get a database-backed website up and running, BeeWare aims to make it easy to write a native application for macOS, Windows, Linux, iOS, or Android that you can then distribute to end users as an installable app.

The original inspiration came from two separate directions. Firstly, I was the entire engineering team for a two-person web startup. Django let me rapidly iterate new features on our web stack. But we developed a need for a matching mobile application, and I couldn’t use Python because there wasn’t a viable option for writing a mobile app in Python.

I ended up using a cross-platform JavaScript toolkit, but I was really unhappy with it, partially because I wasn’t using my preferred language, but also because the resulting UI didn’t feel right. It wasn’t a native app—it was a web browser wrapped in a convenient wrapper. I wanted to fix this and make a truly native cross-platform app written in Python.

The other inspiration came from my programming past. I learned to program on a Commodore 64, but when I was getting serious, I started using the Borland suite of tools (Turbo C, Turbo Pascal, and others). The Borland suite had a really good editor and, more importantly, a really good visual debugger.

I wanted to rebuild that debugger, but for Python and using the full UI capabilities of my modern macOS laptop. However, I couldn’t find a GUI toolkit that was cross-platform, easy to distribute, and had a Pythonic API.

Combine this with the fact that I would need a new GUI toolkit to work on mobile, and I figured building a new GUI toolkit focused on being Python native and cross-platform would be the easiest approach. After all, how hard could it be? Famous last words, I know.

Ricky: At PyCon US this year, you were due to give a talk titled “Snakes in a case: Packaging Python apps for distribution,” which was focused on Briefcase, a tool that converts a Python-powered application to native installers on macOS, Windows, Linux, and mobile devices. Python has traditionally struggled to make packaging and sharing applications as easy as it is in other languages. Is that changing? Are native mobile apps in Python’s future?

Russell: I think this situation has to change—and if it doesn’t, Python may find it gets replaced.

Python comes from a long tradition of server-side code, and that won’t ever go away. But the computing ecosystem is changing.

My son started high school just over two years ago. The school presents teaching materials electronically. However, his school-mandated computing device isn’t a laptop. It’s an iPad. That’s not an unusual experience, either. iPads, smart phones, and tablets are gaining market penetration that laptops have never seen.

So when my son (or anyone else for that matter) wants to learn to program, why would he learn a programming language that he can’t use on his computing device? If Python doesn’t develop a story for developing applications for iOS and Android, then we’re going to find that users who have traditionally learned Python are going to learn other programming languages like JavaScript, Swift, and Kotlin—languages that do have a mobile story.

Packaging is a closely related problem. If you want to install an app on these new devices, you don’t download an installer from a website. You must go through the manufacturer’s app store.

This philosophy is starting to become more common on desktop operating systems, too. macOS and Windows won’t prevent you from installing apps you download from the Internet, but they’re definitely making it harder to do so, and end users enjoy the simplicity of a simple Install from App Store link.

Completely aside from that technical limitation, having a good answer for the question, How do I give my code to someone else? is critical. If your distribution story for your cool new game demo or data visualization involves “Download Python, then create a virtual environment, then pip install…then work out why pip didn’t work,” that’s not a compelling experience.

This is especially important in a world where the competition, JavaScript, is installed by default on almost every computer and is attached to a built-in mechanism for distribution: the Web. So, BeeWare is my answer to this challenge.

BeeWare includes a cross-platform widget toolkit (Toga) and libraries to let you run Python on iOS and Android. It also includes Briefcase, a tool that can take a collection of Python code and turn it into a distributable unit that you can just give to an end user.

For macOS, Briefcase produces an .app bundle that you can drop in your Applications folder. On Linux, it produces AppImages. On Windows, it produces MSI installers, and for iOS and Android, it produces projects that can be uploaded to the iOS App Store or Google Play Store.

However, Briefcase isn’t bound to the BeeWare libraries. You can use Briefcase to package a PursuedPyBear game, a PySide Qt, a Tkinter app, or any other Python GUI toolkit. Briefcase won’t make Tkinter work on mobile, but it will solve the problem of packaging apps on platforms where Tk does work.

Ricky: What does the future hold for BeeWare? What’s your vision for the project’s future?

Russell: In the short term, I want to get the full suite to 1.0 status. In practice, that means having features at least equivalent to Tkinter (the GUI toolkit baked into Python itself) across all five supported platforms.

We’re getting fairly close to this goal. Thanks to a recent grant from the PSF, the Android back end, which has historically lagged behind, has undergone rapid progress over the last few months. We’ve also had some really good recent community contributions improving the Windows back end.

Longer term, I would like to see BeeWare start to eat its own dogfood. As I said previously, BeeWare started (in part) as an attempt to build a debugger. I’d still like to revisit that along with other developer tools like coverage tools, test runners, and the holy grail: an editor.

I’d also like to see us develop tools for developing GUI applications—drag-and-drop tools for defining user interfaces with one-click mechanisms for building apps and deploying them to app stores. Since the BeeWare tools are all cross-platform, anything that works on desktop will also work on mobile, so having development tools for iOS and Android that run on iOS and Android is part of that vision.

The one big technical area I’d like to address is the Web. In the past, we’ve demonstrated a pure Python web application—that is, a web application where all the client-side behavior in the browser is running as Python, not JavaScript. The emergence of WASM as a technology has made this even more plausible, so I’d like to be able to expand BeeWare so that the Web is yet another deployment platform from the perspective of the BeeWare developer.

From the perspective of the project, I’d like to see BeeWare become financially self-sustaining, a project in which ongoing development and maintenance isn’t beholden to the spare time of volunteers. I’d like to find ways to pay core project maintainers and, ideally, pay for interns and junior engineers as well so that experienced team members can share their knowledge and experience with the next generation of FLOSS developers.

Finding a viable model for generating ongoing revenue that doesn’t undermine the open source goals of the project is one of my biggest challenges at present. If anyone in your audience has any ideas on this front, I’m definitely interested in hearing them.

Ricky: Now for my last few questions. What else do you get up to in your spare time? What other hobbies and interests do you have aside from Python and programming?

Russell: As boring as it may sound, BeeWare (and open source generally) really is a passion for me, so that consumes a lot of my spare time. Some people do Sudoku or crosswords in their spare time. I hack on weird open source projects.

However, when I’m not programming, I enjoy tabletop board games, and I’m also a fan of sci-fi TV and film.

It was great talking with you, Russell. If you want to reach out to Russell to say hi, then you can find him on Twitter and on his personal blog. If you want to try out—or get involved with—the BeeWare project, then head to their website and review the docs.

If there’s someone you’d like me to interview next, then please do reach out to me in the comments below or send me a message on Twitter. Happy coding!