Khác biệt giữa các bản “Phần mềm”

không có tóm lược sửa đổi
n (Đã lùi lại sửa đổi của 118.71.166.232 (Thảo luận) quay về phiên bản cuối của Tuanminh01)
Thẻ: Lùi tất cả
{{bài cùng tên}}
[[Tập tin:Operating_system_placement_(software).svg|nhỏ| Một sơ đồ cho thấy cách người dùng tương tác với [[phần mềm ứng dụng]] trên một [[máy tính để bàn]] thông thường. Lớp phần mềm ứng dụng giao tiếp với [[hệ điều hành]], lần lượt giao tiếp với [[phần cứng]]. Các mũi tên chỉ luồng thông tin. ]]
'''Phần mềm máy tính''', hay còn gọi đơn giản là '''phần mềm''', cũng được người Việt hải ngoại gọi là '''nhu liệu'''<ref>[http://www.tqlcvn.org/kythuat/kt-gochuviet-vpskeys.htm "Gõ chữ Việt bằng nhu liệu VPS..."]</ref> là tập hợp [[Dữ liệu (máy tính)|dữ liệu]] hoặc các câu lệnh hướng dẫn máy tính cho máy tính biết cách làm việc. Điều này trái ngược với [[Phần cứng|phần cứng vật lý]], từ đó hệ thống được xây dựng và thực sự thực hiện công việc. Trong [[khoa học máy tính]] và [[Công nghệ phần mềm|kỹ thuật phần mềm]], phần mềm máy tính là tất cả [[Thông tin|thông tin được]] xử lý bởi [[Máy tính|hệ thống máy tính]], [[Chương trình máy tính|chương trình]] và [[dữ liệu]]. Phần mềm [[Chương trình máy tính|máy tính]] bao gồm [[Chương trình máy tính|các chương trình máy tính]], [[Thư viện (máy tính)|thư viện]] và [[Dữ liệu (máy tính)|dữ liệu]] không thể thực thi liên quan, chẳng hạn như tài liệu trực tuyến hoặc phương tiện kỹ thuật số. Phần cứng và phần mềm máy tính yêu cầu lẫn nhau và không thể tự sử dụng một cách thực tế.
 
Ở cấp độ lập trình thấp nhất, [[mã thực thi]] bao gồm các hướng dẫn [[ngôn ngữ máy]] được hỗ trợ bởi một [[Vi xử lý|bộ xử lý]] riêng lẻ., có thể là [[Vi xử lý|Bộbộ xử lý]] [[CPU|trung tâm]] (CPU) hoặc [[Bộ xử lý đồ họa|đơn vị xử lý đồ họa]] (GPU) được hỗ trợ. Một ngôn ngữ máy bao gồm các nhóm [[Hệ nhị phân|giá trị nhị phân]] biểu thị các [[Kiến trúc tập lệnh|lệnh hướng dẫn cách thực hiện của bộ xử lý]] thay đổi trạng thái của máy tính từ trạng thái trước đó. Ví dụ: một lệnh có thể thay đổi giá trị được lưu trữ ở một vị trí lưu trữ cụ thể trong máy tính, một hiệu ứng mà người dùng không thể quan sát trực tiếp với người dùng. Một lệnh [[Lời gọi hệ thống|cũng có thể gọi]] một trong nhiều thao tác [[Đầu vào/đầu ra|nhập hoặc xuất dữ liệu]], ví dụ hiển thị một số văn bản trên màn hình máy tính; gây ra những thay đổi trạng thái được hiển thị cho người dùng. Bộ xử lý [[Chu kỳ lệnh|thực hiện]] các lệnh theo thứ tự chúng được cung cấp, trừ khi nó được hướng dẫn "nhảy" sang một lệnh khác hoặc bị hệ điều hành làm [[Ngắt|gián đoạn]]. {{Tính đến|2015}}, hầu hết [[Máy tính cá nhân|các [[máy tính cá nhân]]]], thiết bị [[điện thoại thông minh]] và [[máy chủ]] đều có [[CPU đa nhân|bộ xử lý với nhiều đơn vị thực thi]] hoặc [[Đa xử lý|nhiều bộ xử lý thực hiện tính toán]] cùng nhau và điện toán đã trở thành một hoạt động đồng thời hơn nhiều so với trước đây.
 
Phần lớn phần mềm được viết bằng [[Ngôn ngữ lập trình bậc cao|các ngôn ngữ lập trình cấp cao]]. Chúng dễ dàng và hiệu quả hơn cho các lập trình viên vì chúng gần với [[ngôn ngữ tự nhiên]] hơn ngôn ngữ máy.<ref>{{Chú thích web|url=http://www.cs.uu.nl/education/vak.php?vak=INFOMCCO|title=Compiler construction|archive-url=https://web.archive.org/web/20131102143144/http://www.cs.uu.nl/education/vak.php?vak=INFOMCCO|archive-date=2 November 2013|dead-url=no}}</ref> Các ngôn ngữ cấp cao được dịch sang ngôn ngữ máy bằng [[trình biên dịch]] hoặc [[Trình biên dịch|trình]] [[Trình thông dịch|thông dịch]] hoặc kết hợp cả hai. Phần mềm cũng có thể được viết bằng một [[hợp ngữ]] mức thấp, trong đó có các lệnh mạnh để hướng dẫn ngôn ngữ máy của máy tính và được dịch sang ngôn ngữ máy bằng cách dùng phần mềm [[Hợp ngữ|lắp ráp]].
== Lịch sử ==
{{chính|Lịch sử phần mềm}}
Một phác thảo ([[thuật toán]]) cho những gì sẽ là phần mềm đầu tiên đã được [[Ada Lovelace|Ada Lovelace viết]] vào thế kỷ 19, cho Công cụ phân tích theo kế hoạch.{{sfn|Evans|2018|p=21}} Bà đã [[Chứng minh toán học|chứng minh]] cho thấy động cơ sẽ tính toán [[số Bernoulli]] như thế nào.{{sfn|Evans|2018|p=21}} Vì các chứng minh và thuật toán này, Ada Lovelace được coi là lập trình viên máy tính đầu tiên.<ref name="Annals of the History of Computing">{{Chú thích tạp chí|last=Fuegi|first=J.|last2=Francis|first2=J.|date=2003|title=Lovelace & Babbage and the creation of the 1843 'notes'|journal=Annals of the History of Computing|volume=25|issue=4|pages=16–26|doi=10.1109/MAHC.2003.1253887}}</ref><ref name="Lovelace Google">{{Chú thích báo|url=https://www.theguardian.com/technology/2012/dec/10/ada-lovelace-honoured-google-doodle|title=Ada Lovelace honoured by Google doodle|last=|first=|date=December 10, 2012|work=The Guardian|access-date=25 November 2018}}</ref>
 
Lý thuyết đầu tiên về phần mềm, trước khi tạo ra máy tính như chúng ta biết ngày nay, đã được [[Alan Turing]] đề xuất trong bài tiểu luận năm 1935 về, ''SOnOn Computable Numbers, with an Application to the Entscheidungsproblem'' (vấn đề quyết định).
 
Điều này cuối cùng đã dẫn đến việc tạo ra các lĩnh vực học thuật về [[khoa học máy tính]] và [[công nghệ phần mềm]]; Cả hai lĩnh vực nghiên cứu phần mềm và sáng tạo của nó. Khoa học máy tính là nghiên cứu lý thuyết về máy tính và phần mềm (tiểu luận của Turing là một ví dụ về khoa học máy tính), trong khi kỹ thuật phần mềm là ứng dụng của kỹ thuật và phát triển phần mềm.
 
Tuy nhiên, trước năm 1946, phần mềm chưa phải là chương trình được lưu trữ trong bộ nhớ của các máy tính kỹ thuật số chương trình được lưu trữ, như chúng ta đã hiểu. Thay vào đó, các thiết bị máy tính điện tử đầu tiên được thay thế để "lập trình lại" chúng sau mỗi lần máy tính hoạt động.
 
== Phân loại ==
* '''[[Phần mềm ứng dụng]]''' <br /> là phần mềm sử dụng hệ thống máy tính để thực hiện các chức năng đặc biệt hoặc cung cấp [[Video game|các chức năng giải trí]] ngoài hoạt động cơ bản của chính máy tính. Có nhiều loại phần mềm ứng dụng khác nhau, bởi vì phạm vi các tác vụ có thể được thực hiện với một máy tính hiện đại là rất lớn, xem danh sách phần mềm.
* '''[[Phần mềm hệ thống]]''' <br />là phần mềm để quản lý hành vi '''[[Phần cứng|phần cứng máy tính]]''', để cung cấp các chức năng cơ bản được người dùng yêu cầu hoặc phần mềm khác để chạy đúng, nếu có. Phần mềm hệ thống cũng được thiết kế để cung cấp một nền tảng để chạy phần mềm ứng dụng,<ref>{{Chú thích web|url=http://home.olemiss.edu/~misbook/sfsysfm.htm|title=System Software|publisher=The University of Mississippi|archive-url=https://web.archive.org/web/20010530092843/http://home.olemiss.edu/~misbook/sfsysfm.htm|archive-date=30 May 2001|dead-url=yes}}</ref> và nó bao gồm:
** '''[[Hệ điều hành]]''' (operating system)<br />là các bộ sưu tập thiết yếu của phần mềm quản lý tài nguyên và cung cấp các dịch vụ chung cho các phần mềm khác chạy "trên đỉnh" của chúng. Các chương trình giám sát, [[Khởi động máy tính|bộ tải khởi động]], hệ vỏ và hệ thống cửa sổ là những phần cốt lõi của hệ điều hành. Trong thực tế, một hệ điều hành đi kèm với phần mềm bổ sung (bao gồm cả phần mềm ứng dụng) để người dùng có thể thực hiện một số công việc với một máy tính chỉ có một hệ điều hành.
** '''[[Chương trình điều khiển|Trình điều khiển thiết bị]]''' '''(driver)'''<br />vận hành hoặc điều khiển một loại thiết bị cụ thể được gắn vào máy tính. Mỗi thiết bị cần ít nhất một trình điều khiển thiết bị tương ứng; bởi vì một máy tính thường có ít nhất một thiết bị đầu vào và ít nhất một thiết bị đầu ra, một máy tính thường cần nhiều hơn một trình điều khiển thiết bị.
** '''[[Phần mềm tiện ích|Tiện ích]]''' (utility)<br />là những [[Control Panel (Windows)|chương trình]] máy tính được thiết kế để hỗ trợ người dùng trong việc bảo trì và chăm sóc máy tính của họ.
* '''[[Phần mềm ác ý|Phần mềm độc hại]]''' hoặc '''malware''' <br />đó là phần mềm được phát triển để gây hại và phá hỏng máy tính. Như vậy, phần mềm độc hại là không mong muốn. Phần mềm độc hại có liên quan chặt chẽ với các tội phạm liên quan đến máy tính, mặc dù một số chương trình độc hại có thể được thiết kế như những trò đùa thực tế.
 
** [[Ứng dụng web|Các ứng dụng web]], thường chạy trên [[máy chủ web]] và xuất các trang web được tạo động sang trình duyệt web, sử dụng ví dụ: [[PHP]], [[Java (ngôn ngữ lập trình)|Java]], [[ASP.NET|ASP.]] [[ASP.NET|NET]], hoặc thậm chí [[Node.js|JavaScript chạy trên máy chủ]]. Trong thời hiện đại, những thứ này thường bao gồm một số JavaScript được chạy trong trình duyệt web, trong trường hợp đó, chúng thường chạy một phần trên máy chủ, một phần trong trình duyệt web.
* [[Plugin (điện toán)|Plugin]] và tiện ích mở rộng là phần mềm mở rộng hoặc sửa đổi chức năng của một phần mềm khác và yêu cầu phần mềm đó phải được sử dụng để hoạt động;
* Phần mềm nhúng cư trú như [[firmware]] trong [[hệ thống nhúng]], thiết bị dành riêng cho việc sử dụng đơn lẻ hoặc một vài công dụng như [[xe hơi]] và [[Truyền hình|TV]] (mặc dù một số các thiết bị nhúng như chipset không dây ''mình'' có thể là một phần của một hệ thống máy tính thông thường, không nhúng như một PC hoặc điện thoại thông minh).<ref>{{Chú thích web|url=http://www.computer.org/csdl/mags/so/2009/03/mso2009030014.html|title=Embedded Software—Technologies and Trends|date=May–June 2009|publisher=IEEE Computer Society|archive-url=https://web.archive.org/web/20131028045823/http://www.computer.org/csdl/mags/so/2009/03/mso2009030014.html|archive-date=28 October 2013|dead-url=no|access-date=6 November 2013}}</ref> Trong bối cảnh hệ thống nhúng đôi khi không có sự phân biệt rõ ràng giữa phần mềm hệ thống và phần mềm ứng dụng. Tuy nhiên, một số hệ thống nhúng chạy hệ điều hành nhúng và các hệ thống này vẫn giữ được sự khác biệt giữa phần mềm hệ thống và phần mềm ứng dụng (mặc dù thông thường sẽ chỉ có một ứng dụng cố định luôn chạy).
* Microcode là một loại phần mềm nhúng đặc biệt, tương đối khó hiểu, cho ''chính''bản thân bộ xử lý biết cách thực thi mã máy, vì vậy nó thực sự là một cấp độ thấp hơn mã máy. Nó thường thuộc sở hữu của nhà sản xuất bộ xử lý và mọi cập nhật phần mềm vi mã chỉnh sửa cần thiết đều được cung cấp cho người dùng (rẻ hơn nhiều so với vận chuyển phần cứng bộ xử lý thay thế). Do đó, một lập trình viên bình thường sẽ không bao giờ phải đối phó với nó.
 
=== Công cụ lập trình ===
Các công cụ lập trình cũng là phần mềm dưới dạng chương trình hoặc ứng dụng mà [[Nhà phát triển phần mềm|các nhà phát triển phần mềm]] (còn được gọi là ''lập trình viên, lập trình viên, tin tặc'' hoặc ''kỹ sư phần mềm'') sử dụng để tạo, [[gỡ lỗi]], [[Bảo trì phần mềm|bảo trì]] (tức là cải thiện hoặc sửa chữa) hoặc nói cách khác là hỗ trợ phần mềm.
 
Phần mềm được viết bằng một hoặc nhiều ngôn ngữ lập trình; có nhiều ngôn ngữ lập trình tồn tại và mỗi ngôn ngữ có ít nhất một triển khai, mỗi ngôn ngữ bao gồm một bộ công cụ lập trình riêng đi kèm. Các công cụ này có thể là các chương trình tương đối khép kín như [[trình biên dịch]], [[trình gỡ lỗi]], [[Trình gỡ lỗi|trình]] [[Trình thông dịch|thông dịch]], trình liên kết và trình soạn thảo văn bản, có thể được kết hợp với nhau để hoàn thành một nhiệm vụ; hoặc chúng có thể tạo thành một [[môi trường phát triển tích hợp]] (IDE), kết hợp nhiều hoặc tất cả các chức năng của các công cụ độc lập đó. IDE có thể làm điều này bằng cách gọi các công cụ riêng lẻ có liên quan hoặc bằng cách thực hiện lại chức năng của chúng theo một cách mới. Một IDE có thể giúp thực hiện các tác vụ cụ thể dễ dàng hơn, chẳng hạn như tìm kiếm trong các tệp trong một dự án cụ thể. Nhiều triển khai ngôn ngữ lập trình cung cấp tùy chọn sử dụng cả hai công cụ riêng lẻ hoặc IDE.
 
== Chủ đề ==
* '''Phần mềm nền tảng''' <br />[[Nền tảng máy tính|Nền tảng]] bao gồm [[Firmware|phần sụn]], [[Chương trình điều khiển|trình điều khiển thiết bị]], [[hệ điều hành]] và thường là [[Giao diện đồ họa người dùng|giao diện người dùng đồ họa]], nói chung, cho phép người dùng tương tác với máy tính và các [[thiết bị ngoại vi]] (thiết bị đi kèm). Phần mềm nền tảng thường đi kèm với máy tính. Trên [[Máy tính cá nhân|PC,]] người ta thường có khả năng thay đổi phần mềm nền tảng.
* '''Phần mềm ứng dụng''' <br />[[Phần mềm ứng dụng]] hoặc ứng dụng là những gì hầu hết mọi người nghĩ đến khi họ nghĩ về phần mềm. Ví dụ điển hình bao gồm gói ứng dụng văn phòng và trò chơi video. [[Phần mềm ứng dụng]] thường được mua riêng, độc lập với phần cứng máy tính. Đôi khi các ứng dụng cũng được đóng gói cùng với máy tính, nhưng điều đó không thay đổi thực tế là chúng chạy như các ứng dụng độc lập. Các ứng dụng thường là các chương trình độc lập với hệ điều hành, mặc dù chúng thường được thiết kế riêng cho từng nền tảng cụ thể. Hầu hết người dùng nghĩ về trình biên dịch, cơ sở dữ liệu và "phần mềm hệ thống" khác như là các ứng dụng.
* '''Phần mềm do người dùng tự viết''' <br />Hệ thống có khả năng được điều chỉnh cho phép người dùng cuối tự lập trình để đáp ứng nhu cầu cụ thể của người dùng. Phần mềm người dùng bao gồm các mẫu bảng tính và các mẫu [[Chương trình soạn thảo văn bản|xử lý văn]] bản. Ngay cả các bộ lọc email là một loại phần mềm do người dùng tùy biến. Người dùng tự tạo phần mềm này và thường bỏ qua tầm quan trọng của nó. Tùy thuộc vào mức độ thành thạo của phần mềm do người dùng viết vào các gói ứng dụng mặc định, nhiều người dùng có thể không nhận ra sự khác biệt giữa các gói ban đầu và những gì đã được các đồng nghiệp thêm vào.
 
=== Thực hiện - chạy - thực thi ===
Phần mềm máy tính phải được "tải" vào bộ [[Bộ nhớ|lưu trữ của máy tính]] (như [[Ổ đĩa cứng|ổ cứng]] hoặc bộ nhớ). Khi phần mềm đã được tải, máy tính có thể ''thực thi'' phần mềm. Điều này liên quan đến việc chuyển các [[Kiến trúc tập lệnh|hướng dẫn]] từ [[phần mềm ứng dụng]], thông qua phần mềm hệ thống, đến phần cứng cuối cùng nhận được lệnh dưới dạng [[Ngôn ngữ máy|mã máy]]. Mỗi lệnh làm cho máy tính thực hiện thao tác [[Dữ liệu (máy tính)|dữ liệu]] di chuyển, thực hiện [[tính toán]] hoặc thay đổi [[luồng điều khiển]] của lệnh.
 
Việc di chuyển dữ liệu thường từ nơi này trong bộ nhớ sang nơi khác. Đôi khi nó liên quan đến việc di chuyển dữ liệu giữa bộ nhớ và các thanh ghi, điều này cho phép truy cập dữ liệu tốc độ cao trong CPU. Di chuyển dữ liệu, đặc biệt là khi di chuyển số lượng lớn dữ liệu, có thể khá tốnmất kémthời gian. Vì vậy, điều này đôi khi được tránh bằng cách sử dụng "con trỏ" để thay thế cho dữ liệu thực sự. Việc tính toán bao gồm các hoạt động đơn giản như tăng giá trị của một yếu tố dữ liệu biến. Các tính toán phức tạp hơn có thể liên quan đến nhiều phép toán và các yếu tố dữ liệu khác nhau.
 
=== Chất lượng và độ tin cậy ===
 
* [[phần mềm miễn phí]], bao gồm danh mục phần mềm "dùng thử miễn phí" hoặc phần mềm " [[freemium]] " (trước đây, thuật ngữ [[Shareware|phần mềm chia sẻ]] thường được sử dụng cho phần mềm dùng thử / freemium miễn phí). Như tên cho thấy, phần mềm miễn phí có thể được sử dụng miễn phí, mặc dù trong trường hợp dùng thử miễn phí hoặc phần mềm freemium, điều này đôi khi chỉ đúng trong một khoảng thời gian giới hạn hoặc với chức năng hạn chế.
* phần mềm có sẵn cho một khoản phí, thường được gọi là " [[phần mềm thương mại]] " không chính xác, chỉ có thể được sử dụng hợp pháp khi mua giấy phép sử dụng.
 
Mặt khác, [[phần mềm nguồn mở]] đi kèm với [[Giấy phép phần mềm tự do|giấy phép phần mềm miễn phí]], cấp cho người nhận quyền sửa đổi và phân phối lại phần mềm.
Bằng sáng chế phần mềm, giống như các loại bằng sáng chế khác, về mặt lý thuyết được cho là cung cấp cho nhà phát minh một giấy phép độc quyền, có giới hạn thời gian cho một ''ý tưởng chi tiết (ví dụ: thuật toán) về cách triển khai'' một phần mềm hoặc một thành phần của một phần mềm. Các ý tưởng cho những điều hữu ích mà phần mềm có thể ''làm'' và các ''yêu cầu của'' người dùng, không được coi là có thể được cấp bằng sáng chế và việc triển khai cụ thể (nghĩa là các gói phần mềm thực tế thực hiện bằng sáng chế) thường không được cấp bằng sáng chế. tự động. Vì vậy, bằng sáng chế phần mềm được cho là bao gồm khu vực giữa, giữa các yêu cầu và thực hiện cụ thể. Ở một số quốc gia, yêu cầu phát minh được tuyên bố là có ảnh hưởng đến thế giới vật lý cũng có thể là một phần trong các yêu cầu đối với bằng sáng chế phần mềm phải có hiệu lực, mặc dù ''tất cả các'' phần mềm hữu ích đều có tác dụng đối với thế giới vật lý, yêu cầu này có thể là mở để tranh luận. Trong khi đó, luật bản quyền của Mỹ đã được áp dụng cho các khía cạnh khác nhau của việc viết mã phần mềm.<ref>Gerardo Côn Díaz, "Các văn bản trong máy: Luật Bản quyền Mỹ và Nhiều Natures của phần mềm, 1974-1978,” ''Công nghệ và Văn hóa'' 57 (tháng 10 năm 2016), 753-79.</ref>
 
Bằng sáng chế phần mềm đang gây tranh cãi trong ngành công nghiệp phần mềm với nhiều người giữ các quan điểm khác nhau về chúng. Một trong những nguồn gây tranh cãi là sự phân chia nói trên giữa các ý tưởng ban đầu và bằng sáng chế dường như không được tôn vinh trong thực tế bởi các luật sư sáng chế, ví dụ như bằng sáng chế cho [[Lập trình hướng khía cạnh|Lập trình hướng đối tượng]] (AOP), có ý định đòi quyền đối với ''bất kỳ'' công cụ lập trình ''nào'' thực hiện ý tưởng về AOP, dù thực hiện thế nào. Một nguồn tranh cãi khác là ảnh hưởng đến sự đổi mới, với nhiều chuyên gia và công ty nổi tiếng cho rằng phần mềm là một lĩnh vực chuyển động nhanh đến mức các bằng sáng chế phần mềm chỉ tạo ra chi phí và rủi ro kiện tụng lớn, và thực sự làm chậm sự đổi mới. Trong trường hợp tranh luận về bằng sáng chế phần mềm bên ngoài Hoa Kỳ, người ta đã đưa ra lập luận rằng các tập đoàn lớn và luật sư sáng chế của Mỹ có thể là người hưởng lợi chính trong việc cho phép hoặc tiếp tục cho phép bằng sáng chế phần mềm.
 
== Thiết kế và thực hiện ==
== Công nghiệp và tổ chức ==
{{chính|Công nghiệp phần mềm}}
Một số lượng lớn các công ty phần mềm và lập trình viên trên thế giới bao gồm một ngành công nghiệp phần mềm. Phần mềm có thể là một ngành có lợi nhuận cao: [[Bill Gates]], người đồng sáng lập [[Microsoft]] là người giàu nhất thế giới năm 2009, phần lớn là do ông sở hữu một số lượng cổ phần đáng kể trong Microsoft, công ty sản xuất ra các phần mềm [[Microsoft Windows]] và [[Microsoft Office]] - cả hai đều thống trị thị trường thế giới trong các loại sản phẩm tương ứng của họchúng.
 
Các tổ chức phần mềm phi lợi nhuận bao gồm [[Quỹ Phần mềm Tự do]], Dự án GNU và [[Quỹ Mozilla]]. Các tổ chức tiêu chuẩn phần mềm như [[W3C]], [[Internet Engineering Task Force|IETF]] phát triển các tiêu chuẩn phần mềm được đề xuất như [[XML]], [[Hypertext Transfer Protocol|HTTP]] và [[HTML]], để phần mềm có thể tương tác thông qua các tiêu chuẩn này.
 
Các công ty phần mềm nổi tiếng khác bao gồm [[Google]], [[IBM]], TCS, [[Infosys]], Wipro, HCL Technologies, [[Oracle]], [[Novell]], [[Công ty Cổ phần SAP|SAP]], [[Symantec]], [[Adobe Systems]], Sidetrade và [[Corel]], trong khi các công ty nhỏ thường cung cấp sự [[đổi mới]] về nội dung phần mềm.
 
== Xem thêm ==