Wall of Text #3: Master/slave

มีเรื่องเล่าให้น้องเค้าฟังว่า

ปีที่แล้วมีกระแส Political Correctness มาบอกว่า คำว่า Master/slave ไม่เหมาะสม ไม่ควรใช้ เพราะเราเลิกทาสนานแล้ว บางคนอาจจะมองว่าเป็นคำไม่ดี

ตัวอย่างการใช้งานเช่น ในเว็บไซต์เมื่อ user ทำงานบางอย่างแล้วเราจะขอให้ slave ช่วยส่งข้อมูลไปให้บริการอื่นๆ ด้วย

กรณีนี้ Master คือตัวหน้าเว็บไซต์ สั่งงานให้ Slave ทำงาน แล้ว Slave ไม่มีสิทธิ์ขึ้นมาเป็น Master ได้เพราะ Slave ทำหน้าเว็บไซต์ไม่เป็น

กรณีนี้ Slave อาจจะเรียกว่า Worker ก็ได้

อีกการใช้งานหนึ่งมักจะเห็นในระบบฐานข้อมูล ถ้าเราต้องการให้ฐานข้อมูลใช้งานได้ตลอดเวลา เราจะตั้งระบบสำรอง

ระบบหลักนี้ก็จะเรียกว่า Master และ Slave คือสำรอง จะแตกต่างกับข้างบนคือในกรณีที่ Master ล้ม Slave จะกลายเป็น Master ก็ได้

กรณีนี้บางคนอาจจะเรียกว่า Primary กับ Replica ซึ่งคำว่า Replica แปลว่าต้องเป็นโคลนของ Primary เท่านั้น

ดังนั้นเราจะเห็นข้อดีของการใช้คำว่า Master/Slave คือ มันเข้าใจง่าย ทาสทำงานให้เจ้านาย เห็นภาพชัดเจนไม่ต้องตีความซับซ้อน และมันใช้ได้หลายบริบทมากกว่าคำที่เฉพาะเจาะจงลงไป

เมื่อปีที่แล้วกลุ่มคนที่มองว่าคำนี้ไม่เหมาะสมนั้นก็ได้ส่ง Pull request ไปหลายโครงการ open source ที่มีชื่อเสียง เพื่อให้ยกเลิกใช้คำเหล่านี้

ปัญหาก็คือมันไม่ได้ง่ายแบบนั้น

เพราะถ้าคำเหล่านี้อยู่ในเอกสาร ก็ต้องอัพเดตเอกสาร

อยู่ในโค้ด ก็ต้องแก้ในโค้ด

แก้โค้ดก็ต้องเทสว่ามันจะไม่มีอะไรพัง

แล้วพอเป็น Library แก้แค่โค้ดอย่างเดียวไม่พอ คนที่ใช้ Library ก็ต้องแก้ตามไปด้วย

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

ที่สำคัญ แล้วคำใหม่จะเป็นอะไรล่ะที่ยังกินความมากเหมือนเดิม?

คำว่า Leader กับ follower ดูเหมือนจะใช่ แต่ก็ยังไม่ถูก เพราะผู้ตามที่ฉลาดอาจจะแซงกลายเป็นผู้นำได้ จะไปใช้แทนความหมาย Worker ก็ไม่ได้เท่าไรนัก

แล้วก็ยังมีกลุ่ม BDSM (ซาดิสม์, มาโซคิสม์) ที่มีการเล่นโรลเพลย์ทาส ก็บอกว่าถ้าคุณบอกว่าคำนี้คือเหยียดทาส คุณกำลังเหยียดเรานะ เอาเป็นว่าเราเปลี่ยนเป็น Dominant (รุก) กับ Submissive (รับ) ไหมล่ะ…

เอากับเค้าสิ… แต่ผมว่าเรียก dom กับ sub ก็ดีนะ

สุดท้ายแล้วผมจำไม่ได้ว่าได้ข้อสรุปอะไรออกมา แต่กลายเป็นว่ามีคำอีกคู่หนึ่งที่ถูกเพ่งเล็งขึ้นมา คำนั้นคือ Whitelist และ Blacklist

เพราะ Whitelist แปลว่าดี แล้วทำไมต้อง White กับ Black จะแปลว่าคนขาวดี คนดำไม่ดีหรือเปล่า…

หลังๆ มานี้ผมจะเห็น Google กับ Microsoft ก็เลิกใช้คำนี้ไปแล้วเปลี่ยนเป็นคำว่า Allowlist กับ Denylist ความหมายเหมือนกัน แต่อาจจะไม่คุ้นหูเท่านั้น

ที่ยังไม่รู้คือแล้ว Greylist ล่ะจะเป็นคำว่าอะไรดี?

Wall of Text #2: Copy protection

คำถามที่สองถามว่า จะเขียนแอพ Android ป้องกันไม่ให้คน Crack ได้ไหม?

คำตอบคือ It depends

อืม ตอบแบบนี้เปลี่ยนอาชีพเป็น consult เลย…

Depends ยังไง คำตอบคือเราสามารถใช้ Google Play Licensing API เพื่อเช็คได้ว่าผู้ใช้งานซื้อแอพเราหรือยัง

แต่ถ้าเราเช็คในแอพ ปัญหาที่ตามมาคือมันถูกเจาะได้ 2 ท่า

  1. ปลอม response จาก Google Play ให้บอกว่ามีแอพแล้ว (คล้ายๆ iAP Cracker ใน iOS)
  2. ถ้าเราเช็ค 1 อย่างดีแล้ว cracker ก็จะ recompile app เราใหม่โดยลบ check ออก

วิธีเดียวที่จะปลอดภัยคือย้าย check นี้ไปรันบน server ของเราเวลาเราขอให้ server ทำอะไรบางอย่าง

ถ้าไม่มี license ก็ปฏิเสธ ไม่ทำให้

แต่ไม่ใช่ทุกแอพจะสามารถทำแบบนี้ได้ เพราะต้องมี server และ server ต้องทำอะไรบางอย่างด้วย ไม่ใช่แค่ยิงไป check license บน server อย่างเดียว แบบนี้โดนถอดโค้ดแบบข้อ 2 แน่นอน

ตัวอย่างการใช้ server เช่น

  1. Music Game ขายเพลงเป็น In app purchase เวลาจะกดโหลดเพลงฝั่ง server จะต้องเช็ค Licensing ก่อนถึงจะเอาไฟล์เพลงไปให้โหลดได้
  2. แอพที่มี Cloud backup อาจจะล็อคไม่ให้ Cloud backup ได้ (แต่ก็ยัง crack ใช้ feature อื่นๆ ได้อยู่ดี)
  3. ระบบ Social เช่น WhatApps ตอน Login ก็ส่ง Licensing status ไปด้วยเลย ถ้าไม่ซื้อ Login ไม่ได้

แอพที่ทำงานเป็น offline อย่างเดียว ก็ทำอะไรไม่ได้เท่าไรนัก เช่นแอพ Keyboard หรือแอพกล้องถ่ายรูป

วิธีหนึ่งที่พอจะช่วยได้คือใช้โปรแกรมประเภท Obfuscator เพื่อทำให้โค้ดโปรแกรมที่ถอดออกมาแล้วอ่านไม่ออก จะได้ลบ check ได้ยากขึ้น แต่ก็เป็นแค่วิธีถ่วงเวลาเท่านั้นไม่ได้สามารถป้องกันการ crack ได้ 100%