Python 3.13 shipped October 7, 2024, and honestly, we waited 20 years for GIL removal just to find out it makes our code slower. The core team finally gave us what we asked for, but like most monkey's paw situations, there's a catch - your regular Python code runs worse without the GIL because atomic reference counting is expensive.
Free-Threading Mode: We Got What We Asked For (And Regretted It)
The free-threaded mode disables the GIL but makes everything slower because now every object access needs atomic reference counting. I tested this on our Django app and requests were noticeably slower - maybe 30-50% worse, didn't time it precisely. Turns out the GIL wasn't the performance bottleneck we thought it was.
You only get benefits when running actual parallel CPU work. Your typical web app hitting a database? Slower. Your REST API returning JSON? Also slower. Only scientific computing with tight loops across multiple cores sees improvements, and even then, you're better off using multiprocessing.
C extensions crash constantly with free-threading. NumPy? Broken. Pandas? Broken. Pillow? You guessed it - broken. I spent some ungodly amount of time last week debugging segfaults just to realize I had free-threading enabled. Check the compatibility tracker but honestly, assume everything is broken until proven otherwise.
Don't use this in production. The Python core team is still fixing the C API and most package maintainers are overwhelmed trying to make their stuff thread-safe.
JIT Compiler: Only Helps If You're Doing Math (You're Probably Not)
The JIT compiler speeds up tight math loops and basically nothing else. Enable it with PYTHON_JIT=1
or python -X jit
if you want to watch your startup time get worse.
I ran this on different workloads:
- NumPy matrix multiplication: way faster when it works (maybe 20-40%)
- Django view returning user data: slower due to JIT overhead
- FastAPI processing JSON: basically the same, maybe worse
- File operations: JIT doesn't help I/O at all
The copy-and-patch approach only works when your code runs the same hot path repeatedly. Most web apps jump around between different request handlers, so the JIT never gets warm. PyPy already does JIT compilation better, but we all ignore PyPy because package compatibility is a nightmare.
Mobile Support: Python on Mobile Is Still a Bad Idea
Python 3.13 supports iOS and Android as Tier 3 platforms, which basically means "good luck, you're on your own." You can build mobile apps with BeeWare or Kivy, but you probably shouldn't.
Tier 3 support means they barely test it and when shit breaks, you get to figure it out yourself:
- Debugging? Hope you like print statements because that's all you get
- App Store approval? Apple hates interpreted languages, prepare for rejection
- Performance? Your app will be slower than molasses and drain the battery
- Package compatibility? Most Python packages assume desktop Linux
I tried building an internal tool with BeeWare last year and spent more time fighting the toolchain than writing code. Just use React Native or Flutter - they actually work.