Cyklicznie trafiam na dyskusje próbujące określić, co jest lepsze - podejście niskopoziomowe czy użycie gotowych platform / frameworków. Ostatnio zastanawiam się, czy taka ogólna dyskusja ma jakiś sens? Przy ściśle określonym przypadku można dyskutować, jakie rozwiązanie jest lepsze pod względem ekonomicznym/bezpieczeństwa/wydajności itp. Natomiast przy dyskusji ogólnej raczej nie da się wskazać rozwiązania najlepszego / do wszystkiego.
Co o tym myślicie?
Częstym tematem jest porównanie platformy typu Arduino z wykorzystaniem określonego mikrokontrolera i wyciśnięcia z niego maksimum możliwości z użyciem C/C++ lub nawet asemblera i operacjami na rejestrach / dostępem do peryferiów. Podobnie wypada porównanie gotowych platform sprzętowych np. Raspberry Pi czy określonych modułów opartych o ESP8266/ESP32 a swojego rozwiązania i projektu PCB szytego na miarę. W świecie programowania zdarzają się porównania implementacji na C# / Python / Java. Ścierają się rozwiązania bazodanowe, systemy operacyjne itp.
Użycie gotowej platformy / bibliotek przyspiesza wprowadzenie projektu w fazę, gdy zrealizowana jest większość funkcjonalności. Im bardziej skomplikowane rozwiązanie, tym większe ryzyko błędów / luk bezpieczeństwa oraz mniejszej wydajności. Użycie natywnych rozwiązań to szansa na podniesienie wydajności, możliwość wyeliminowania błędów, jednak potrzebujemy do tego więcej czasu.
Głośne ostatnio luki Spectre i Meltdown, podobnie jak Row hammer, pokazują, że błąd może znajdować się bardzo blisko sprzętu i być niewykryty przez bardzo długi czas. Nie możemy każdego projektu rozpoczynać od 0, są gotowe rozwiązania uważane za bezpieczne i będące powszechnym standardem.
Atak KRACK na WiFi pokazuje, że w powszechnie stosowanym rozwiązaniu nagle może zostać wykryta luka.
Co możemy zrobić? Możemy od początku w projekcie stosować warstwy. Jeżeli nasze rozwiązanie łączy się do WiFi do publicznej sieci internet przesyłając poufne dane, to te dane możemy zamknąć w VPN lub w inny sposób przesyłać w formie zaszyfrowanej. Jeżeli zawiedzie warstwa ochrony na poziomie WiFi, to dane chronione są kolejną warstwą. Takie rozwiązanie oczywiście komplikuje projekt, zmniejsza wydajność i zwiększa ryzyko błędów...
W obecnych czasach rozwiązania chmurowe powodują, że część zasobów jest poza naszą kontrolą, ufamy, że firma trzecia wykonuje swoją pracę dobrze.
Czy jest jakiś kompromis między kontrolą nad konstrukcją naszego rozwiązania, kosztami i czasem wykonania?
Moje zdanie jest takie, że należy mieć świadomość istnienia różnych technologii, pozostawać na bieżąco z nowościami oraz dobierać rozwiązania do konkretnych warunków i wymagań.
Co o tym myślicie?
Częstym tematem jest porównanie platformy typu Arduino z wykorzystaniem określonego mikrokontrolera i wyciśnięcia z niego maksimum możliwości z użyciem C/C++ lub nawet asemblera i operacjami na rejestrach / dostępem do peryferiów. Podobnie wypada porównanie gotowych platform sprzętowych np. Raspberry Pi czy określonych modułów opartych o ESP8266/ESP32 a swojego rozwiązania i projektu PCB szytego na miarę. W świecie programowania zdarzają się porównania implementacji na C# / Python / Java. Ścierają się rozwiązania bazodanowe, systemy operacyjne itp.
Użycie gotowej platformy / bibliotek przyspiesza wprowadzenie projektu w fazę, gdy zrealizowana jest większość funkcjonalności. Im bardziej skomplikowane rozwiązanie, tym większe ryzyko błędów / luk bezpieczeństwa oraz mniejszej wydajności. Użycie natywnych rozwiązań to szansa na podniesienie wydajności, możliwość wyeliminowania błędów, jednak potrzebujemy do tego więcej czasu.
Głośne ostatnio luki Spectre i Meltdown, podobnie jak Row hammer, pokazują, że błąd może znajdować się bardzo blisko sprzętu i być niewykryty przez bardzo długi czas. Nie możemy każdego projektu rozpoczynać od 0, są gotowe rozwiązania uważane za bezpieczne i będące powszechnym standardem.
Atak KRACK na WiFi pokazuje, że w powszechnie stosowanym rozwiązaniu nagle może zostać wykryta luka.
Co możemy zrobić? Możemy od początku w projekcie stosować warstwy. Jeżeli nasze rozwiązanie łączy się do WiFi do publicznej sieci internet przesyłając poufne dane, to te dane możemy zamknąć w VPN lub w inny sposób przesyłać w formie zaszyfrowanej. Jeżeli zawiedzie warstwa ochrony na poziomie WiFi, to dane chronione są kolejną warstwą. Takie rozwiązanie oczywiście komplikuje projekt, zmniejsza wydajność i zwiększa ryzyko błędów...
W obecnych czasach rozwiązania chmurowe powodują, że część zasobów jest poza naszą kontrolą, ufamy, że firma trzecia wykonuje swoją pracę dobrze.
Czy jest jakiś kompromis między kontrolą nad konstrukcją naszego rozwiązania, kosztami i czasem wykonania?
Moje zdanie jest takie, że należy mieć świadomość istnienia różnych technologii, pozostawać na bieżąco z nowościami oraz dobierać rozwiązania do konkretnych warunków i wymagań.
Fajne? Ranking DIY
