รหัสแหล่งที่มา

จากวิกิพีเดีย สารานุกรมเสรี
ข้ามไปที่การนำทาง ข้ามไปที่การค้นหา

ตัวอย่างซอร์สโค้ดภาษา Cอย่างง่าย ภาษา โปรแกรมเชิงขั้นตอน โปรแกรมผลลัพธ์จะพิมพ์ "hello, world" บนหน้าจอคอมพิวเตอร์ ตัวอย่าง " Hello world " ที่รู้จักกันครั้งแรกนี้จากหนังสือThe C Programming Languageมีต้นกำเนิดมาจากBrian KernighanในBell Laboratoriesในปี 1974 [1]

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

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

คำจำกัดความ

โครงการ ข้อมูล Linuxกำหนดซอร์สโค้ดเป็น: [2]

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

แนวคิดของซอร์สโค้ดอาจถูกนำไปใช้ในวงกว้างมากขึ้น เพื่อรวมรหัสเครื่องและสัญลักษณ์ในภาษากราฟิก ซึ่งทั้งสองสิ่งนี้ไม่ใช่ข้อความในธรรมชาติ ตัวอย่างจากบทความที่นำเสนอในการประชุม IEEE ประจำปีและการวิเคราะห์และการจัดการซอร์สโค้ด: [3]

เพื่อความชัดเจน "ซอร์สโค้ด" จะหมายถึงคำอธิบายที่ดำเนินการได้อย่างสมบูรณ์ของระบบซอฟต์แวร์ ดังนั้นจึงถูกตีความว่าเป็นการรวมรหัสเครื่อง ภาษาระดับสูงมาก และการแสดงภาพกราฟิกที่ปฏิบัติการได้ของระบบ [4]

บ่อยครั้งมีหลายขั้นตอนในการแปลโปรแกรมหรือ การ ย่อขนาดระหว่างซอร์สโค้ดต้นฉบับที่พิมพ์โดยมนุษย์และโปรแกรมปฏิบัติการ ในขณะที่บางไฟล์ เช่นFSFโต้แย้งว่าไฟล์ระดับกลาง "ไม่ใช่ซอร์สโค้ดจริงและไม่นับเป็นซอร์สโค้ด" [5]ไฟล์อื่นๆ พบว่าสะดวกที่จะอ้างถึงไฟล์ระดับกลางแต่ละไฟล์เป็นซอร์สโค้ดสำหรับขั้นตอนต่อไป

ประวัติ

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

เมื่อ IBM เสนอซอฟต์แวร์เพื่อทำงานกับเครื่องเป็นครั้งแรก ซอร์สโค้ดมีให้โดยไม่มีค่าใช้จ่ายเพิ่มเติม ในขณะนั้น ต้นทุนในการพัฒนาและสนับสนุนซอฟต์แวร์รวมอยู่ในราคาของฮาร์ดแวร์แล้ว เป็นเวลาหลายทศวรรษที่ IBM ได้แจกจ่ายซอร์สโค้ดพร้อมใบอนุญาตผลิตภัณฑ์ซอฟต์แวร์จนถึงปี 1983 [6]

นิตยสารคอมพิวเตอร์ยุคแรกๆ ส่วนใหญ่ตีพิมพ์ซอร์สโค้ดเป็นโปรแกรมพิมพ์ดีด

ในบางครั้ง ซอร์สโค้ดทั้งหมดของโปรแกรมขนาดใหญ่จะได้รับการตีพิมพ์เป็นหนังสือปกแข็ง เช่นComputers and Typesetting , vol. B: TeX, The ProgramโดยDonald Knuth , PGP Source Code and InternalsโดยPhilip Zimmermann , PC SpeedScriptโดยRandy ThompsonและµC/OS, The Real-Time Kernelโดย Jean Labrose

องค์กร

ซอร์สโค้ดที่ประกอบขึ้นเป็นโปรแกรมมักจะอยู่ในไฟล์ข้อความตั้งแต่หนึ่งไฟล์ ขึ้นไปที่จัดเก็บไว้ใน ฮาร์ดดิสก์ของคอมพิวเตอร์ โดยปกติ ไฟล์เหล่านี้จะถูกจัดเรียงอย่างระมัดระวังในแผนผังไดเร็กทอรี หรือ ที่เรียกว่าแผนผังต้นทาง ซอร์สโค้ดยังสามารถจัดเก็บไว้ในฐานข้อมูล (เช่นเดียวกับ กระบวนงานที่ เก็บไว้ ทั่วไป ) หรือที่อื่น ๆ

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

ซอร์สโค้ดสำหรับซอฟต์แวร์บางชิ้นอาจมีอยู่ในไฟล์เดียวหรือหลายไฟล์ แม้ว่าการปฏิบัติจะไม่ใช่เรื่องปกติ แต่ซอร์สโค้ดของโปรแกรมสามารถเขียนในภาษาโปรแกรมต่างๆ ได้ [7]ตัวอย่างเช่น โปรแกรมที่เขียนด้วยภาษาซี เป็นหลัก อาจมีบางส่วนที่เขียนด้วยภาษาแอสเซมบลีเพื่อการเพิ่มประสิทธิภาพ นอกจากนี้ยังเป็นไปได้สำหรับองค์ประกอบบางอย่างของชิ้นส่วนของซอฟต์แวร์ที่จะเขียนและคอมไพล์แยกกัน ในภาษาการเขียนโปรแกรมที่กำหนดเอง และต่อมารวมเข้ากับซอฟต์แวร์โดยใช้เทคนิคที่เรียกว่าการลิงก์ไลบรารี ในบางภาษา เช่นJavaสามารถทำได้ที่รันไทม์(แต่ละคลาสถูกคอมไพล์เป็นไฟล์แยกต่างหากที่เชื่อมโยงโดยล่าม ณ รันไทม์)

อีกวิธีหนึ่งคือการทำให้โปรแกรมหลักเป็นล่ามสำหรับภาษาการเขียนโปรแกรม[ ต้องการการอ้างอิง ]ทั้งที่ออกแบบมาโดยเฉพาะสำหรับแอปพลิเคชันที่เป็นปัญหาหรือเพื่อวัตถุประสงค์ทั่วไป จากนั้นจึงเขียนฟังก์ชันการใช้งานจริงของผู้ใช้จำนวนมากเป็นมาโครหรือรูปแบบอื่นๆ ins ในภาษานี้ ซึ่งเป็นวิธีการที่ใช้ตัวอย่างเช่นโดย โปรแกรม แก้ไขข้อความ GNU Emacs

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

วัตถุประสงค์

ซอร์สโค้ดส่วนใหญ่จะใช้เป็นอินพุตของกระบวนการที่สร้างโปรแกรมปฏิบัติการ (เช่นคอมไพล์หรือตีความ ) นอกจากนี้ยังใช้เป็นวิธีการสื่อสารอัลกอริธึมระหว่างบุคคล (เช่นข้อมูลโค้ดในหนังสือ) [8]

โปรแกรมเมอร์คอมพิวเตอร์มักจะพบว่าการทบทวนซอร์สโค้ดที่มีอยู่นั้นมีประโยชน์เพื่อเรียนรู้เกี่ยวกับเทคนิคการเขียนโปรแกรม [8]การแบ่งปันซอร์สโค้ดระหว่างนักพัฒนามักถูกอ้างถึงว่าเป็นปัจจัยที่เอื้อต่อการพัฒนาทักษะการเขียนโปรแกรมของพวกเขา [8]บางคนคิดว่าซอร์สโค้ดเป็น สื่อ ทางศิลปะ ที่แสดงออก [9]

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

การ ถอดรหัสโปรแกรมสั่งการสามารถใช้เพื่อสร้างซอร์สโค้ด ทั้งในโค้ดแอสเซมบลีหรือในภาษาระดับสูง

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

แง่มุมทางกฎหมาย

สถานการณ์แตกต่างกันไปทั่วโลก แต่ในสหรัฐอเมริกาก่อนปี 1974 ซอฟต์แวร์และซอร์สโค้ดของซอฟต์แวร์ไม่มีลิขสิทธิ์ดังนั้นจึงเป็นซอฟต์แวร์ที่เป็นสาธารณสมบัติเสมอ [10]

ในปีพ.ศ. 2518 คณะกรรมาธิการว่าด้วยการใช้เทคโนโลยีใหม่แห่งงานลิขสิทธิ์ (CONTU) แห่งสหรัฐอเมริกาได้ตัดสินใจว่า "โปรแกรมคอมพิวเตอร์ในขอบเขตที่รวมเอาการสร้างสรรค์ดั้งเดิมของผู้เขียนเป็นหัวข้อที่เหมาะสมของลิขสิทธิ์" [11] [12]

ในปี 1983 คดีในศาลของสหรัฐอเมริกาApple v. Franklinถูกตัดสินว่าใช้เช่นเดียวกันกับรหัสวัตถุ และพระราชบัญญัติลิขสิทธิ์กำหนดให้โปรแกรมคอมพิวเตอร์มีสถานะลิขสิทธิ์งานวรรณกรรม

ในปี พ.ศ. 2542 ในคดีศาลของสหรัฐอเมริกาBernstein v. United Statesได้มีการวินิจฉัยเพิ่มเติมว่าซอร์สโค้ดสามารถถือเป็นรูปแบบการพูดเสรีที่ ได้รับการคุ้มครองตามรัฐธรรมนูญ ผู้เสนอเสรีภาพในการพูดแย้งว่าเนื่องจากซอร์สโค้ดส่งข้อมูลไปยังโปรแกรมเมอร์ เขียนด้วยภาษา และสามารถใช้เพื่อแบ่งปันอารมณ์ขันและการแสวงหางานศิลปะอื่น ๆ ได้จึงเป็นรูปแบบการสื่อสารที่ได้รับการคุ้มครอง [13] [14] [15]

ใบอนุญาต

ตัวอย่างประกาศเกี่ยวกับลิขสิทธิ์: [16]

ลิขสิทธิ์ [ปปปป] [ชื่อเจ้าของลิขสิทธิ์]

ได้รับอนุญาตภายใต้สัญญาอนุญาต Apache เวอร์ชัน 2.0 ("ใบอนุญาต"); คุณไม่สามารถใช้ไฟล์นี้ได้ยกเว้นการปฏิบัติตามใบอนุญาต คุณสามารถขอรับสำเนาใบอนุญาตได้ที่

http://www.apache.org/licenses/LICENSE-2.0

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

ผู้เขียนงานที่ไม่สำคัญเช่นซอฟต์แวร์[12] มี สิทธิ์เฉพาะตัวหลาย ประการ ซึ่งได้แก่ ลิขสิทธิ์สำหรับซอร์สโค้ดและโค้ดอ็อบเจ็กต์ [17]ผู้เขียนมีสิทธิ์และความเป็นไปได้ที่จะให้ลูกค้าและผู้ใช้ซอฟต์แวร์ของเขาได้รับสิทธิพิเศษบางอย่างในรูปแบบของใบอนุญาตซอฟต์แวร์ ซอฟต์แวร์และซอร์สโค้ดที่มาพร้อมกันสามารถเชื่อมโยงกับกระบวนทัศน์การอนุญาตให้ใช้สิทธิได้หลายแบบ ความแตกต่างที่สำคัญที่สุดคือซอฟต์แวร์ฟรีเทียบกับ ซอฟต์แวร์ ที่เป็นกรรมสิทธิ์ ทำได้โดยการรวมประกาศเกี่ยวกับลิขสิทธิ์ที่ประกาศเงื่อนไขการอนุญาตให้ใช้สิทธิ หากไม่พบการแจ้ง ถือว่าผิดสัญญาสงวนลิขสิทธิ์เป็นนัย

โดยทั่วไป ซอฟต์แวร์เป็นซอฟต์แวร์ฟรี หากผู้ใช้มีอิสระในการใช้งานเพื่อวัตถุประสงค์ใดๆ ศึกษาและเปลี่ยนแปลงซอร์สโค้ดของซอฟต์แวร์ ให้หรือขายสำเนาที่ถูกต้อง และให้หรือขายสำเนาที่แก้ไขแล้ว ซอฟต์แวร์เป็นกรรมสิทธิ์หากมีการแจกจ่ายในขณะที่ซอร์สโค้ดถูกเก็บเป็นความลับ หรือเป็นของเอกชนและถูกจำกัด ใบอนุญาตซอฟต์แวร์รายแรกๆ ที่เผยแพร่และให้สิทธิ์อย่างชัดแจ้งเหล่านี้คือใบอนุญาตสาธารณะทั่วไปของ กนู ในปี 1989 ใบอนุญาต BSDเป็นอีกตัวอย่างแรกจากปี 1990

สำหรับซอฟต์แวร์ที่เป็นกรรมสิทธิ์ บทบัญญัติของกฎหมายลิขสิทธิ์ความลับทางการค้าและสิทธิบัตรต่างๆ จะใช้เพื่อปิดซอร์สโค้ด นอกจากนี้ ซอฟต์แวร์ขายปลีกหลายชิ้นยังมาพร้อมกับข้อตกลงสิทธิ์การใช้งานสำหรับผู้ใช้ปลายทาง (EULA) ซึ่งโดยทั่วไปแล้วจะห้ามไม่ให้มี การ ถอดรหัสวิศวกรรมย้อนกลับการวิเคราะห์ การปรับเปลี่ยน หรือการหลีกเลี่ยง การป้องกัน การทำสำเนา ประเภทของการป้องกันซอร์สโค้ด—นอกเหนือจากการคอมไพล์ ดั้งเดิม ไปยังโค้ดอ็อบเจ็กต์ — รวมถึงการเข้ารหัสโค้ด, โค้ดที่สร้างความสับสนหรือ การ เปลี่ยน โค้ด

คุณภาพ

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

ดูเพิ่มเติม

อ้างอิง

  1. ^ "การเขียนโปรแกรม C: A Tutorial" (PDF ) เก็บถาวรจากต้นฉบับ (PDF)เมื่อ 23 กุมภาพันธ์ 2558
  2. ^ โครงการข้อมูลลินุกซ์ "คำจำกัดความของซอร์สโค้ด" ถูก เก็บถาวร 3 ตุลาคม 2017 ที่เครื่อง Wayback
  3. SCAM Working Conference Archived 29 กันยายน 2017 ที่ Wayback Machine , 2001–2010
  4. เหตุใดการวิเคราะห์และการจัดการซอร์สโค้ดจึงมีความสำคัญเสมอโดย Mark Harmanการประชุมการทำงานระดับนานาชาติของ IEEE ครั้งที่ 10 เรื่องการวิเคราะห์และการจัดการซอร์สโค้ด (SCAM 2010) Timișoara ,โรมาเนีย , 12–13 กันยายน 2010.
  5. ^ "gnu.org" . www.gnu.org . เก็บถาวรจากต้นฉบับเมื่อ 3 กรกฎาคม 2017 . สืบค้นเมื่อ12 ธันวาคม 2558 .
  6. มาร์ติน เกอตซ์ (8 กุมภาพันธ์ พ.ศ. 2531) "รหัสวัตถุเท่านั้น: IBM เล่นอย่างยุติธรรมหรือไม่" . โลก คอมพิวเตอร์ . ฉบับที่ 22 ไม่ 6. น. 59. ในปี 1983 IBM ได้ยกเลิกนโยบาย 20 ปีในการแจกจ่ายซอร์สโค้ดด้วยสิทธิ์ใช้งานผลิตภัณฑ์ซอฟต์แวร์ของตน
  7. ^ "การขยายและการฝังตัวแปลไพธอน" . docs.python.org . เก็บถาวรจากต้นฉบับเมื่อ 3 ตุลาคม 2555 . สืบค้นเมื่อ17 สิงหาคม 2014 .
  8. อรรถa bc Spinellis , D: การอ่านโค้ด: มุมมอง ของโอเพ่นซอร์ส Addison-Wesley Professional, 2003. ISBN 0-201-79940-5 
  9. ^ " Art and Computer Programming " ONLamp.com Archived 20 February 2018 at the Wayback Machine , (2005)
  10. ^ พี. หลิว โจเซฟ; แอล., โดแกน, สเตซี่ย์ (2005). "กฎหมายลิขสิทธิ์และเฉพาะเรื่อง: กรณีซอฟต์แวร์คอมพิวเตอร์" . การสำรวจกฎหมาย อเมริกันประจำปีของมหาวิทยาลัยนิวยอร์ก 61 (2).
  11. ^ Apple Computer, Inc. กับ Franklin Computer Corporation นำ Byte กลับสู่การคุ้มครองลิขสิทธิ์สำหรับโปรแกรมคอมพิวเตอร์ ที่เก็บถาวร 7 พฤษภาคม 2017 ที่ Wayback Machineใน Golden Gate University Law Review เล่มที่ 14 ฉบับที่ 2 บทความ 3 โดย Jan L. Nussbaum (มกราคม) 1984)
  12. อรรถเป็น เลมลีย์ เมเนลล์ เมิร์จ และซามูเอลสัน กฎหมายซอฟต์แวร์และอินเทอร์เน็ต , น. 34.
  13. ^ "ข้อมูล" (PDF) . cr.yp.to เก็บถาวร(PDF)จากต้นฉบับเมื่อ 7 มิถุนายน 2554 . สืบค้นเมื่อ27 ธันวาคม 2019 .
  14. Bernstein v. US Department of Justice Archived 4 เมษายน 2018 ที่ Wayback Machineบน eff.org
  15. ^ EFF ที่ 25: จดจำคดีที่สร้างรหัสเป็นคำพูดที่ เก็บถาวร 5 มกราคม 2018 ที่ Wayback Machineบน EFF.org โดย Alison Dame-Boyle (16 เมษายน 2015)
  16. ^ "ใบอนุญาต" . www.apache.org เก็บถาวรจากต้นฉบับเมื่อ 23 กันยายน 2558 . สืบค้นเมื่อ27 ธันวาคม 2019 .
  17. แฮนค็อก, เทอร์รี (29 สิงหาคม 2551). "จะเกิดอะไรขึ้นถ้าลิขสิทธิ์ไม่นำไปใช้กับไฟล์สั่งการแบบไบนารี" . นิตยสารซอฟต์แวร์ฟรี เก็บถาวรจากต้นฉบับเมื่อ 25 มกราคม 2016 . สืบค้นเมื่อ25 มกราคม 2559 .

ที่มา

ลิงค์ภายนอก