จะอธิบายได้อย่างไรว่าการเขียนรหัส C ++ ข้ามแพลตฟอร์มและผลิตภัณฑ์การจัดส่งสำหรับ OS ทุกระบบนั้นไม่ใช่เรื่องง่าย?


15

บริษัท ของเราจัดส่งผลิตภัณฑ์เดสก์ท็อปที่หลากหลายสำหรับ Windows และผู้ใช้ Linux จำนวนมากบ่นในฟอรัมที่เราควรจะเขียนเวอร์ชันผลิตภัณฑ์ของเราสำหรับ Linux เมื่อหลายปีก่อนและสาเหตุที่เราไม่ทำเช่นนั้นคือ

  • เราเป็น บริษัท โลภ
  • ผู้เชี่ยวชาญด้านเทคนิคของเราทุกคนมีคุณสมบัติต่ำกว่ามาตรฐาน

ผลิตภัณฑ์โดยเฉลี่ยของเรานั้นคล้ายกับรหัส C ++ 3 ล้านบรรทัด

การวิเคราะห์ของฉันและเพื่อนร่วมงานของฉันมีดังต่อไปนี้:

  • การเขียนโค้ด C ++ ข้ามแพลตฟอร์มนั้นไม่ใช่เรื่องง่าย
  • การเตรียมแพ็คเกจการกระจายจำนวนมากและการดูแลรักษาให้พร้อมสำหรับ Linux เวอร์ชันที่แพร่หลายทั้งหมดนั้นต้องใช้เวลา
  • การคาดการณ์ของเราคือตลาดลีนุกซ์เป็นอะไรที่ 5-15% ของผู้ใช้ทั้งหมดและผู้ใช้เหล่านั้นจะไม่ต้องการจ่ายเงินสำหรับความพยายามของเรา

เมื่อสิ่งนี้เกิดขึ้นการตอบสนองก็เป็นอีกครั้งที่เราโลภไร้เดียงสาที่โง่เขลาและเมื่อทุกอย่างถูกต้องทั้งหมดนี้เป็นเรื่องง่ายและไม่เจ็บปวด

การประเมินของเรามีเหตุผลว่าการเขียนโค้ดข้ามแพลตฟอร์มและการบำรุงรักษาแพคเกจการกระจายจำนวนมากใช้ความพยายามมากมาย? เราจะหาบทวิเคราะห์ที่ง่ายและมีรายละเอียดได้อย่างไรจากเรื่องราวชีวิตจริงที่แสดงให้เห็นเหนือเงาแห่งความสงสัยซึ่งต้องใช้ความพยายามเพียงใด?


3
ทำไมไม่ตั้งเป้า WINE และประกาศให้สำเร็จ
btilly

1
@btilly: มันใช้งานได้กับไวน์แล้ว แต่ไวน์ไม่ถูกต้องคุณเห็นไหม
sharptooth

2
WINE เป็นความเจ็บปวดในหลายกรณีและขึ้นอยู่กับว่าคุณใช้แอปพลิเคชั่นอย่างไรมักจะไม่เป็นนักแสดงหรือแอพสวย ๆ การสร้างแอพ Linux ดั้งเดิมที่ดูสวยในโลกอันกว้างใหญ่ทั้งหมดที่เป็น Linux นั้นเป็นภารกิจสำหรับตัวมันเอง
Matthew Scharley

4
ฉันคิดว่า "ผู้ใช้ linux ไม่ต้องการจ่าย" เป็นข้อสันนิษฐานที่ผิด สำหรับผู้ใช้พวกเขาอาจสนใจเรื่องลิขสิทธิ์มากกว่าและไม่เพียง แต่ใช้ Windows ที่ละเมิดลิขสิทธิ์เหมือนที่คนอื่นทำ
ziggystar

3
เกลียดชังจะเกลียด การตอบสนองเพียงอย่างเดียวต่อผู้กระซิบบนฟอรัมคือ (ก) เพิกเฉยต่อพวกเขาหรือ (ข) เดินไปหาพวกเขา (a) มักจะเป็นประโยชน์มากกว่า
Tom Anderson

คำตอบ:


8

โปรดทราบว่าคนส่วนใหญ่เป็นพนักงานดังนั้นจึงไม่ได้อยู่ในโลกที่พวกเขาต้องการที่จะดูแลเกี่ยวกับการทำกำไร พวกเขาปรากฏตัวในที่ทำงานทำในสิ่งที่ตนและกลับบ้านอย่าให้ความคิดจริง ๆ ว่ากระบวนการทั้งหมดทำงานอย่างไร และในขณะที่ฉลาดมากเทคโนโลยีจำนวนมากไม่รู้เรื่องธุรกิจและมักมองข้ามความเชื่อ

แน่นอนว่าการสร้างซอฟต์แวร์แพลตฟอร์ม x ในระดับนั้นไม่ใช่เรื่องง่าย โดยเฉพาะอย่างยิ่งเมื่อคุณ arent บริษัท ที่มีนักพัฒนาหลายสิบและผู้ใช้นับล้าน และมันไม่ได้เป็นเพียงข้อ จำกัด ทางเทคนิค มันคือทั้งหมดที่เกี่ยวกับค่าใช้จ่ายเทียบกับผลประโยชน์ ใช่คุณสามารถใช้จ่ายในปีถัดไปที่ย้ายแอปไปยัง Linux (แม้ว่าคุณจะทราบแล้วว่ามันสามารถรันได้ใน WINE) แน่นอนว่าปีแห่งการพัฒนานั้นไม่ได้มาฟรี และในท้ายที่สุดจะสุทธิคุณอาจจะผู้ใช้เพิ่มเติม 5-15% (ขึ้นอยู่กับการประมาณการของคุณ) หรือคุณสามารถใช้เงิน / ความพยายามเดียวกันและมุ่งเน้นไปที่การพัฒนา Windows ของคุณเป็นเวอร์ชันใหม่หรือนำไปใช้ในการตลาดและเพิ่ม 50% ไปยังฐานผู้ใช้ของคุณ ซึ่งเสียงเหมือนตัวเลือกที่ชาญฉลาด? (เห็นได้ชัดว่าตัวเลขจะต้องมีการปรับแต่งให้กับ บริษัท ของคุณและผลลัพธ์สุดท้ายอาจสนับสนุนการย้าย)

ฉันไม่รู้ว่าจะช่วยเกลี้ยกล่อม 'ผู้เชื่อที่แท้จริง' ได้หรือไม่ แต่มันคือการดำเนินธุรกิจที่ชาญฉลาด และถ้าคุณไม่ทำธุรกิจอย่างชาญฉลาดคุณก็เลิกกิจการแล้ว แล้วจะไม่มีรุ่น Linux แน่นอน


16

มีสองสิ่งที่ควรพิจารณาที่นี่ฉันคิดว่า:

อย่างแรกคือพวกเขาพูดถูก เขียนข้ามแพลตฟอร์ม C ++ จะไม่ยากถ้าคุณวางแผนสำหรับมันจากจุดเริ่มต้น นี่เป็นปัญหาที่คุณเห็นอยู่เกือบจะแน่นอน แอพพลิเคชั่นโอเพ่นซอร์สส่วนใหญ่ (แอพพลิเคชั่นส่วนใหญ่ที่ผู้ใช้ Linux สัมผัสในแต่ละวัน) เป็นแพลตฟอร์มข้ามที่ไร้สาระ คิดเกี่ยวกับจำนวนแอพพลิเคชั่นที่ผู้ใช้ลินุกซ์เฉลี่ยโต้ตอบกับรายวันที่เขียนใน C หรือ C ++ และรันไม่เพียง แต่บน Windows และ Linux เท่านั้น แต่ยังรวมถึง MacOS, BSD, Solaris และอื่น ๆ บน x86, x86-64, ARM, SPARC เป็นต้นส่วนหนึ่งเป็นเพราะผู้ที่มีคันเพื่อเการหัสเพื่อให้ทำงานบนระบบของพวกเขา แต่ก็เป็นเพราะตอนนั้นการประชุมคือการวางแผนสำหรับการพกพาข้ามแพลตฟอร์ม

สิ่งที่สองคือตลาดอาจมีศักยภาพมากกว่าที่คุณคิด มีความเข้าใจผิดอย่างใหญ่หลวงที่ผู้ใช้บน Linux ไม่ต้องการจ่ายค่าซอฟต์แวร์ สำหรับบางคนที่อาจเป็นจริง แต่มีคนจำนวนมาก (ส่วนใหญ่ฉันคิดว่า) ที่ใช้ Linux เพราะมันทำงานได้ดีกว่าสำหรับพวกเขาและพวกเขาชอบไม่ใช่ราคาเนื่องจาก นอกจากนี้หาก บริษัท ของคุณกำลังผลิตผลิตภัณฑ์ที่ใช้เป็นหลักในการตั้งค่าระดับมืออาชีพ บริษัท ต่างๆก็เคยชินกับการจ่ายค่าซอฟต์แวร์เพื่อทำงานบนระบบ Linux

สำหรับจุดที่คุณทำเกี่ยวกับบรรจุภัณฑ์ตามที่คนอื่นพูดคุณต้องผลิตบรรจุภัณฑ์สำหรับการกระจายครั้งใหญ่รุ่นล่าสุด จริงๆแล้วการสร้างแพ็คเกจไม่ได้ยากจริงๆและการแจกแจงหลักส่วนใหญ่ใช้แพ็คเกจเดเบียน (เดเบียนอูบุนตู ฯลฯ ) หรือ RPMs (fedora, suse, centos, mandrake) ดังนั้นจึงไม่ค่อยมีการปรับเปลี่ยนสคริปต์บางตัว ในการผลิตหลายแพคเกจจากพื้นฐาน. deb และพื้นฐาน. รอบต่อนาทีและสำหรับคนอื่นเพียงแค่โยน tarball ด้วยไบนารีและ readme คนจะคิดวิธีการติดตั้ง คุณสามารถข้ามบรรจุภัณฑ์ทั้งหมดและเพียงโพสต์ tarball เดียวด้วย bash หรือ perl script เพื่อทำการติดตั้ง

สำหรับวิธีการจัดการกับผู้ใช้ในฟอรัมของคุณบ่นดังที่ Joe Internet กล่าวว่าพวกเขาอาจเป็นเปอร์เซ็นต์ของคนที่จะบ่นไม่ว่าจะเกิดอะไรขึ้น แต่สิ่งแรกที่ฉันทำคือพยายามอธิบายว่าคุณมี รหัสดั้งเดิมจำนวนมากที่ไม่ได้ออกแบบมาโดยคำนึงถึงการรองรับข้ามแพลตฟอร์ม ประการที่สองโดยสุจริตดูว่าจะให้การสนับสนุนทางการเงินเพื่อสร้างพอร์ต Linux และเปิดด้วยผลลัพธ์ของสิ่งนั้น ในที่สุดหากพอร์ตไม่สามารถทำได้ทางการเงินดูเกี่ยวกับการทำงานบางอย่างเพื่อให้โปรแกรมทำงานได้ดีกับไวน์ ไวน์ไม่ควรเป็นโซลูชั่นแรก แต่อาจทำให้คนที่ต้องการใช้แอพของคุณใน Linux และเป็นโครงการที่ราคาถูกกว่าพอร์ตเต็ม ในความเป็นจริงถ้าคุณเพิ่มรหัสลงในฐานข้อมูลไวน์เป็นส่วนหนึ่งของโครงการคุณไม่เพียง แต่จะสามารถเปิดตลาดใหม่ได้


ฉันเชื่อว่าคำตอบของคุณผิดจริงโดยลดความเจ็บปวดจากการส่งข้ามแพลตฟอร์มจริง - โดยเฉพาะอย่างยิ่งเพราะคุณไม่ได้พูดถึงปัญหาในการทดสอบผลิตภัณฑ์เชิงพาณิชย์ของคุณบนแพลตฟอร์มเหล่านี้ คุณไม่ได้พูดถึงต้นทุนการสนับสนุนหลายแพลตฟอร์ม
davidbak

10

อะโดบีคุณเป็นใคร

อย่างจริงจังแม้ว่าวางค่าชนิดบางอย่างเพื่อให้พวกเขาสามารถสั่งซื้อล่วงหน้ารุ่น Linux หากคุณได้รับคำสั่งซื้อมากพอที่จะสร้างพอร์ตที่คุ้มค่าในเวลานั้นมิฉะนั้นคืนเงินให้พวกเขาและตอนนี้คุณมีหลักฐานว่ามีคนไม่พอที่จะทำให้มันคุ้มค่า

หากคุณได้รับบางสิ่งบางอย่างที่พอร์ตเพียงแค่กำหนดเป้าหมายการเปิดตัว Ubuntu LTS ล่าสุด RHEL, SLED และบางทีอาจจะให้ผู้ใช้ tar.gz สามารถพยายามทำงานหากพวกเขาต้องการใช้อย่างอื่น สิ่งนี้ทำให้คุณมี 3 แพ็กเกจที่ต้องกังวลและใคร ๆ ก็รู้ว่าพอที่จะทำให้เวอร์ชัน tar.gz ดำเนินต่อไป


บริษัท จำนวนมากต้องการกระจายไบนารีเท่านั้นดังนั้นวิธีการ. tar.gz น่าจะเป็นไปได้
David Thornley

4
@ David Thornley: เพียงเพราะ tarball ไม่ได้หมายความว่ามันจะต้องเป็นแพ็กเกจแหล่งข้อมูล พวกเขาสามารถจัดเก็บไบนารีที่เกี่ยวข้องเอกสารประกอบและไฟล์ README ลงใน tarball แล้วปล่อยให้ผู้ใช้ติดตั้งไบนารีและไลบรารีที่ควรไปและทำการกำหนดค่าระบบเพื่อให้แอปทำงานได้
Cercerilla

5

การเขียนโค้ด C ++ ข้ามแพลตฟอร์มนั้นไม่ใช่เรื่องง่าย

ค่อนข้างตรงกันข้าม เมื่อคุณวางแผนสำหรับการทำงานข้ามแพลตฟอร์มและให้แนวคิดสำหรับ APIs เฉพาะแพลตฟอร์มที่คุณใช้ส่วนใหญ่ของรหัสของคุณแล้วข้ามแพลตฟอร์ม หากคุณกำลังใช้ห้องสมุดยอดนิยมเช่น Boost หรือ Qt หรือ NSPR อยู่แล้วคุณก็ใกล้จะมีการสร้างข้ามแพลตฟอร์มที่ใช้งานได้แล้ว

ปัญหาที่พบบ่อยที่สุดเมื่อทำการพอร์ตในรอบการพัฒนาคือมีส่วนสำคัญของรหัสที่ใช้ API เฉพาะแพลตฟอร์มในส่วนของโปรแกรมที่ไม่ต้องการใช้โดยตรงและอาจไม่ควรเลย (การออกแบบที่ดีจะมีโมดูลแยกออกอย่างมากและกลุ่มของคลาสสามารถสลับออกด้วยการแทนที่ที่เขียนใหม่ได้ตามประสงค์หากนี่ไม่ใช่กรณีของโมดูลที่กำหนด

วิธีที่ง่ายที่สุดคือการเขียนคลาส "ยูทิลิตี้" และโยนสิ่งของเฉพาะแพลตฟอร์มทั้งหมดของคุณเข้าไปในนั้น มันไม่ใช่ "ง่ายและไม่เจ็บปวด" แต่ก็ยากน้อยกว่าที่คุณคิด

การเตรียมแพ็คเกจการกระจายจำนวนมากและการดูแลรักษาให้พร้อมสำหรับ Linux เวอร์ชันที่แพร่หลายทั้งหมดนั้นต้องใช้เวลา

นี่เป็นความเข้าใจผิดที่โชคร้าย แม้ว่าจะเป็นความจริงที่ว่าการสร้างบิลด์สำหรับหลายแพลตฟอร์มต้องใช้ความพยายามเพิ่มเติม (ในการตั้งค่าเซิร์ฟเวอร์บิลด์รายวันโดยเฉพาะและการเรียนรู้วิธีการทำแพ็กเกจสำหรับการแจกจ่ายเฉพาะ) แต่ก็ไม่เป็นความจริงว่าคุณจะต้องดูแลพวกมัน ]." ค่อนข้างตรงกันข้าม คุณต้องบำรุงรักษาแพ็กเกจเพียงไม่กี่ชุดเท่านั้นไม่ว่าจะเป็น Ubuntu, Fedora และ tarball ที่ใช้งานร่วมกับ LSB ได้และชุมชน Linux ต่างๆจะใช้เวลาทำงานที่เหลืออยู่ โดยเฉพาะอย่างยิ่งหากซอฟต์แวร์ของคุณได้รับความนิยม HOWTO จะเติบโตขึ้นมาสำหรับการแจกจ่ายทุกครั้งโดยให้คำแนะนำในการตั้งค่าที่จำเป็น หรือหากซอฟต์แวร์ของคุณสามารถแจกจ่ายได้อย่างอิสระ (ซึ่งคุณสามารถทำได้แม้ว่าจะไม่ใช่ผลิตภัณฑ์ฟรีก็ตามหากสิทธิ์ใช้งานของคุณอนุญาต) การกระจายที่ได้รับความนิยมมากขึ้นจะมีที่เก็บสำรองสำรองซึ่งเป็นสำเนาของซอฟต์แวร์ของคุณ

โดยทั่วไปชุมชนจะดีมากเกี่ยวกับเรื่องนี้และผู้ใช้ที่มีประสบการณ์จะเต็มใจทำงานนี้ให้คุณมากถ้าคุณปล่อยให้พวกเขา

การคาดการณ์ของเราคือตลาดลีนุกซ์เป็นอะไรที่ 5-15% ของผู้ใช้ทั้งหมดและผู้ใช้เหล่านั้นจะไม่ต้องการจ่ายเงินสำหรับความพยายามของเรา

อีกความเข้าใจผิดที่โชคร้ายและเข้าใจผิดมาก

เพียงเพราะผู้ใช้ Linux ได้รับระบบปฏิบัติการฟรีไม่ได้หมายความว่าพวกเขาไม่เต็มใจที่จะจ่ายค่าซอฟต์แวร์ หากซอฟต์แวร์เป็นสิ่งที่ดีมากและมีความต้องการที่หลากหลายสำหรับผู้ใช้ลินุกซ์มักจะเป็นมากขึ้นยินดีที่จะเป็นส่วนหนึ่งกับเงินของพวกเขามากกว่าผู้ใช้ Windows ของคุณจะ เพียงดูที่Humble Indie Bundlesซึ่งผู้ใช้ Linux โดยเฉลี่ยจ่ายมากกว่าผู้ใช้ Windows มากกว่าสองเท่าต่อผู้ใช้ Windows

อาจเป็นไปได้ว่าผลิตภัณฑ์ของคุณอาจมีความต้องการมากกว่าผู้ใช้ Linux มากกว่าบนแพลตฟอร์มอื่น ๆ (ซึ่งเราไม่รู้โดยไม่รู้ว่าผลิตภัณฑ์ของคุณ) ขึ้นอยู่กับซอฟต์แวร์ประเภทใดที่มีอยู่ในเวทีนั้น คุณอาจมีตลาดที่มีศักยภาพมากกว่าที่คุณคิด


4

ด้วยทัศนคติเช่นนั้นฉันก็จะไม่สนใจพวกเขา พวกเขาดูเหมือนเซกเมนต์ของ X ที่ X สามารถเป็นอะไรก็ได้ที่จะบ่นไม่ว่าคุณจะทำอะไร ปล่อยรุ่น Linux หรือไม่นั้นเป็นตัวเลือกของคุณไม่ใช่ของ Linux


1

ถ้าคุณทำงานให้กับ Nvidia ...

สำหรับความรักของพระเจ้าจงดูดมันและเขียนไดรเวอร์ที่เหมาะสมไว้แล้ว

มิฉะนั้นหากคุณกำลังใช้งานแอปพลิเคชันทางธุรกิจปกติให้กำหนดเป้าหมายโครงการในอนาคตเพื่อรันบน C #

Mono นั้นสอดคล้องกับ. NET 3.5 และสามารถใช้ winforms GUI ได้อย่างสมบูรณ์ โมดูลเดียวที่คุณต้องระวังคือโมดูลเฉพาะสำหรับระบบปฏิบัติการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.