About this role
Imagine what you could do here. At Apple, new ideas quickly become products, services and experiences that people love. As an intern in the Core Virtualisation team, you'll do real engineering work alongside experienced engineers on technology that ships across the Apple ecosystem.
The Core Virtualisation team builds features that bring hardware, system software and apps together into one Apple experience. If you like to know how things work at the lowest level, from CPU architecture to the kernel to the frameworks developers use, this internship is a chance to learn from the people who build them.
The Virtualisation team builds the core technology that lets developers and users run macOS and other operating systems and environments reliably on their Mac. Our work covers kernel-level support, the Hypervisor framework and the Virtualisation framework.
As an intern, you'll own a meaningful project with guidance from a dedicated mentor and support from the wider team. Depending on your interests and the team's needs, you might:
- Explore, prototype and build new features in Apple's Hypervisor or Virtualisation frameworks.
- Help improve existing features in the Apple virtualisation stacks.
- Write tests and test tools that improve the reliability and correctness of virtualisation components.
- Investigate and debug issues that span the kernel, the hypervisor, user space and guest operating systems.
- Measure and analyse virtual machine performance and look for ways to improve it.
- Take part in code reviews and design discussions, and present your work to the team at the end of your internship.
You'll write production-quality C and C++, learn how a modern OS and hypervisor work on Apple silicon, and see how hardware and software teams work together to deliver new features.
Minimum Qualifications
Exposure to virtualisation technologies (for example KVM, QEMU, Xen, Hyper-V or similar) through coursework, research, open source or personal projects.
Familiarity with the Arm architecture (Armv8/Armv9) or experience with any assembly language.
Experience with kernel development, device drivers or bare-metal / embedded programming.
Experience debugging low-level software with tools such as LLDB/GDB.
Interest in software testing and in designing systems that are easy to test.
Curiosity, eagerness to learn, and clear written and verbal communication.
Preferred Qualifications
Currently enrolled in a Bachelor's, Master's or PhD programme in Computer Science, Computer Engineering, Electrical/Electronic Engineering or a related field.
Solid programming skills in C and/or C++.
Coursework or project experience in at least one of: operating systems, computer architecture, systems programming or compilers.
Understanding of core OS concepts such as processes, memory management, and interrupts/exceptions.