thảo luận [Tâm sự] Nghề dev Linux kernel ở Việt Nam

PhuThoDien

Senior Member
Một lĩnh vực hẹp mà nhiều thím đang làm về lập trình cũng không biết nó là cái gì.
Hệ điều hành bao gồm 2 khối, khối bên ngoài là tầng application tương tác với người dùng, khối bên trong là tầng nhân - kernel. Kernel phụ trách những công việc quan trọng như lập lịch, quản lý phần cứng.

Ở Việt Nam thì gần như không có job về mảng này, đơn giản là nước ta không tự làm được hệ điều hành, và cũng không tham gia phát triển những hệ điều hành open source như Linux và Android. Đôi khi cũng có những dự án yêu cầu can thiệp vào tầng nhân, nhưng thường chết yểu vì không có người làm được. Cũng may là có mảng embedded Linux gỡ gạc lại. Embedded Linux muốn làm được thì cần 1 phần nhỏ kiến thức về nhân. Cụ thể là cần hiểu về module driver - một trong số nhiều khối của kernel. Như mình thấy hiện tại thì nhiều bạn sinh viên đã biết về xu thế công nghệ trong lĩnh vực embedded đang chuyển dịch từ thuần vi điều khiển sang sử dụng Linux hoặc Android. Nên nhiều bạn cũng mày mò học về cách code driver trên Linux.

Làm về embedded Linux thì cần kiến thức tốt về hardware, lập trình vi điều khiển. Bản thân mình lại xuất thân từ software application. Mình cũng có nhiều kinh nghiệm làm về embedded, hiện tại nếu theo embedded thì lương cũng rất ổn. Tuy nhiên mình luôn ước mơ 1 ngày nào đó sẽ có cơ hội làm chung team với những chuyên gia về Linux kernel của thế giới. Nếu theo hướng embedded thì giấc mơ này sẽ không bao giờ thành hiện thực được. Tạm hiểu là nếu theo embedded Linux, device driver thì mình chỉ có thể đạt level senior developer chứ không thể lên mức expert được.

Tính đến hiện tại, mình đã học về kernel được gần 10 năm. Từ hồi bắt đầu đi làm đến giờ mình đều làm việc xoay quanh nó, về nhà lại dành thêm 1 - 2 tiếng để tự học thêm. Tiếng anh mình giao tiếp cũng tốt. Mình nghĩ hiện tại ở VN khó có ai am hiểu về lĩnh vực này hơn mình. Nếu như nó là một công nghệ phổ biến như lập trình app, web hoặc AI thì mình đã có rất nhiều đất để diễn. Tuy nhiên tình trạng của mình hiện tại nó giống như kiểu hoạ sĩ vẽ tranh đem bán ở làng quê vậy.

Nhiều bạn sẽ hỏi tại sao mình không đi nước ngoài làm việc. Kể cả ở những nước phát triển thì số lượng công ty làm về cái này cũng không nhiều. Thường là những công ty thuôc dạng khủng như kiểu Google, Facebook, Amazon... họ mới làm. Để join vào những công ty này một là bạn phải đi học ở trường top rồi thực tập và làm việc giống như Fresher ở Việt Nam. Cửa thứ 2 là bạn là chuyên gia trong lĩnh vực đó, đã có nhiều kinh nghiệm, bạn phỏng vấn và vào thẳng dự án. Vấn đề của mình nằm ở đây, mình đã có gia đình và quá già cho cách một nhưng lại không có đủ skill và kinh nghiệm để vào bằng cách 2. Mình làm về kernel ở VN được gần 10 năm, nhưng đa số công việc cũng chỉ sử dụng kiến thức về kernel chứ không phải trực tiếp phát triển nó. Mà cái những công ty kia yêu cầu là kinh nghiệm phát triển trực tiếp những đoạn code nằm trong nhân.

Nếu bây giờ mình tạm gác ước mơ lại. Tiêp tục làm về embedded, học nâng cao thêm kiến thức về phần cứng. Mình sẽ có một mức lương cao ở VN. Nếu muốn đi nước ngoài làm việc chắc cũng không khó vì học sinh của mình có nhiều bạn đang làm ở nước ngoài. Có thể nhờ họ giới thiệu cho vào làm cùng công ty.

Nhưng cuộc sống này ai cũng chỉ được sống một lần, mình muốn cố gắng hết sức để sau này khi về già không phải hối tiếc. Vậy nên mình vẫn chọn đi tiếp con đường chông gai. Thời gian tới mình sẽ làm những video training Linux kernel bằng tiếng anh, tìm cách tham gia vào phát triển Linux kernel cùng với community của họ, tất nhiên là không được đồng nào cả. Hi vọng sau vài năm nữa, mình sẽ có được mối quan hệ với các developer đang phát triển nhân Linux kernel. Từ đó có thể sang nước ngoài và làm việc cùng họ.

Linux kernel có gì mà mình lại yêu thích nó đến vậy? Đơn giản là do mình có cảm giác quen thuộc với nó, giống như đôi bàn tay của mình. Hoặc mỗi khi có ai đó hỏi mình về một vấn đề khó khăn mà họ bế tắc cả tháng trời, mình lại nhanh chóng đưa ra một cách giải quyết đơn giản. Lúc đó mình có cảm giác là họ ngạc nhiên giống như mình đang làm ảo thuật vậy. Có thể kể ra một vài câu chuyện khá buồn cười sau đây:

1. Bạn A code hàm đọc dữ liệu từ phần cứng. Hệ thống thỉnh thoảng bị crash. Sau một thời gian dài debug thì bạn ý phát hiện là lỗi liên quan đến con trỏ truy cập vào vùng nhớ không hợp lệ. Bạn ý check lại tất cả những đoạn code gọi hàm malloc, tất cả các con trỏ đều kiểm tra khác NULL trước khi sử dụng. Nhưng thỉnh thoảng bug vẫn xuất hiện. Khi bạn ý hỏi mình, mình bảo bạn ý là nên thay hàm malloc bằng hàm calloc, bạn ý làm theo và bug biến mất.
2. Thiết bị sau khi xuất xưởng được chạy test tự động, sau vài ngày chạy test thì ngẫu nhiên có 1 thiết bị bị khởi động lại. Khách hàng bắt team ở VN kiểm tra, team ở VN cũng không biết tại sao. Bug có log nhưng lại không tái hiện lại được. Team thử upgrade kernel version lên thì thấy chạy test không bị lỗi đấy nữa. Dò theo log cũ thì phát hiện ra 1 commit trong kernel nhìn có vẻ liên quan đến việc fix bug đó. Nhưng đọc commit message mãi không hiểu được họ nói gì. Cả team khách hàng bên Nhật lẫn đội bên VN đều chịu. Mà bug nó xuất hiện ngẫu nhiên với tần xuất nhỏ, nên cũng không ai dám chắc là đã được fix thật chưa. Về sau họ gửi mail hỏi khắp cty xem có ai biết về Linux kernel không để support. Mình đọc commit message, tìm hiểu các khái niệm xung quanh rồi giải thích cho họ. Sau đó mình tái hiện được lại bug. Từ đấy họ gọi mình là super man. Về sau có 1 lần khách hàng họ sang họp, họ gọi mình vào để giới thiệu mặc dù không cùng dự án. Họ trong Sài Gòn còn mình ở HN.
3. Hàm gettimeofday() trong thư viện của C bị lỗi memory leak. Bạn dev đó fix 2 tháng lỗi memory leak mà không biết nguyên nhân vì đâu. Quan trọng là ngay từ ban đầu không ai nghĩ các hàm của libc có thể bị lỗi này, nên lúc review code mặc định chúng ta bỏ qua. Về sau mình hướng dẫn bạn ý dò ra được lỗi, sau đó report lại cho bên làm trình biên dịch của hãng chip để họ fix.
4. Ngoài ra thì còn vô số những kỷ niệm buồn cười khác, có cái mình nhớ và có cái mình quên rồi.

Nói chung nếu không tính embedded Linux thì Linux kernel không phát triển ở Việt Nam. Vì theo nghề này mà mình cũng có nhiều kỷ niệm vui buồn lẫn lộn. Nhưng trên hết là nhờ nó mà mình được sống một cuộc sống có ý nghĩa, được quen biết nhiều người. Cũng có lúc thấy hơi nản vì con đường theo nó sao mà chông gai. Nhưng kệ thôi, còn sống là còn chiến đấu.

Nay tâm trạng chán đời nên bài viết lan man quá, cám ơn các bạn đã đọc bài.

P2: Các dev về Linux kernel kiếm tiền như thế nào?

P3: Các dự án về Linux kernel ở VN họ đang làm gì

P4: Chuyện mở công ty

Phần 5: 10 năm làm nghề

P6: Lương và thu nhập

P7. Dev già và sự thay đổi công nghệ

P8. Làm remote

P9. Tình yêu với nghề

P10. Môi trường làm việc ở Big Tech
 
Last edited:
Thế hả?
Hồi trước em cũng làm 1 năm rưỡi về porting linux, giờ sắp về lại làm với linux này. Đúng là giờ ít dự án dùng nó thật đặc biệt automotive. Hic

via theNEXTvoz for iPhone
Mảng embedded Linux nhiều job mà thím. Em bị khó chủ yếu là do em muốn theo hướng thuần kernel chứ ko phải là embedded.
 
Khâm phục tiền bối. Đọc thớt e lại nhớ lại ước mơ của mình lúc mới chập chững bước vào IT. Còn giờ thì e đang là dev quèn code web :too_sad:

via theNEXTvoz for iPhone
 
Mảng embedded Linux nhiều job mà thím. Em bị khó chủ yếu là do em muốn theo hướng thuần kernel chứ ko phải là embedded.
Về đà nẵng có cty nào làm embedded linux lương cao ko thím?
Bên embed này làm kinh nghiệm nhiều mà lương cũng ko cao như web/app. Thím nghĩ làm vì lương thì có nên làm C++ ở lớp app ko ạ?

via theNEXTvoz for iPhone
 
Về đà nẵng có cty nào làm embedded linux lương cao ko thím?
Bên embed này làm kinh nghiệm nhiều mà lương cũng ko cao như web/app. Thím nghĩ làm vì lương thì có nên làm C++ ở lớp app ko ạ?

via theNEXTvoz for iPhone

Nếu về Đà Nẵng thì fence có thể apply Fsoft, LG rồi yêu cầu chi phí chuyển công tác về Đà Nẵng. Lót tay mấy chục triệu lận. Làm tầng app giờ hoặc nó làm app Android luôn hoặc nó làm kiểu webapp chứ không chuộng làm C++ liên kết với engine or thư viện đồ hoạ đâu
 
Một lĩnh vực hẹp mà nhiều thím đang làm về lập trình cũng không biết nó là cái gì.
Hệ điều hành bao gồm 2 khối, khối bên ngoài là tầng application tương tác với người dùng, khối bên trong là tầng nhân - kernel. Kernel phụ trách những công việc quan trọng như lập lịch, quản lý phần cứng.

Ở Việt Nam thì gần như không có job về mảng này, đơn giản là nước ta không tự làm được hệ điều hành, và cũng không tham gia phát triển những hệ điều hành open source như Linux và Android. Đôi khi cũng có những dự án yêu cầu can thiệp vào tầng nhân, nhưng thường chết yểu vì không có người làm được. Cũng may là có mảng embedded Linux gỡ gạc lại. Embedded Linux muốn làm được thì cần 1 phần nhỏ kiến thức về nhân. Cụ thể là cần hiểu về module driver - một trong số nhiều khối của kernel. Như mình thấy hiện tại thì nhiều bạn sinh viên đã biết về xu thế công nghệ trong lĩnh vực embedded đang chuyển dịch từ thuần vi điều khiển sang sử dụng Linux hoặc Android. Nên nhiều bạn cũng mày mò học về cách code driver trên Linux.

Làm về embedded Linux thì cần kiến thức tốt về hardware, lập trình vi điều khiển. Bản thân mình lại xuất thân từ software application. Mình cũng có nhiều kinh nghiệm làm về embedded, hiện tại nếu theo embedded thì lương cũng rất ổn. Tuy nhiên mình luôn ước mơ 1 ngày nào đó sẽ có cơ hội làm chung team với những chuyên gia về Linux kernel của thế giới. Nếu theo hướng embedded thì giấc mơ này sẽ không bao giờ thành hiện thực được. Tạm hiểu là nếu theo embedded Linux, device driver thì mình chỉ có thể đạt level senior developer chứ không thể lên mức expert được.

Tính đến hiện tại, mình đã học về kernel được gần 10 năm. Từ hồi bắt đầu đi làm đến giờ mình đều làm việc xoay quanh nó, về nhà lại dành thêm 1 - 2 tiếng để tự học thêm. Tiếng anh mình giao tiếp cũng tốt. Mình nghĩ hiện tại ở VN khó có ai am hiểu về lĩnh vực này hơn mình. Nếu như nó là một công nghệ phổ biến như lập trình app, web hoặc AI thì mình đã có rất nhiều đất để diễn. Tuy nhiên tình trạng của mình hiện tại nó giống như kiểu hoạ sĩ vẽ tranh đem bán ở làng quê vậy.

Nhiều bạn sẽ hỏi tại sao mình không đi nước ngoài làm việc. Kể cả ở những nước phát triển thì số lượng công ty làm về cái này cũng không nhiều. Thường là những công ty thuôc dạng khủng như kiểu Google, Facebook, Amazon... họ mới làm. Để join vào những công ty này một là bạn phải đi học ở trường top rồi thực tập và làm việc giống như Fresher ở Việt Nam. Cửa thứ 2 là bạn là chuyên gia trong lĩnh vực đó, đã có nhiều kinh nghiệm, bạn phỏng vấn và vào thẳng dự án. Vấn đề của mình nằm ở đây, mình đã có gia đình và quá già cho cách một nhưng lại không có đủ skill và kinh nghiệm để vào bằng cách 2. Mình làm về kernel ở VN được gần 10 năm, nhưng đa số công việc cũng chỉ sử dụng kiến thức về kernel chứ không phải trực tiếp phát triển nó. Mà cái những công ty kia yêu cầu là kinh nghiệm phát triển trực tiếp những đoạn code nằm trong nhân.

Nếu bây giờ mình tạm gác ước mơ lại. Tiêp tục làm về embedded, học nâng cao thêm kiến thức về phần cứng. Mình sẽ có một mức lương cao ở VN. Nếu muốn đi nước ngoài làm việc chắc cũng không khó vì học sinh của mình có nhiều bạn đang làm ở nước ngoài. Có thể nhờ họ giới thiệu cho vào làm cùng công ty.

Nhưng cuộc sống này ai cũng chỉ được sống một lần, mình muốn cố gắng hết sức để sau này khi về già không phải hối tiếc. Vậy nên mình vẫn chọn đi tiếp con đường chông gai. Thời gian tới mình sẽ làm những video training Linux kernel bằng tiếng anh, tìm cách tham gia vào phát triển Linux kernel cùng với community của họ, tất nhiên là không được đồng nào cả. Hi vọng sau vài năm nữa, mình sẽ có được mối quan hệ với các developer đang phát triển nhân Linux kernel. Từ đó có thể sang nước ngoài và làm việc cùng họ.

Linux kernel có gì mà mình lại yêu thích nó đến vậy? Đơn giản là do mình có cảm giác quen thuộc với nó, giống như đôi bàn tay của mình. Hoặc mỗi khi có ai đó hỏi mình về một vấn đề khó khăn mà họ bế tắc cả tháng trời, mình lại nhanh chóng đưa ra một cách giải quyết đơn giản. Lúc đó mình có cảm giác là họ ngạc nhiên giống như mình đang làm ảo thuật vậy. Có thể kể ra một vài câu chuyện khá buồn cười sau đây:

1. Bạn A code hàm đọc dữ liệu từ phần cứng. Hệ thống thỉnh thoảng bị crash. Sau một thời gian dài debug thì bạn ý phát hiện là lỗi liên quan đến con trỏ truy cập vào vùng nhớ không hợp lệ. Bạn ý check lại tất cả những đoạn code gọi hàm malloc, tất cả các con trỏ đều kiểm tra khác NULL trước khi sử dụng. Nhưng thỉnh thoảng bug vẫn xuất hiện. Khi bạn ý hỏi mình, mình bảo bạn ý là nên thay hàm malloc bằng hàm calloc, bạn ý làm theo và bug biến mất.
2. Thiết bị sau khi xuất xưởng được chạy test tự động, sau vài ngày chạy test thì ngẫu nhiên có 1 thiết bị bị khởi động lại. Khách hàng bắt team ở VN kiểm tra, team ở VN cũng không biết tại sao. Bug có log nhưng lại không tái hiện lại được. Team thử upgrade kernel version lên thì thấy chạy test không bị lỗi đấy nữa. Dò theo log cũ thì phát hiện ra 1 commit trong kernel nhìn có vẻ liên quan đến việc fix bug đó. Nhưng đọc commit message mãi không hiểu được họ nói gì. Cả team khách hàng bên Nhật lẫn đội bên VN đều chịu. Mà bug nó xuất hiện ngẫu nhiên với tần xuất nhỏ, nên cũng không ai dám chắc là đã được fix thật chưa. Về sau họ gửi mail hỏi khắp cty xem có ai biết về Linux kernel không để support. Mình đọc commit message, tìm hiểu các khái niệm xung quanh rồi giải thích cho họ. Sau đó mình tái hiện được lại bug. Từ đấy họ gọi mình là super man. Về sau có 1 lần khách hàng họ sang họp, họ gọi mình vào để giới thiệu mặc dù không cùng dự án. Họ trong Sài Gòn còn mình ở HN.
3. Hàm gettimeofday() trong thư viện của C bị lỗi memory leak. Bạn dev đó fix 2 tháng lỗi memory leak mà không biết nguyên nhân vì đâu. Quan trọng là ngay từ ban đầu không ai nghĩ các hàm của libc có thể bị lỗi này, nên lúc review code mặc định chúng ta bỏ qua. Về sau mình hướng dẫn bạn ý dò ra được lỗi, sau đó report lại cho bên làm trình biên dịch của hãng chip để họ fix.
4. Ngoài ra thì còn vô số những kỷ niệm buồn cười khác, có cái mình nhớ và có cái mình quên rồi.

Nói chung nếu không tính embedded Linux thì Linux kernel không phát triển ở Việt Nam. Vì theo nghề này mà mình cũng có nhiều kỷ niệm vui buồn lẫn lộn. Nhưng trên hết là nhờ nó mà mình được sống một cuộc sống có ý nghĩa, được quen biết nhiều người. Cũng có lúc thấy hơi nản vì con đường theo nó sao mà chông gai. Nhưng kệ thôi, còn sống là còn chiến đấu.

Nay tâm trạng chán đời nên bài viết lan man quá, cám ơn các bạn đã đọc bài.
Phải quote với like cái đã rồi mới đọc
Phải nói là nhánh này của bác chất đấy :ah:
Ở Việt Nam ko có cạnh tranh luôn, mà thực ra chắc cũng ít job:amazed:
 
I feel you, bro.
Làm cái project trên Github để phỏng vấn có cái show ra, dễ đậu.
Có thời gian thì chơi luôn cái LAMP, căn bản có sẵn rồi thì mấy cái đó chỉ là thực tập thôi.
Thử apply vô mấy cái này xem sao, hiện tại lương trên 5 số, nếu nó mướn được người nước ngoài skills có mà giá 80-90 ngàn/năm là hi vọng nó mướn.
https://www.indeed.com/q-Linux-Kernel-Developer-jobs.html?vjk=30050b034cb20cf0
 
Quá là nể chủ thớt, chỉ tiếc là VN (và cả thế giới) đều chuộng dev app hơn. Mong là chủ thớt có truyền nhân và đất dụng võ. Tài năng và sự chịu khó của thớt không phải ai cũng làm được, dù là trong mảng dễ thở hơn :D
 
Công nhận Embedded đã ít việc, mà ngách Linux kernel của anh càng hiếm, chúc anh chân cứng đá mềm.
Mà cố tìm thằng đệ truyền dạy cho nó đi anh Phú :D. Thằng D~ e thấy có tố chất đấy :))
Hehe, học sinh của anh có nhiều bạn làm embedded Linux giỏi hơn anh mà. Do các bạn ý có back ground tốt về hardware.
 
Hehe, học sinh của anh có nhiều bạn làm embedded Linux giỏi hơn anh mà. Do các bạn ý có back ground tốt về hardware.
Bác thử tìm hiểu về Công Ty Canonical (sản phẩm chính: Ubuntu) xem sao. Họ cho phép làm tại nhà, bác ở nước nào cũng được. Lương lậu nghe bảo cũng cao đấy bác.

Đây là một job họ đang tuyển nè bác: https://canonical.com/careers/2264840/kernel-engineer-ubuntu-linux-remote
 
Bác thử tìm hiểu về Công Ty Canonical (sản phẩm chính: Ubuntu) xem sao. Họ cho phép làm tại nhà, bác ở nước nào cũng được. Lương lậu nghe bảo cũng cao đấy bác.

Đây là một job họ đang tuyển nè bác: https://canonical.com/careers/2264840/kernel-engineer-ubuntu-linux-remote
Trước mình rải thử CV cho mấy công ty kiểu này rồi bác. Mà tạch từ vòng gửi xe ý. Vì họ yêu cầu phải có kinh nghiệm phát triển nhân kernel.
Ví dụ như thằng Canonical này nó yêu cầu là phải có kinh nghiệm phát triển nhân, biết cách giao tiếp trao đổi thông tin với community về Linux kernel.
Giống như mảng embedded ở VN thôi, họ có job tuyển Fresher và tuyển ngoài ở dạng chuyên gia. Job Fresher thì họ tuyển từ các trường đại học của nước sở tại, còn job chuyên gia thì họ public post tuyển lên mạng.
 
Back
Top