Tài nguyên tốt nhất để thực sự hiểu Linux sâu sắc là gì


10

Tôi đã và đang sử dụng Linux trong nhiều năm. Gần đây, tôi đã sử dụng nó hàng ngày. Tôi đang tìm kiếm gợi ý cho truyền thông; sách thương mại, thông tin miễn phí, video trực tuyến, vv sẽ giúp tôi hiểu hệ điều hành ở mức độ sâu hơn nhiều. Xin vui lòng đề nghị của bạn.

Câu trả lời:


6

Bạn sẽ tìm thấy một số hướng dẫn miễn phí tại Dự án Tài liệu Linux, trang hướng dẫn . Đây là một danh sách ngắn tôi chọn từ đó, nhưng bạn nên cuộn qua trang để tìm thứ bạn cần.

  • Giới thiệu về Linux - Hướng dẫn thực hành; Tháng 6 năm 2008
  • Linux trên đường; Tháng 11 năm 2005
  • Hướng dẫn của quản trị viên hệ thống Linux; Tháng 7 năm 2005
  • Hướng dẫn Bash-Scripting nâng cao; Tháng 3 năm 2009 (vâng, điều này cũng tốt để hiểu linux)

Bạn nên tìm kiếm cụ thể HOWTOs cho các chủ đề bạn đang quan tâm. Ngày khác được sắp xếp danh sách HOWTO .

Có một số người mới bắt đầu tại trang đánh giá người mới bắt đầu Linux .

Cuối cùng, đây là một cuốn sách nhỏ có sẵn trực tuyến - Linux Kernel in a Nutshell . Nó ở dạng PDF của phiên bản 2007.

Bạn chỉ nên sử dụng các tài liệu tham khảo này như một công cụ cảm nhận để bắt đầu tìm kiếm những thứ bạn cần.


Cảm ơn tất cả mọi người cho câu trả lời tuyệt vời. Kernel in a Nutshell là một viên ngọc thực sự. Đây là loại sách tôi đang tìm kiếm.
Stuart Woodward

16

Cách tốt nhất để hiểu Linux là phá vỡ nó, thật tệ, và sau đó sửa nó.


Tee-hee ... Tôi thích điều đó. Tôi thích phá vỡ mọi thứ.
Evan Anderson

1
-1 Đó là lời khuyên tốt, nhưng nó không phải là một tài nguyên.
tên người dùng

1
câu trả lời chính xác. Tôi đã học được rất nhiều về Linux chỉ từ việc tìm hiểu về nó và thử mọi thứ. Sau khi bạn làm hỏng nó, bạn tìm trên internet để tìm cách khắc phục. Vì "Linux" là một thuật ngữ rộng đến mức trong trường hợp này có lẽ đề cập nhiều hơn đến toàn bộ hệ điều hành và các ứng dụng chạy trên nó, chứ không chỉ là nhân Linux, nên thực sự không có một tài nguyên tốt nào mà bạn có thể đề xuất.
Kibbee

2
Nhưng có một số hướng dẫn cho mọi loại người chúng ta có thể liệt kê. Yêu thích cá nhân của tôi là bắt đầu với bản phân phối khó nhất có thể, và sau đó cài đặt bản phân phối tự động. Phá vỡ mọi thứ là tuyệt vời cho việc học, nhưng biết những gì để phá vỡ ngay từ đầu để có được kiến ​​thức cụ thể, là khó khăn hơn rất nhiều. Hầu hết thời gian, phá vỡ những thứ chúng ta học những điều chúng ta thậm chí không biết chúng ta phải học.
voyager

1
Linux là miễn phí và dễ dàng sửa chữa trong nhiều trường hợp chắc chắn là một tài nguyên. Trải nghiệm bắt đầu với một hệ thống bị hỏng và có thể nhìn vào tất cả các bộ phận của nó (Không giống như một hệ điều hành thương mại) là một thế mạnh lớn và cách duy nhất bạn học cách nghiên cứu một vấn đề và cảm nhận theo cách của bạn là làm điều đó.
Karl Katzke

10

Tôi không chắc chắn, khi bạn nói "mức độ sâu hơn", nếu bạn đang nói về việc đi sâu hơn vào dòng lệnh (một số người không bao giờ rời khỏi GUI đi kèm với bản phân phối của họ, nếu bạn có thể tưởng tượng điều đó), hoặc thực sự công cụ cấp thấp gritty như viết trình điều khiển hạt nhân. Tôi sẽ giả định cái trước nhiều hơn cái sau.

Tôi khuyên bạn nên đặt mục tiêu hợp lý cho những việc bạn muốn làm khi sử dụng Linux và các ứng dụng chạy trên Linux (chạy máy chủ web, cung cấp tệp cho máy chủ Windows, phục vụ DHCP, chạy máy tính để bàn đồ họa, v.v.). Đó là niềm tin vững chắc của tôi rằng bạn chỉ học khi bạn "làm". Một khi bạn đã có một mục tiêu trong tâm trí, hãy theo đuổi nó. Điều đó có nghĩa là đọc các trang man (rất nhiều trang man), tài liệu "HOWTO", danh sách gửi thư lưu trữ, bài đăng trên blog ngẫu nhiên và, tất nhiên, tài liệu đi kèm với các chương trình khác nhau mà bạn đang cài đặt hoặc biên dịch để chạy trên hộp.

Đã dạy các khóa học cấp chứng chỉ CNTT trên lớp trong vài năm, tôi tin rằng tôi có thể nói với một mức độ thẩm quyền nào đó rằng những sinh viên mà tôi thấy tiến bộ nhất là những người đang thực hiện các dự án điên rồ do chính họ thiết kế và học theo chỗ ngồi quần của họ.

Như tôi đã nói trước đây, các trang hướng dẫn, tài liệu "HOWTO" ( http://tldp.org/docs.html và ở nhiều nơi khác trên mạng) và lưu trữ danh sách gửi thư là bạn bè của bạn. Tôi sẽ tránh xa bất kỳ cuốn sách nào nói về nội bộ hạt nhân, ít nhất là ở giai đoạn này. Bạn không cần loại kiến ​​thức sâu sắc để bắt đầu.

Nói chuyện với người khác. Server Fault có vẻ như là một nơi tuyệt vời để nhận được lời khuyên tốt. Đặt câu hỏi ở đây và đừng nghĩ rằng bạn sẽ trông thật ngu ngốc khi làm như vậy. Nếu bạn có thể có được "thời gian đối mặt" với những người quen thuộc với Linux, hãy truy cập nó. (Mặc dù tôi khuyên bạn nên thử và tách ý kiến ​​khỏi thực tế. Có rất nhiều "cuộc chiến thần thánh" trong cộng đồng Linux về các ý kiến ​​khác nhau về cách làm mọi thứ như trong bất kỳ cộng đồng nào khác-- có lẽ nhiều hơn, do bản chất của cộng đồng .)

Để có được kiến ​​thức thực sự "sâu sắc" về di sản Unix của Linux, bạn có thể sử dụng một số hướng dẫn tham khảo hoặc quản trị cụ thể dành cho Unix cũ hơn. Tôi sẽ sớm khắc phục những điều này (ít nhất là cho đến khi bạn có thể đánh giá đúng bản chất lịch sử của "những con đường không được thực hiện" với Linux so với một số hệ điều hành có nguồn gốc từ Unix).

Không biết trình độ kỹ năng tổng thể của bạn là gì, tôi sẽ hét to vào một cuốn sách mà tôi có thể không hay mắc bệnh. Tôi đặc biệt khuyên dùng "TCP / IP Illustrated" ( http://www.amazon.com/I Illustrated-Volume-Addison-Wesley-Prof Profession-Computing / dp / 0201776316 ). Nó hoàn toàn không dành riêng cho Linux, nhưng bạn sẽ làm rất nhiều việc liên quan đến TCP / IP mà biết rằng nó "lạnh" là không có trí tuệ.

Tôi đoán, tóm lại, tôi đang nói rằng không có sách ma thuật hay sách, không có video siêu bí mật mà các "bậc thầy" học được, nhưng hoàn toàn không giới hạn những gì bạn có thể học nếu bạn dính vào nó và không sợ để có được bàn tay của bạn bẩn.


10

Chỉ có nhiều năm kinh nghiệm chơi với các thành phần riêng lẻ sẽ cho bạn một sự hiểu biết sâu sắc. Phải nói rằng, phần lớn các cuốn sách của Oreilly Press được viết rất hay và hoàn hảo nếu bạn không phải là một hình nộm và có hơn 24 giờ. :)

Có một dự án tên là Linux From Scratch , cho bạn thấy cách xây dựng bản phân phối linux từ không có gì. Bạn có thể thấy nó mang tính giáo dục để làm một lần. Sẽ tốn thời gian vì bạn cần biên dịch mọi thứ từ nguồn và cuối cùng bạn sẽ vứt bỏ tất cả.

Tôi thấy trang kernel của LWN.net là vô giá để theo kịp cách mọi thứ hoạt động trong kernel ở mức cao.


+1 đã bình chọn lên LFS FTW
bandi

7

Khác với việc sử dụng nó hàng ngày (mà tôi nghĩ là một điều tuyệt vời!), Tôi khuyên bạn nên bắt đầu suy nghĩ về các dịch vụ có thể được triển khai cho mạng của bạn trên hộp linux. Bắt đầu thiết kế nó dựa trên các dịch vụ Linux, nghiên cứu và triển khai khi bạn đã sẵn sàng. Hy vọng sẽ có những sai lầm trong quá trình và kinh nghiệm đó sẽ giúp bạn hiểu hệ điều hành ở mức độ sâu hơn.


3
Ngay cả việc xây dựng linux từ đầu cũng có ý nghĩa. Hãy thử điều này: linuxfromscratch.org
bướm

Ồ Chắc chắn +1 về điều đó!
l0c0b0x

+1 để xây dựng Linux từ chà. Tôi đã học được một khối lượng thuyền về quá trình khởi động Linux, các công cụ và phát triển nhúng gần như bằng cách sử dụng đĩa mềm xây dựng đĩa mềm uclibc dựa trên Linux vào cuối những năm 90. Bootstrapping bất kỳ máy Linux nào từ kernel lên "từ đầu" chắc chắn sẽ mang lại cho bạn nhiều trải nghiệm tuyệt vời.
Evan Anderson

5

Đối với triết lý Unix nói chung và giới thiệu tuyệt vời về dòng lệnh, có tác phẩm kinh điển Môi trường lập trình Unix của Brian Kernighan và Rob Pike .

Ngoài ra, trang web DeveloperWorks của IBM có hơn 900 bài viết trong phần Linux của nó. Bạn có thể duyệt danh sách bài viết cho các chủ đề bạn thấy thú vị.

Cuối cùng, một khi bạn đã sẵn sàng để tham gia trò chơi nitty-gritty, hãy đến nguồn. Lấy mã nguồn cho phiên bản kernel bạn đang sử dụng tại kernel.org (bản phân phối của bạn cũng sẽ có các gói nguồn kernel bạn có thể cài đặt) và kiểm tra thư mục Tài liệu. Bạn sẽ tìm thấy rất nhiều tài liệu tham khảo về phần bên trong kernel và cài đặt cấu hình.


4

Trường học. Để thực sự hiểu hệ thống Linux, bạn cần một loạt các nền tảng hệ thống Khoa học Máy tính. Trình biên dịch, Kiến trúc máy tính và Hệ điều hành. Và bạn cần một người hướng dẫn có thể chỉ cho bạn những gì quan trọng và sửa chữa mọi hiểu lầm mà bạn có hoặc hình thành.

Khi bạn hiểu cách các bộ xử lý hiện đại hoạt động và cách trình biên dịch C khai thác chúng, bạn có thể đi sâu vào các cuốn sách như Minix 3:

Minix3

Đây là phiên bản mới nhất của cuốn sách mà Torvalds, tác giả của nhân Linux, (lỏng lẻo) dựa trên công trình của mình. Bạn sẽ tìm hiểu về các thành phần và thuật toán cơ bản của một hệ điều hành và cách thực hiện chính xác: văn bản đi kèm với việc in mã nguồn gần như hoàn chỉnh cho Minix cho mục đích tham khảo và hướng dẫn. Kiểm tra trình xử lý ngắt để có được sự hiểu biết đầy đủ về cách hệ thống hoạt động và nơi điều khiển chảy.

Và trước khi bạn chế giễu việc học ở trường và Khoa học máy tính, điều quan trọng cần lưu ý là các công việc mà Hệ điều hành được yêu cầu thường là hoàn thành NP. Vì vậy, việc hiểu nhiều loại thuật toán có sẵn là rất quan trọng để điều chỉnh hiệu suất, vì sẽ không có thuật toán tối ưu có thể chứng minh được.

Ngoài kernel, còn có một số lĩnh vực khác. Bởi vì Linux là nguồn mở, đây là một mỏ vàng học thuật. Các hệ thống như Debian và Ubuntu cung cấp nguồn của chúng và nó rất đơn giản:

apt-get source package-name

Nhiều người ngược dòng cũng lưu trữ mã của họ trong kiểm soát sửa đổi, vì vậy bạn có thể đọc phiên bản cập nhật nhất của nguồn chương trình hoặc thậm chí xem cách nó được xây dựng cách đây nhiều năm.


+1 vết sưng khi đề cập "Và bạn cần một người hướng dẫn có thể chỉ cho bạn những gì quan trọng và sửa chữa mọi hiểu lầm bạn có hoặc hình thành." Nó thực sự là một hệ điều hành được hiểu rõ nhất theo truyền thống truyền miệng (thật không may).
Avery Payne

3

Các nguồn .

Điều đó, tất nhiên, nếu bạn có nghĩa là hạt nhân .

Nếu bạn đang cố gắng học hệ thống bên trên kernel và API, tôi sẽ bắt đầu học trường cũ Unix. Có thể thử một số FreeBSD / OpenBSD / NetBSD / DragonflyBSD . Một chút Minix cũng có thể giúp. Sau đó chuyển sang Slackware , Arch , DebianGentoo . Tất cả đều khác nhau ( đi kèm với tài liệu tuyệt vời ), và trong những khác biệt đó, sự tò mò của bạn sẽ khiến bạn tìm kiếm lý do tại sao lại như vậy, bạn sẽ có được nhiều kiến ​​thức về kỹ thuật, thương mại, chính trị và lịch sử.

Một cách khác sẽ là đi sâu vào /etc, hướng dẫn sử dụng Unix cũ, và tất nhiên, Google .

Linux từ đầu là một cách tuyệt vời của learningGNU / Linux.


3

Chỉ cần bắt đầu xây dựng distro của riêng bạn. Tôi đã làm điều đó cho chính mình và bạn biết những gì? Sau 4 tháng tôi đã dành cho việc tôi biết về các nhân viên Linux hơn những người xung quanh tôi, những người đang sử dụng Linux hơn 10 năm.


3

Học trong bất kỳ môi trường * nix nào là một cách tiếp cận toàn diện . Nó liên quan đến một loạt các epiphère và kinh nghiệm . Đây không phải là do tai nạn. Đây là sản phẩm phụ có chủ ý trong thiết kế của nó, vì môi trường ban đầu được thiết kế xung quanh và dành cho các lập trình viên máy tính. Đó cũng là thiếu sót lớn nhất của nó, vì trọng tâm là các khía cạnh kỹ thuật chứ không phải trải nghiệm người dùng. Đó là "một ngôi nhà với khung chắc chắn sẽ tồn tại 100 năm mà không cần dịch vụ, nhưng mặt bên của nó là hỗn loạn và sơn bị bỏ quên rõ ràng".

Tương phản điều này với Windows, đó là hình ảnh phản chiếu của triết lý này - làm điều gì đó mang lại cho người dùng trải nghiệm hữu hình, nhưng bảo vệ họ khỏi hoạt động bên trong của mọi thứ. Đó là "một ngôi nhà với trang trí và sơn đẹp, nhưng nền tảng đã được xây dựng nhiều lần với nhiều công việc xung quanh".

Để thực sự bắt đầu học, tôi sẽ đề xuất xây dựng hình ảnh hạt nhân tùy chỉnh có các tùy chọn dành riêng cho phần cứng của bạn và cài đặt chúng với các tùy chọn bạn muốn. Bạn nên hoàn toàn mong đợi rằng điều gì đó, một nơi nào đó sẽ bị phá vỡ và bạn có thể hoặc không thể sao lưu mọi thứ trở lại "bình thường". Đây là một phần bình thường của quá trình học tập đó và bạn nên tiếp cận điều này như thể mọi thứ sẽ vỡ (tức là đừng biến nó thành cài đặt chính, sử dụng ổ đĩa riêng hoặc máy ảo hoặc một cái gì đó ...)

Tôi đã thực hiện một câu trả lời cho một câu hỏi tương tự , vì vậy để giảm việc nhập, tôi sẽ liên kết nó ở đây . Bạn cũng sẽ muốn đọc một vài đoạn đầu tiên trên trang này , điều này sẽ cho bạn cảm giác tốt hơn về những gì bạn đang làm.


2

Bắt đầu đọc / cat'ing các tệp trong /proc/etc- bạn sẽ không gây ra bất kỳ thiệt hại nào bằng cách đọc các tệp này (lưu có thể làm hỏng kết nối đầu cuối / ssh của bạn nếu bạn tạo một tệp tạo thông tin nhị phân) và phần lớn là của con người có thể đọc được. ' sysctl -a' Đầu ra cũng là một mỏ vàng. Khi bạn tìm thấy một cái gì đó thú vị, google hoặc manđể biết thêm thông tin về nó.

Bạn có thể tìm thấy một số đá quý thực sự về cách kernel và HĐH hoạt động theo cách này.

Một vài gợi ý nhanh:

/ etc / inittab
/etc/rcS.d
/etc/rc2.d
/ etc / crontab
/ Proc / 1 / môi trường
/ Proc / hệ thống tập tin
/ Proc / meminfo
/ Proc / cpuinfo
hệ thống -a | grep vm.swappiness
/ etc / default # debian-Dựa
/ etc / sysconfig # dựa trên redhat

Mẹo nhanh - một số đầu ra trong / Proc được phân tách bằng NUL và do đó khó đọc. Sử dụng 'tr' để chuyển đổi NUL thành dòng mới, ví dụ:

mèo sudo / Proc / 1 / môi trường | tr '\ 0', '\ n'

2

Có rất nhiều thứ để tìm hiểu về Linux, hoặc bất kỳ hệ điều hành nào. Một kiểu học là cái mà tôi gọi là học "chuyên sâu", đó là tìm hiểu cách thức hoạt động của hạt nhân, giả định của nó, cách các bit khác nhau nói chuyện với nhau và cách nó xử lý với phần cứng. Đó là thứ nhân. Những thứ như thế rất hữu ích trong việc tìm ra lý do tại sao hệ điều hành bị hỏng theo cách đó. Trên thực tế, tôi đã học được nó giống như cách Karl Katzke đã làm. Tôi đã phá vỡ mọi thứ, và làm cho nó tốt hơn.

Đối với loại kiến ​​thức này, Linux khá dễ dàng. Tất cả đều được ghi nhận ở nhiều nơi. Điều này cũng không thể hoàn toàn nói cho Windows, mặc dù vẫn còn rất nhiều doc trên mạng cho nó.

Sau đó là "học tập xung quanh hệ điều hành", đó là nơi kiến ​​thức về bash / sed / awk / regex và tất cả những thứ khác có ích. Bởi vì thực tế là, một hệ điều hành nhiều hơn nhân của nó ngày nay. Bạn có nhà cung cấp blobs trình điều khiển. Bạn có cách phân phối cụ thể này gói các kịch bản khởi động của nó. Bạn có nhiều cơ chế vá / cập nhật. Bạn có trình nền hệ thống mà mọi người cần, nhưng không phải là kernel.

Đây là một phổ kiến ​​thức rộng hơn nhiều so với kernel-fu đơn giản. Nó thay đổi theo người phân phối, vì vậy cách mọi thứ hoạt động trên Red Hat có thể không hoạt động giống nhau trên Slackware. Nơi các tập tin được lưu giữ có thể khác nhau. Như có thể những gì họ đã chọn để thay thế 'vi'.

"Học Linux" liên quan đến việc học toàn bộ hệ sinh thái hơn là một hệ điều hành đơn giản.


1

Tôi đã có một cuốn sách tên là "Lập trình Linux" dạy tôi nhiều hơn về HĐH hơn bất kỳ cuốn sách "Tìm hiểu Linux" nào. Tôi ước mình có số ISBN, nhưng thật tuyệt vời .. một phần vì nó đã đi vào chương trình "tại sao", không chỉ là "làm thế nào".

Nhìn chung, hầu hết việc học của tôi là trung thực thông qua việc phá vỡ nó và sửa chữa nó. Nó xảy ra chậm, và tôi vẫn học được những điều mới sau 12 năm.

Đó chắc chắn là một quá trình. Điều quan trọng là phải rất, rất tò mò. Khi bạn gặp phải điều gì đó mà bạn không quen thuộc, hãy làm quen với nó. Tìm kiếm kiến ​​thức về cách thức và lý do tại sao nó đánh dấu, và tìm hiểu các công nghệ cơ bản, quá.


1

Tôi thấy trôi dạt qua Linux, FreeBSD, OpenBSD, Solaris, và thậm chí nhiều bản phân phối Linux khác là một cách hay để tìm hiểu nhiều về Linux. Về cách nó đã làm mọi thứ khác nhau. Bạn tìm hiểu càng nhiều về thành phố quê hương của bạn trong khi đến thăm những nơi khác hơn là bạn tìm hiểu về nơi bạn ở.


1

Khi nói đến sách, tôi thích O'Reilly, vì vậy "Tham khảo bỏ túi quản trị hệ thống thiết yếu" và "Quản trị hệ thống Linux" là điểm khởi đầu có thể.

Bản sao Quản trị mạng TCP / IP của tôi là một bản cũ hơn và tôi đã không sử dụng nó trong một thời gian, nhưng tôi thấy nó rất hữu ích để hiểu sâu hơn về những gì đang diễn ra.


1

Bạn đã thực hiện bước đầu tiên bằng cách sử dụng Linux làm máy tính để bàn thông thường.

Nếu bạn muốn hiểu làm thế nào tất cả các bộ phận kết hợp với nhau và được cấu hình, tôi khuyên bạn nên chạy Gentoo . Từ bản cài đặt giai đoạn 3 thông thường, bạn phải biên dịch kernel của riêng mình, cài đặt tất cả các dịch vụ của bạn (ngoại trừ SSH có sẵn), tự xây dựng và định cấu hình X, v.v. Khi bạn làm điều đó, bạn sẽ kết thúc bằng một sự hiểu biết lớn hơn nhiều về tất cả các bit đi vào cài đặt linux nhị phân. Điều đó cũng không làm tổn thương rằng Gentoo có tài liệu tốt nhất về bất kỳ Distro nào tôi đã tìm thấy, hoặc portage đó là một trình quản lý gói linh hoạt và mạnh mẽ tuyệt vời.



1

Một số người khác đã đề cập đến điều này, và tôi nghĩ rằng đó là điều giúp tôi nhiều nhất với việc sử dụng các hương vị linux khác nhau. Nếu bạn cảm thấy bạn có cách xử lý hợp lý trên linux, hãy bắt đầu sử dụng open / net / freebsd.
Về lý do tại sao, hầu hết những người dùng linux mà tôi đã làm việc có thể sử dụng một hoặc hai bản phân phối linux không khác gì với bản kia. Chắc chắn, hầu hết trong số họ biết những bản phát hành như bàn tay của họ, nhưng họ vẫn có thể ngạc nhiên trên cơ sở đáng báo động với những điều nhất định. Tôi nghĩ (không bắt đầu một cuộc chiến nảy lửa) rằng cách các BSD được lắp ráp dễ dàng hơn một chút để khám phá "lý do" của cách mọi thứ được thực hiện (cộng với, ẩn trong danh sách gửi thư bsd họ giải thích rằng "tại sao" đến chết ). Nó thay đổi quan điểm của bạn, nó có thể không bao giờ xảy ra với bạn để hỏi tại sao một số thứ nhất định là như vậy cho đến khi ai đó làm điều đó theo một cách hoàn toàn khác.


1

Bài đăng này trên Stackoverflow có một danh sách lớn các tài nguyên Unix / Linux, bao gồm hầu hết các tác phẩm kinh điển về chủ đề này.

Một cách khác để tìm hiểu điều khiến Linux đánh dấu vào hậu trường là làm việc thông qua Linux From Scratch ( http://www.linuxfromscratch.org/ ). Nó thực chất là một tập hợp các bài tập trong việc cài đặt và cấu hình thủ công các thành phần khác nhau của hệ thống linux và là một phần giới thiệu rất tốt để tìm hiểu các loại hạt và bu lông từ đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.