Welcome to my C Learning Projects repository! This collection of projects and exercises is part of my extended journey to master C programming and system-level concepts, ultimately preparing me for Linux kernel development. Over the next 6-8 months, I will be working on various projects covering a wide range of topics in C, including memory management, system calls, process control, data structures, and kernel modules.
During this period, I will also be actively seeking internship opportunities in big tech companies to gain practical experience and apply my growing skills in real-world scenarios.
- Implementations of core data structures such as:
- Linked Lists
- Binary Trees
- Hash Tables
- Heaps
- These implementations focus on efficient memory use and pointer management in C.
- Projects that explore:
- Process management using
fork
,exec
,wait
- Inter-process communication (IPC) via pipes and message queues
- A simple command-line shell that supports I/O redirection and process piping.
- Process management using
- Custom implementations of memory management functions:
malloc
andfree
- Paging and virtual memory simulations
- Projects that simulate memory allocation for dynamic data structures and applications.
- Exploring the Linux kernel:
- Writing and loading kernel modules (e.g., "Hello World" module)
- Custom system calls
- Kernel-level memory management and process control.
As part of my journey to becoming a Linux Kernel Engineer, I will be searching for internship opportunities at the following big tech companies and notable firms:
- Amazon (AWS) – Focuses on cloud infrastructure, Linux-based systems, and custom kernel optimizations.
- Google – Known for its contributions to Linux and open-source projects, as well as its use of Linux-based systems in Google Cloud.
- Microsoft (Azure) – Works on cloud infrastructure (Azure) and has a growing focus on Linux systems.
- Apple – Heavily involved in kernel development for its own operating systems (macOS, iOS).
- Facebook (Meta) – Runs Linux-based infrastructure and works on large-scale system optimizations.
- Tesla – Uses Linux-based systems in its cars and for its backend infrastructure.
- Nvidia – Involved in Linux kernel development, especially for GPU drivers and hardware-accelerated computing.
- Intel – Works on hardware and Linux drivers, firmware, and kernel development.
- IBM (Red Hat) – A key player in Linux development and open-source contributions (Red Hat Enterprise Linux).
- Oracle – Focuses on cloud computing, database solutions, and Linux kernel optimizations (Oracle Linux).
- Canonical (Ubuntu) – Major contributors to the Linux kernel and maintainers of Ubuntu, a popular Linux distribution.
- SUSE – A leader in enterprise Linux solutions, contributing heavily to the Linux kernel.
- Netflix – Uses Linux-based infrastructure for its streaming platform and often works on kernel optimizations.
- VMware – Focuses on virtualization technologies and works closely with Linux kernels.
- Qualcomm – Involved in embedded Linux development, particularly for mobile devices and IoT.
- ARM – Works on Linux kernel development for ARM-based processors.
- AMD – Involved in Linux kernel development, particularly for GPU drivers and hardware integration.
- Cisco – Works on networking systems with a strong focus on Linux for routers and switches.
- Dropbox – Runs large-scale Linux-based systems for storage and file synchronization services.
- Samsung – Uses Linux for its mobile and embedded systems, contributing to kernel and hardware development.
- Build a strong foundation in C programming and low-level system concepts.
- Gain proficiency in writing efficient, memory-safe C code.
- Understand process control, system calls, and inter-process communication (IPC).
- Prepare for Linux kernel development by building and exploring kernel modules.
- Search for internships at big tech companies to gain hands-on industry experience.
- Progress toward my long-term goal of becoming a Linux Kernel Engineer.
C_Learning_Projects/
│
├── Data_Structures/
│ ├── linked_list.c
│ ├── binary_tree.c
│ └── hash_table.c
│
├── System_Programming/
│ ├── simple_shell.c
│ ├── process_management.c
│ └── scheduling_simulation.c
│
├── Memory_Management/
│ ├── custom_malloc.c
│ └── memory_allocator.c
│
└── Kernel_Projects/
├── hello_world_module.c
└── custom_syscall.c
- Clone the repository:
git clone https://github.com/Joshua-Coded/C_Learning_Projects
- Navigate to the project folder:
cd C_Learning_Projects/Data_Structures
- Compile and run:
gcc linked_list.c -o linked_list ./linked_list
While this repository is focused on my personal learning journey, contributions, suggestions, and feedback are always welcome! Feel free to submit a pull request or open an issue if you have ideas or improvements.
Feel free to explore the projects, and if you find them helpful or interesting, give them a ⭐!