2010-02-08 7 views
7

저는 우리가 사용하는 패키지의 예상치 못한/원하지 않는 동작에 대해 동료와 이야기하고있었습니다. 어떤 명백한 부작용도없이 우리의 끝에 쉽게 해결할 수있는 (또는 적어도 해결 방법이 있지만), 그는 강하게 패치를 적용하고 패치를 업스트림으로 게시함으로써 관련 코드를 확장 할 것을 강력하게 제안했습니다. 앞으로 어떤 시점에서 받아 들여지기를 희망합니다. 실제로 우리는 각 새로운 빌드마다 자동으로 적용되는 여러 패키지의 특정 버전에 대한 패치를 유지합니다. 주된 주장은 "추악한"해결 방법이나 연약한 원숭이 패치와는 대조적으로 이것이 올바른 일이라는 것입니다. 반면에, 나는 순결에 대한 실용성을 선호하며 나의 일반적인 경험은 적어도 (치명적인) 버그 수정 이외에는 "no patch"> "monkey patch"> "hard patch"입니다.질문에 (원숭이) 패치 (원숭이)로 패치했는지, 아니면 질문하지 않았습니까?

(하드) 패치, 원숭이 패치 또는 정확히 원하는 것을 수행하지 않는 타사 패키지를 해결하려고 할 때 합의가 있는지 궁금합니다. 주로 버그 수정, 동작 수정, 누락 된 기능 추가, 주어진 패키지 (크기, 복잡성, 성숙도, 개발자 반응성), 기타 또는 일반적인 규칙이없는 패치의 이유와 관련이 있습니까? 사안별로 결정해야한다. 내 의견

답변

0

:

'예기치/원치 않는 행동'= 버그, 다음 monkeypatching (또는 duckpunching)이 표시 될 경우

!.

lib의 버그라고 생각되면 하드 패치와 업스트림 패치를 이해하는 것이 좋습니다.

lib 동작을 보완하기 위해 앱을 복잡하게 만드는 '해결 방법'의 정의를 이해한다면 필자는 확실히 monkeypatching이 더 좋은 아이디어라고 말할 수 있습니다.

내 .2 페소.

0

글쎄, 그것은 상당히 고전적인 위험 대 이익입니다.

패치에 위험이 있습니까? 혜택이 큽니까? 그것을 monkeypatch해라. 약간의 위험이 있고 약간의 이점이 있다면, 나는 그것을 monkeypatch하지 않을 것이고, 단지 당신의 전형적인 release 프로세스에 수정을 끼워 넣을 것이다.

1

패치는 이유 때문에 할 수있는 "옳은 일"입니다 : 오픈 소스 소프트웨어를 사용하면 진짜 버그를 발견했거나 다른 사람도 필요하다고 생각되는 기능이 필요할 경우 패치를 패치하고 제출할 수 있습니다 커뮤니티에 되돌려주고 전체적으로 소프트웨어를 개선하는 데 기여하는 방법입니다. 패치가 승인되면 귀하 또는 귀사의 평판에 +1이 무료입니다. 그들이 이력서를 통해 커뮤니티에 기여한 유용한 오픈 소스 코드의 예가 너무 많아서 아무도 슬퍼하지 않았습니다 ...

그 당시 우리는 언제나 참호에서 옳은 일을하지 않았습니다. 그러나 모범 사례에 대한 추상적 인 토론을 진행한다면 적절한 우선 순위는 "패치하고 제출하십시오"> 똑똑한 해결 방법> 더 나은 패키지 찾기> 추악한 몽키 찾기 ;-)

+0

상류 패치를 전송하는 또 다른 이점 :-)이 부분과 관련이 아니에요 당신은 사람들이 *이 코드 검토를 얻을 수 있다는 것입니다 누가 소프트웨어를 만들었습니까? 그다지 중요하지 않습니다. – Daenyth

+0

패치를 제출하는 것은 좋지만 패치가 승인 될 확률은 얼마나됩니까? 아파치 프로젝트는 NCSA httpd에 대한 비공식적 인 패치 세트로 시작했다. 왜냐하면 그들은 어떤 이유로 든 패치를 받아들이는 것을 좋아하지 않았기 때문이다. – Gabe

1

우리가 놓치고있는 한 가지 정보는 예기치 않은 비헤이비어가 순수하고 단순한 버그인지 또는 패키지의 일부 소비자가 원하는 행동인지 여부입니다.

여기에있는 다른 사람들의 말처럼 위험과 노력이 절충됩니다. 나는 당신의 특정한 상황을 알지 못하면서 어떤 확실한 단언도 할 수 없다.

하지만 패치를 수락 할 것으로 생각되면 장기적으로 패치를 적용하고 업스트림을 푸는 것이 위험과 노력을 덜 수 있습니다.여부에 관계없이 하드 패치 또는 monkeypatch, 당신은 그것에서 비용을거야 - 당신이 사용하는 패키지의 버전을 업데이트 할 때마다, 당신은 여전히 ​​작동 패치를 테스트하고, 필요에 따라 그것을 업데이 트해야 할거야 패키지의 변경 사항 하드 패치를 사용하면 패치를 다시 적용해야하지만, 두 옵션 중 하나만 사용해야하는 테스트/업데이트보다 작업이 적습니다.

이 시나리오에서는이 시나리오에서 두 가지의 패칭이 있습니다.

업그레이드 할 때 패치를 잊어 버린 경우 하드 패치를 사용하면 패치가 완전히 사라져서 치명적인 오류를 일으킬 수 있습니다. 원숭이 패치가있는 반면, 패치는 여전히 존재하지만 테스트하지 않은 경우에도 동일한 효과가 있습니다. 내 생각에 하드 패치가 완전히 누락 된 것보다 훨씬 위험한 상태입니다.

하드 패칭에 대한 또 다른 이점은 하드 패치와 함께 결국 패키지에 통합되어야하며 비용이 사라집니다. 원숭이 패치는 문제가 독립적으로 해결 될 때까지 무한정 돌아 다니게됩니다.

예기치 않은 동작이 소비자가 원하는 다른 패키지이고 단순히 버그가 아닌 경우 그림이 복잡해집니다. 이 경우 원숭이 패치 솔루션은 단순히 동작을 제거해야합니다. 그러나 딱딱한 패치는 그것을 원하는 사람들을 위해 행동을 유지해야 할 것입니다.

이 분석은 패키지 관리자 및 기타 소비자에게 발생할 수있는 도덕적 의무를 무시합니다.

또한, 나는 철학적 원숭이 패치의 전체 개념에 반대하고있어,하지만 그

관련 문제