We are seeking a Systems SW Engineer with strong design and build skills, experience with low-level systems software and device driver programming and experience with shipping hardware/software products. This person will be an integral member of the team, responsible for embedded software design and optimization. This person will also be involved in developing a solid platform while working on a variety of domains to enable new experiences for AR/VR products.
Responsibilities
- Design and implement OS components at all layers of the system, e.g. kernel, synchronization primitives, resource allocators, memory management, security, I/O systems, persistence, etc.
- Work with hardware vendors and the upstream community to debug and tune drivers as needed.
- Design and implement device and bus drivers that operate efficiently in a power constrained environment yet when pressed can efficiently deliver large volumes of data with low-latency and high-bandwidth.
- Debug complex, system-level, multi-component issues that typically span across multiple layers from kernel to application.
- Profile performance problems and drive optimizations that span the entire software stack.
- Bring up new devices and lead debugging and performance tuning exercises that span multiple hardware/firmware/software teams.
- Understand software components from multiple partner teams, lead the integration of those components into the unified product code base, and drive their continued development.
Minimum Qualifications
- Bachelor’s degree in Computer Science, Computer Engineering or equivalent combination of education and experience.
- 4+ years of programming experience in C/C++.
- 4+ years experience in the following: device driver development or embedded systems, or operating systems internals on at least one platform.
- 4+ years experience working on systems software in a large-scale code base.
- 4+ years experience developing, debugging, and shipping software products on large code bases that span platforms and tools.
Preferred Qualifications
- Experience with Software Development processes including: source control, bug tracking, and design documentation.
- Experience working on multiple classes of drivers e.g., bus, block, wireless, display drivers.
- Experience developing low level system services exchanging data using using standard IPC techniques.
- Experience with specialized kernel functions: synchronization primitives, memory management, schedulers and dispatchers, TLB (Translation Lookaside Buffer) management.
- Experience with low-latency, high bandwidth, streaming hardware devices, e.g. video cameras, graphics cards, etc.
- Experience with new device bring-up.
- Experience with ARM platforms.
- Experience in native systems development.
- Experience developing HAL and device drivers for embedded Linux or Android.
- Experience with building software security for Operating Systems.