Làm thế nào để giải thích rằng việc viết mã C ++ đa nền tảng và các sản phẩm vận chuyển cho tất cả các hệ điều hành là không dễ dàng?


15

Công ty chúng tôi cung cấp một loạt các sản phẩm máy tính để bàn cho Windows và rất nhiều người dùng Linux phàn nàn trên các diễn đàn rằng chúng tôi nên viết các phiên bản sản phẩm cho Linux từ nhiều năm trước và lý do tại sao chúng tôi không làm điều đó là

  • chúng tôi là một tập đoàn tham lam
  • tất cả các chuyên gia kỹ thuật của chúng tôi là những kẻ ngốc không đủ tiêu chuẩn

Sản phẩm trung bình của chúng tôi là khoảng 3 triệu dòng mã C ++.

Phân tích của tôi và đồng nghiệp của tôi là như sau:

  • viết mã C ++ đa nền tảng không phải là dễ dàng
  • chuẩn bị rất nhiều gói phân phối và duy trì chúng cho tất cả các phiên bản Linux phổ biến
  • ước tính của chúng tôi là thị trường Linux giống như 5-15% của tất cả người dùng và những người dùng đó có thể sẽ không muốn trả tiền cho nỗ lực của chúng tôi

khi điều này được đưa ra, câu trả lời lại là chúng ta tham lam những kẻ ngốc không đủ tiêu chuẩn và khi mọi thứ được thực hiện đúng, tất cả điều này thật dễ dàng và không đau đớn.

Làm thế nào hợp lý là các đánh giá của chúng tôi về thực tế rằng việc viết mã đa nền tảng và duy trì nhiều gói phân phối phải mất rất nhiều nỗ lực? Chúng ta có thể tìm thấy một số phân tích dễ dàng nhưng chi tiết với những câu chuyện đời thực thể hiện ra ngoài cái bóng của sự nghi ngờ chính xác là cần bao nhiêu nỗ lực?


3
Tại sao không nhắm mục tiêu RƯỢU và tuyên bố nó được thực hiện?
btilly

1
@btilly: Nó đã hoạt động trên RƯỢU, nhưng RƯỢU không đúng , bạn thấy đấy.
sharptooth

2
RƯỢU là một nỗi đau trong rất nhiều trường hợp, và tùy thuộc vào ứng dụng của bạn là gì, thường không hiệu quả hoặc đẹp như ứng dụng gốc. Tạo một ứng dụng Linux gốc trông rất đẹp trong toàn bộ thế giới rộng lớn đó là Linux mặc dù vậy.
Matthew Scharley

4
Tôi nghĩ rằng "người dùng linux không muốn trả tiền" là một giả định sai. Đối với người dùng cuối, họ có thể quan tâm nhiều hơn đến bản quyền và không chỉ đơn giản sử dụng bản sao Windows lậu như nhiều người khác làm.
ziggystar

3
Ghét sẽ ghét. Câu trả lời duy nhất cho những người hay than vãn trên các diễn đàn là (a) phớt lờ họ, hoặc (b) đi đến gần họ và vùi chúng vuông vào mặt. (a) thường thực tế hơn rất nhiều.
Tom Anderson

Câu trả lời:


8

Hãy nhớ rằng phần lớn mọi người là nhân viên, và do đó, không sống trong một thế giới nơi họ cần quan tâm đến việc kiếm lợi nhuận. Họ xuất hiện tại nơi làm việc, làm việc của họ và về nhà, không bao giờ thực sự suy nghĩ về cách toàn bộ quá trình hoạt động. Và trong khi rất thông minh, rất nhiều tín đồ công nghệ tích cực không biết gì về kinh doanh và thường bị mù bởi giáo điều.

Tất nhiên, bạn đã đúng, làm cho phần mềm x-platform ở quy mô đó không phải là điều đơn giản. Đặc biệt khi bạn không có một công ty có nhiều nhà phát triển và hàng triệu người dùng. Và nó không chỉ là những hạn chế kỹ thuật. Đó là tất cả về chi phí so với lợi ích. Có, bạn có thể chi tiêu vào năm tới để chuyển ứng dụng sang Linux (mặc dù, như bạn lưu ý, nó đã có thể chạy được trong RƯỢU). Tất nhiên, năm phát triển đó không miễn phí. Và cuối cùng, bạn sẽ có thểthêm 5-15% người dùng (dựa trên ước tính của bạn). Hoặc bạn có thể mất cùng một khoản tiền / công sức và tập trung vào phát triển Windows của bạn như một phiên bản mới hoặc đưa tất cả vào tiếp thị và thêm 50% vào cơ sở người dùng của bạn. Những âm thanh như sự lựa chọn thông minh? (rõ ràng các con số cần được tùy chỉnh cho công ty của bạn và kết quả cuối cùng có thể ủng hộ việc chuyển).

Tôi không biết điều đó có giúp thuyết phục 'những tín đồ chân chính' hay không, nhưng đó là động thái kinh doanh thông minh. Và nếu bạn không thực hiện các động thái kinh doanh thông minh, bạn sẽ không hoạt động. Và sau đó chắc chắn sẽ không có phiên bản Linux.


16

Có hai điều cần xem xét ở đây tôi nghĩ:

Đầu tiên là, theo một cách nào đó, họ đúng. Viết đa nền tảng C ++ không khó lắm nếu bạn lập kế hoạch cho nó ngay từ đầu . Đây gần như chắc chắn là vấn đề bạn đang thấy. Hầu hết các ứng dụng nguồn mở (hầu hết các ứng dụng mà người dùng Linux chạm vào một ngày trung bình), là nền tảng chéo vô lý. Hãy suy nghĩ về số lượng ứng dụng mà người dùng Linux trung bình tương tác hàng ngày được viết bằng C hoặc C ++ và không chỉ chạy trên Windows và Linux, mà còn cả MacOS, BSD, Solaris, v.v. trên x86, x86-64, ARM, SPARC, v.v ... Điều này một phần là do những người bị ngứa phải cào cổng để chạy trên hệ thống của họ, nhưng cũng bởi vì sau đó, quy ước là lên kế hoạch cho tính di động đa nền tảng.

Điều thứ hai là, thị trường có thể khả thi hơn bạn nghĩ. Có một quan niệm sai lầm lớn rằng mọi người trên Linux không muốn trả tiền cho phần mềm. Đối với một số người có thể đúng, nhưng có rất nhiều người (hầu hết, tôi nghĩ) sử dụng Linux vì nó hoạt động tốt hơn cho họ và họ thích nó, không phải do giá cả. Ngoài ra, nếu công ty của bạn sản xuất một sản phẩm được sử dụng chủ yếu trong môi trường chuyên nghiệp, các công ty sẽ quen với việc trả tiền cho phần mềm để chạy trên các hệ thống Linux.

Đối với điểm bạn thực hiện về bao bì, như những người khác đã nói, bạn thực sự chỉ cần sản xuất các gói cho phiên bản mới nhất của các bản phân phối chính. Trên thực tế, việc tạo ra các gói không thực sự khó khăn lắm và hầu hết các bản phân phối chính đều sử dụng các gói debian (debian, ub Ubuntu, v.v.) hoặc RPM (fedora, suse, centos, mandrake), vì vậy việc sửa đổi một số tập lệnh là rất nhỏ để sản xuất nhiều gói từ đường cơ sở .deb và đường cơ sở .rpm và đối với những người khác chỉ cần ném một tarball với nhị phân và readme, mọi người sẽ tìm ra cách cài đặt nó. Ngoài ra, bạn có thể bỏ qua tất cả các bao bì, và chỉ đăng một tarball duy nhất với tập lệnh bash hoặc perl để thực hiện cài đặt.

Về cách giải quyết người dùng trên các diễn đàn của bạn phàn nàn, như Joe Internet nói, họ có thể chỉ là tỷ lệ phần trăm của những người sẽ phàn nàn bất kể điều gì, nhưng điều đầu tiên tôi làm là cố gắng giải thích rằng bạn có số lượng lớn mã kế thừa không được thiết kế với sự hỗ trợ đa nền tảng. Thứ hai, thành thật xem liệu nó có hỗ trợ tài chính để tạo cổng Linux hay không và có kết quả với điều đó không. Cuối cùng, nếu một cổng không khả thi về mặt tài chính, hãy xem về việc thực hiện một số công việc để làm cho chương trình hoạt động tốt với RƯỢU. RƯỢU không phải là giải pháp đầu tiên, nhưng nó cũng có thể làm dịu những người chỉ muốn sử dụng ứng dụng của bạn trong Linux và là một dự án ít tốn kém hơn so với một cổng đầy đủ. Trên thực tế, nếu bạn thêm mã vào cơ sở mã WINE như một phần của dự án, thì bạn không chỉ có thể mở ra một thị trường mới,


Tôi tin rằng câu trả lời của bạn thực sự sai khi giảm thiểu nỗi đau của việc phân phối đa nền tảng thực sự - đặc biệt là vì bạn hoàn toàn không đề cập đến vấn đề kiểm tra sản phẩm thương mại của mình trên các nền tảng này. Bạn cũng không đề cập đến chi phí của hỗ trợ nhiều nền tảng.
davidbak

10

Adobe, có phải bạn không?

Nghiêm túc mà nói, hãy đưa ra một loại tiền thưởng để họ có thể đặt trước các phiên bản Linux. Nếu bạn nhận được đủ đơn đặt hàng để tạo ra một cổng có giá trị trong thời gian đó, nếu không hãy hoàn lại tiền cho họ và bây giờ bạn có bằng chứng không đủ người quan tâm để làm cho nó có giá trị.

Nếu bạn nhận được một cái gì đó được chuyển, chỉ cần nhắm mục tiêu bản phát hành Ubuntu LTS mới nhất, RHEL, SLED và có thể cung cấp một tar.gz mọi người có thể cố gắng làm việc nếu họ muốn sử dụng cái gì đó khác. Điều đó khiến bạn phải lo lắng về 3 gói và bất kỳ ai khác có thể biết đủ để có phiên bản tar.gz.


Rất nhiều công ty chỉ muốn phân phối nhị phân, vì vậy phương thức .tar.gz có khả năng ra ngoài.
David Thornley

4
@David Thornley: Chỉ vì đó là một tarball không có nghĩa là nó phải là một gói nguồn. Họ có thể đóng gói các tệp nhị phân, tài liệu và tệp README có liên quan vào tarball, sau đó để người dùng cài đặt các tệp nhị phân và thư viện nơi họ nên đến và thực hiện bất kỳ cấu hình hệ thống nào để ứng dụng hoạt động.
Cercerilla

5

viết mã C ++ đa nền tảng không phải là dễ dàng

Hoàn toàn ngược lại. Khi bạn lập kế hoạch cho công việc đa nền tảng và cung cấp trừu tượng cho các API dành riêng cho nền tảng mà bạn sử dụng, phần lớn mã của bạn đã là nền tảng chéo. Nếu bạn đã sử dụng một thư viện phổ biến như Boost hoặc Qt hoặc NSPR, thì bạn đã rất gần với việc xây dựng đa nền tảng hoạt động.

Vấn đề thường gặp nhất khi thực hiện một cổng muộn trong chu kỳ phát triển là có một số phần mã đáng kể dựa vào API dành riêng cho nền tảng trong các phần của chương trình không cần sử dụng trực tiếp và có lẽ không nên sử dụng chúng. (Một thiết kế tốt sẽ có các mô-đun tách rời mạnh mẽ và các nhóm lớp có thể được hoán đổi với các thay thế được viết lại theo ý muốn. Nếu đây không phải là trường hợp của một mô-đun nhất định, thì đó là mùi mã mạnh.)

Cách dễ dàng thường là chỉ cần viết một lớp "Tiện ích" và ném tất cả những thứ cụ thể nền tảng của bạn vào đó. Nó không "dễ dàng và không đau đớn", nhưng chắc chắn ít khó khăn hơn bạn nghĩ.

chuẩn bị rất nhiều gói phân phối và duy trì chúng cho tất cả các phiên bản Linux phổ biến

Đây là một quan niệm sai lầm đáng tiếc. Mặc dù đúng là việc duy trì các bản dựng cho nhiều nền tảng đòi hỏi nỗ lực bổ sung (trong việc thiết lập máy chủ xây dựng hàng ngày chuyên dụng và học cách đóng gói cho một bản phân phối cụ thể), không đúng khi bạn cần duy trì chúng cho "nhiều bản phân phối ]. " Hoàn toàn ngược lại. Bạn chỉ cần duy trì một số ít gói - có thể là Ubuntu, Fedora và một tarball tương thích LSB duy nhất - và các cộng đồng Linux khác nhau sẽ đảm nhận phần còn lại của công việc. Đặc biệt, nếu phần mềm của bạn là phổ biến, HOWTO sẽ xuất hiện cho mọi bản phân phối, cung cấp các hướng dẫn thiết lập cần thiết. Hoặc, nếu phần mềm của bạn có thể được phân phối tự do (mà bạn có thể làm ngay cả khi đó không phải là sản phẩm miễn phí, miễn là giấy phép của bạn cho phép điều đó), các bản phân phối phổ biến hơn sẽ có một số loại kho lưu trữ thay thế mang các bản sao của phần mềm của bạn.

Các cộng đồng nói chung rất tốt về điều này và người dùng có kinh nghiệm sẽ sẵn sàng làm rất nhiều việc này cho bạn, nếu bạn cho phép họ.

ước tính của chúng tôi là thị trường Linux giống như 5-15% của tất cả người dùng và những người dùng đó có thể sẽ không muốn trả tiền cho nỗ lực của chúng tôi

Một điều không may, và quan niệm sai lầm rất sai lầm.

Chỉ vì người dùng Linux có được hệ điều hành miễn phí không có nghĩa là họ không sẵn sàng trả tiền cho phần mềm. Nếu phần mềm là rất tốt và có nhu cầu rộng cho nó, người dùng Linux sẽ thường có nhiều hơn sẵn sàng bán với tiền của họ hơn so với người dùng Windows của bạn sẽ được. Chỉ cần nhìn vào Gói Indie khiêm tốn , nơi trung bình người dùng Linux, đã trả nhiều hơn gấp đôi cho mỗi người dùng so với người dùng Windows.

Cũng có thể sản phẩm của bạn có thể có nhu cầu lớn hơn đối với người dùng Linux so với các nền tảng khác (mà chúng tôi không thể biết mà không biết về sản phẩm của bạn), tùy thuộc vào loại phần mềm hiện có trong lĩnh vực đó. Bạn có thể có một thị trường tiềm năng lớn hơn bạn nghĩ.


4

Với thái độ như vậy, tôi sẽ bỏ qua chúng. Chúng có vẻ giống như phân khúc của X, trong đó X có thể là bất cứ thứ gì , điều đó sẽ phàn nàn bất kể bạn làm gì. Phát hành phiên bản Linux hay không, đó là lựa chọn của bạn, không phải của họ.


1

Nếu bạn làm việc cho Nvidia ...

Đối với tình yêu của chúa, hút nó lên và viết một số trình điều khiển phong nha đã.

Mặt khác, nếu bạn đang làm các ứng dụng kinh doanh thông thường, hãy nhắm mục tiêu các dự án trong tương lai để chạy trên C #.

Mono hoàn toàn tuân thủ .NET 3.5 và thậm chí có thể sử dụng GUI winforms. Các mô-đun duy nhất bạn cần coi chừng là các mô-đun cụ thể của hệ điều hành nhưng chúng rất í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.